dskjal
広告
広告

Blender のラインアートの使い方

カテゴリ:blender

目次

概要

ラインアートはバージョン 2.93 以降で使える。ラインアートは、カメラから見たオブジェクトの輪郭抽出を行い、グリースペンシルオブジェクトのレイヤーに書き出すモディフィアだ。

ラインアートはモディフィアなので、ひとつのグリースペンシルオブジェクトに重ねて使える。エッジタイプごとにモディフィアを分けたり、レイヤーを分けたりしておくと、ベイク後に編集が楽になることもある。

他の輪郭抽出技法との比較

輪郭抽出技法まとめ

背面法

輪郭にのみ線が必要な場合、背面法が代替案になる。背面法はポリゴン数が多くてもリアルタイムで描画できる。

ベベルモディフィア

ベベルで制限方法を角度にしてマテリアルを適用すれば、クリース線が出せる。制限方法を頂点グループにすれば、辺マークも可能。この方法も描画負荷が低い。ただしベベルによってメッシュが変形する。

Ambient Occlusion

マテリアルで AO を使うと交差線に線が引ける

Malt

Malt はレンダラーで、GLSL でシェーダが書ける。オブジェクト交差線・クリース・輪郭が検出できる。高性能な GPU ならば数百万ポリゴンでもリアルタイムで描画できる。

コンポジター

コンポジターは計算負荷が、ポリゴン数ではなくレンダリング解像度に比例するのが強みだ。ポリゴン数の多い巨大なシーンならば、コンポジター以外に選択肢がないこともある。

フリースタイル

スチルならフリースタイルの方が線の自由度が高い。ただし交差線を出すには、工夫が必要になる。スチルなら、交差線のみラインアートを使う運用が効率的。

ラインアートのパフォーマンス

ラインアートは CPU でエッジ検出のみを行い、描画にはグリースペンシルを使う。ラインアートモディフィアの最適化が不足しており、バージョン 2.93 の時点ではリアルタイムで動作できるポリゴン数の上限は2万ポリゴン程度。抽出される線が多いと、1万ポリゴン以下でも動作が重い。交差線の検出を有効にするとさらに遅くなる。

バージョン 3.3で一部のアルゴリズムがマルチスレッド化され、全体的に3倍以上高速化されている。このバージョンならば3万ポリゴン程度ならビューポートでリアルタイム動作させられる。

バージョン 3.0

バージョン 3.0 でロードのマルチスレッド化交差線検出の高速化(40% 高速)が実装された。

バージョン 3.3

マルチスレッド化された四分木を採用し、三角形の挿入と交差判定とが高速化された。全体的に3倍以上高速化されている。

Blender のバージョン 3.3、Ryzen 5 2600 のマシンで、ラインアートを有効にした状態で3万ポリゴンのキャラクターを動かしたときのビューポートの fps は 15~30 だった。

パフォーマンスを上げるには

ラインアートは、他のオブジェクトに遮蔽されて不可視状態のポリゴンに対しても線の検出判定を行うので、見えない部分を非表示にするのは重要になる。底や裏面のポリゴンを削除するのも有効。

バージョン 2.93 のラインアートモディフィアは最適化が不足しており、ラインアートモディフィアを重ねると余計な計算が複数回行われる。なので可能な限りラインアートモディフィアを重ねず Vertex Weight Transfer で線を編集する。バージョン 3.0 ではキャッシュが機能しているので、ラインアートを重ねてもパフォーマンスが低下しづらい。

裏面を無視(Back Face Culling)

裏面を無視を有効にするとカメラから見て法線が裏を向いているポリゴンの計算を省略するためパフォーマンスが上がる。

backface culling

backface culling

線を滑らかにする

メッシュに再分割曲面モディフィアをつけると、平面部分も分割されてパフォーマンスが悪くなる。なのでグリースペンシルに再分割曲面をつけて線を滑らかにする方法が推奨される。ただしメッシュが線から飛び出ることがあるので、線を太くする必要があるかもしれない。

グリースペンシルに再分割曲面をつける方法ではチェーン化を有効にする必要がある。

線のみが必要な場合

ラインアートがリアルタイムで動作する上限は2万ポリゴン程度だが、グリースペンシルオブジェクトは3万ストローク+ 10 万頂点でもリアルタイム動作が可能。

配列モディフィア

メッシュを配列モディフィアで複製するのではなく、グリースペンシルオブジェクトの配列モディフィアで線のみを複製する

縁取り

天井に埋め込まれた照明や窓枠などの単純な縁取りならば、マルチストロークモディフィアが使える。隙間ができるのでチェーン化の設定が必須になる。

マルチストロークモディフィアで作った縁取り

マルチストロークモディフィアで作った縁取り

ラインアートの非表示

ラインアートを無効にするには、グリースペンシルオブジェクトを非表示にするか、ラインアートモディフィアを非表示にする。

アウトライナーからモディフィアの可視性を変更できる。

アウトライナーでモディフィアの可視性を変更

アウトライナーでモディフィアの可視性を変更

カメラの設定

ラインアートはカメラから見る必要がある。カメラとビューポートとを一致させるには、ビュー > カメラ設定 > アクティブカメラ(Numpad 0)でカメラからの視点に切り替え、サイドバー(N)で「カメラをビューに」にチェックを入れる。

カメラをビューにロック

カメラをビューにロック

ラインアートの作成

「Shift + A > グリースペンシル」からコレクションやシーンを指定して作成するのが簡単だ。

1から設定するには以下の手順になる。

  1. ブランクのグリースペンシルを作成
  2. 「プロパティパネル > オブジェクトタブ > ビューポート表示 > 最前面」にチェックを入れる
  3. グリースペンシルの新規レイヤーを作成
  4. グリースペンシルのマテリアルを作成
  5. グリースペンシルにラインアートモディフィアを追加
  6. ラインアートモディフィアのコレクション、レイヤー、マテリアルを設定

ラインアートの設定

線幅・不透明度の設定

ラインアートモディフィアでも線幅・不透明度を設定できるが、これはプレビュー用だ。ラインアートをベイクするとこれは変更できない。なので最終的には幅モディフィアと不透明度モディフィアとで調整する。

交差線

ソースタイプがオブジェクトの場合、交差線が出ない場合がある。その場合はソースタイプをコレクションかシーンにする。

交差線のマスク(3.0)

交差線をマスクする場合はソースタイプをシーンにするか、マスクするコレクションをすべて含むコレクションを作成するかする必要がある。現状はオブジェクト単位のマスクしかサポートしてない。

色分けしたい場合は、マスクごとに別のレイヤーに出力する。

設定

交差線をマスクしたいオブジェクトのどちらか片方を別のコレクションに入れて、コレクションの設定で使用方法(Usage)を内容(Include)、マスクを設定する。

ラインアートモディフィアの交差線マスクを設定すると、交差線をマスクできる。

コレクションのマスク

コレクションのマスク

辺マーク

メッシュのエディットモードで「Ctrl + E > Freestyle辺をマーク」で任意の辺に線が出せる。辺マークを入れても線がでない場合は、重複する辺を輪郭にオプションを試す。

フリースタイル面マーク(3.0)

バージョン 3.0 で面マスクの境界と反転とがサポートされた。面マークフィルター(Face Mark Filterling)にチェックを入れると使えるようになる。

重複頂点を削除

重複頂点を削除はバージョン 3.3 で削除される予定だ。オブジェクトのロードの高速化を優先したため。今後もこのオプションが復活する予定はない。

重複頂点を削除するオプション。モデリングの途中で線を確認する際によく使う。ただしこのオプションで頂点が削除されると Vertex Weight Transfer がうまく機能しない。

重複する辺を輪郭に

辺分離モディフィアを使ってシェーディングをコントロールしているメッシュは、分離箇所に二重に線が引かれてしまう。重複する辺を輪郭にオプションはこのような重複した線を除去してくれる。ただし実行速度は遅くなる。

辺マークをつけたのに線がでない場合に、このオプションを有効にすると線が出ることがある。

クリース

クリースは角度が閾値以下の辺に線を引く。なので背景用ビルやタンスのような鋭利なエッジを持つオブジェクトには適している。

クリースはベベルと相性が悪い。ハイポリゴンの家具等はクリース線が機能しないことが多く、リトポロジーが必要になるだろう。逆に局所的にクリース線を消したいときはベベルが使える。

曲面と鋭利なエッジで構成されたメッシュでクリースを使うと、ノイズが問題になりやすい。

クリースによってできたノイズ

クリースによってできたノイズ

曲面と鋭利なエッジで構成されたメッシュでクリースがうまく機能しない場合は、クリースを外して手動でエッジマークをつけるか、オブジェクトを分割するかする。

オブジェクトのクリース設定

「プロパティパネル > オブジェクト > ラインアート」でオブジェクトごとのクリースを設定できる。

クリースのオーバーライド

クリースのオーバーライド

アンベベルアドオン

Mira Tools

Modify タブにアンベベルがある。

UnBevel for Blender (Ringed Path Selection Pattern)($0+)

ベベルの側面の辺を選択して実行する。

Occlusion

ポリゴンの裏にある線を描画する機能。X線エフェクトやガラス窓等で必要になる。レベルは遮蔽されているポリゴン枚数。

透過

メッシュの透過マテリアルでマスクする機能。ガラス窓や眼鏡、水面など、意外と利用場面は多い。

メッシュの透過マテリアルの透過ビットはマテリアルタブで設定できる。

透過ビットの設定

透過ビットの設定

ラインアートの透過でマスクするマテリアルを設定する。透過メッシュがあることで遮蔽されているので、Occlusion のレベルも適切に設定する必要がある。

ラインアートの透過設定

ラインアートの透過設定

線の加工

入り抜き

幅モディフィア(Thickness modifier)

ラインストロークに入り抜きを設定できる。

幅モディフィアを使った入り抜きはアニメーションではちらつきが発生する。

設定

幅を均一化にチェックを入れ、カスタムカーブを設定する。

幅モディフィアの設定

幅モディフィアの設定

Fading(3.0)

幅モディフィアと不透明度モディフィアとは Fading で減衰を設定できる。エンプティ等のオブジェクトを利用して減衰開始位置を設定する。バージョン 3.0 の時点では、エンプティ周辺の線を消す用途には使えない。

ドライバーを使って、Fading End にエンプティの球のスケールX等を対応させると、エンプティのスケールで入り抜きをコントロールするリグが組める。

ドライバーの設定

ドライバーの設定

動作デモ

動作デモ

Vertex Weight Transfer

Vertex Weight Transfer は重複頂点を削除オプションと相性が悪い。重複頂点を削除オプションが有効な場合、ただしくウェイトを転送できないことがある。

Vertex Weight Transfer は、メッシュの頂点グループのウェイト情報を、グリースペンシルの頂点グループに転送する機能だ。この転送された情報をつかって、幅モディフィアの入り抜きを設定できる。チントモディフィアを使えば色トレスができる。そのほかラティスやノイズ等のモディフィアも頂点グループで影響力を設定できる。

Match Output のチェックを外せば、転送先の頂点グループを指定できる。そうでない場合は、メッシュの頂点グループ名とグリースペンシルの頂点グループ名とは一致する必要がある。

Vertex Weight Transfer の Filter Source の行頭が一致する頂点グループがすべて転送される。

モディフィアの設定

モディフィアの設定

設定手順

  1. メッシュの頂点グループで加工したい頂点を設定する
  2. Lineart モディフィアの Vertex Weight Transfer の項目で設定した頂点グループを指定
  3. グリースペンシルに頂点グループを作成。このとき頂点グループ名を一致させる
  4. チントモディフィアや不透明度モディフィアなど、頂点グループを使用するモディフィアを使用する

転送スクリプト

メッシュの頂点グループ名をグリースペンシルオブジェクトの頂点グループ名に複製するスクリプト。スクリプトの filter_source で指定した名前で始まる頂点グループ名のみが作成される。このスクリプトはメッシュとグリースペンシルオブジェクトとを選択して実行する。

import bpy

filter_source = 'lineart'

selects = bpy.context.selected_objects
if len(selects) != 2:
    raise Exception("Select a mesh object and a grease pencil object")
    
if selects[0].type == 'MESH':
    mesh = selects[0]
    lineart = selects[1]
else:
    mesh = selects[1]
    lineart = selects[0]

# set lineart filter
gpms = [m for m in lineart.grease_pencil_modifiers if m.type == 'GP_LINEART']
for m in gpms:
    m.source_vertex_group = filter_source
    #m.use_remove_doubles = False
    
# transfer vertex group name
src_vgs = [v.name for v in mesh.vertex_groups if v.name.startswith(filter_source)]
for vg in src_vgs:
    if lineart.vertex_groups.find(vg) == -1: # not found
        lineart.vertex_groups.new(name=vg)

チェーン化

入り抜きを入れると団子状の線が発生することがある。これは奥行き方向の距離差やエッジフローなどが原因で線がつながっていないために起こる。

団子状の線

団子状の線

チェーン化を設定すると、閾値以下の線の始点と終点とが結合される。線をつなげるには、画像の閾値(Image Threshold)を大きくし、角度で分割(Angle Splitting)を小さくする。

チェーン化の設定例

チェーン化の設定例

チェーン化のパフォーマンス

線が密集している状況でチェーン化が有効な場合、パフォーマンスが悪化する。チェーン化を無効にすることでビューポートのパフォーマンスを向上させられる。チェーン化を無効にするには、チェックをすべて外し、画像のしきい値を0に、角度で分割を 180° に設定する。

チェーン化を無効にする

チェーン化を無効にする

線のコントロール

線幅の固定

カメラからの距離によって線の幅を変えたくない場合は、グリースペンシルのストローク幅を「スクリーン空間」にする。

線幅の固定

線幅の固定

ズーム時の線幅の問題

ラインアートの線幅は1が最小で、これ以上線を細くできない。これはズーム時に1より小さい線幅が求められる場合に問題になる。対策としてはエンプティにラインアートのグリースペンシルを除くすべてのオブジェクト(カメラやライト、背景を含む)を親子付けして、エンプティを 5~10 倍拡大する方法がある。

グリースペンシルオブジェクトを拡縮すると線幅を変更できるが、1より細くはならない。

幅の均一化

「幅の均一化」にチェックが入っているとラインアートや他の幅モディフィアの影響を受けなくなる。

ライトの不使用

グリースペンシルレイヤーはデフォルトではライトの影響を受ける。発光体に線を引く場合、線が黒くなるため、このチェックは外した方がいい。

グリースペンシルレイヤーのライトを使用のチェックを外す

グリースペンシルレイヤーのライトを使用のチェックを外す

任意の場所に線を置く

辺のみのポリゴンを配置すると任意の場所に線が出せる。シェイプキーを使ってメッシュ内に隠す、もしくは縮小すれば任意のタイミングで消すことも可能。

辺を配置して線出し

辺を配置して線出し

不要な線を除去する

以下の3つの方法がある。

  1. ベイクした後に線を削除する
  2. Vertex Weight Tranfer と不透明度モディフィアを使う
  3. 不透明度モディフィアの Fading を使う

Fading は影響力が球状なので大雑把なコントロールに向いている。線一本単位の制御はベイク削除か、Vertex Weight Tranferを使う。

クリースのノイズが問題になる場合は、シェイプキーやラティスで頂点を移動させる方法もある。

カメラの角度によって線の幅を変えるには視点依存リグを参照。

Vertex Weight Transfer を使った不要線の除去

Vertex Weight Transfer を使う場合は、線の出てほしくない辺のウェイトを1にして、不透明度モディフィアの係数を0にする。

巨大なモデルならば幅モディフィアの幅を0にする方法も使える。ただし幅モディフィアは線の幅が0にならないので、数センチメートルの大きさのオブジェクトの線はオブジェクトで隠せない。

hide edge
開口部の輪郭線を非表示にしてある
(オブジェクトが巨大なので隠れてみえないだけ)
不透明度モディフィアの場合

不透明度モディフィアの場合

色トレス

色ごとにオブジェクトを分ける方法と、Vertex Weight Tranfer を使う方法とがある。

色ごとにオブジェクトを分ける方法は、オブジェクトごとにラインアートモディフィアを重ねるだけなので設定が楽だ。しかしラインアートモディフィアを重ねるのは計算負荷が高い。

Vertex Weight Transfer で色トレス

手順は以下のようになる。

  1. 色の数だけメッシュオブジェクトに頂点グループを作成し、ウェイトを割り当てる
  2. ラインアートのグリースペンシルオブジェクトの頂点グループにまったく同名の頂点グループを作成
  3. Vertex Weight Tranfer で頂点グループを転送
  4. 頂点グループでマスクしたチントモディフィアを色の数だけグリースペンシルオブジェクトにつける

Vertex Weight Transfer を使う方法は計算負荷が低いが、Vertex Weight Transfer を使うため重複頂点を削除オプションが使えなくなる。

チントモディフィアはマテリアルプレビューかレンダーシェーディングでしかプレビューできない

被写界深度

Depth of Field with Grease Pencil Objects not working

グリースペンシルは被写界深度に対応していない。対策としては以下の3つがある。

1. グリースペンシルエフェクトのぼかし

グリースペンシルエフェクトのぼかしの被写界深度を使用を使う。ただし、線の一部にピントを合わせる方法はない。

2. グリースペンシルをメッシュに変換する

最も高品質だが、グリースペンシルを編集するたびに変換する手間が発生する。

3. コンポジットを使う

ビューポートで確認できないのがこの方法の欠点だ。

grease pencil experiment 4 - depth of field

フリースタイル

ラインアートで交差線だけ出力して、残りはフリースタイルを使う方法もある。

ベイク

ベイクは時間がかかる。フレーム数が多い場合は数GB~数十GBのメモリが必要になる。Ryzen 5 2600 のマシンで、4万ポリゴン・400 フレームのシーンをベイクするのに 20 分かかり、Blender の使用しているメモリは8GB、ベイク結果を保存したファイルは 2.3 GBになった。

ベイクしたグリースペンシルの頂点数は 600 万頂点になり、何をするにも数秒待たされる。バージョン 2.93 の時点では、数万ポリゴンのラインアートをベイクして編集することは実用的ではない。

ベイクの注意点

ベイクすると線画を編集できるが、ラインアートモディフィアの設定を変更できなくなる。ベイクをクリアするとグリースペンシルの編集内容は失われる。

ベイクすると「クリアなしで続行」もできる。別レイヤーを作成し、ラインアートモディフィアのターゲットレイヤーを切り替えることで、ベイク内容を保存しておける。

画像をグリースペンシルオブジェクトへ変換

ドラッグアンドドロップで画像をシーンに配置し、「オブジェクト > 変換 > 画像をグリースペンシルにトレース」でできる。アルファがあるとうまく機能しない

画像をグリースペンシルに変換

画像をグリースペンシルに変換

SVG エクスポート

バージョン 2.93 以降はグリースペンシルを SVG にエクスポートできる。ラインアートの線をエクスポートするにはベイクする必要がある。ベイクする前にフレーム数を設定するのを忘れないようにする。

グリースペンシルを SVG にエクスポート

グリースペンシルを SVG にエクスポート

画像をメッシュに変換

Logo Tracer($0+)アドオンを使う。設定パネルは3Dビューポートにある。

高品質な変換が必要なら Inkscape のビットマップトレースを使って SVG に変換したあと、その SVG を Blender にインポートしてメッシュに変換する。

ラインアートのみレンダリング

方法はふたつある。

  1. ラインアートをベイクした後に、オブジェクトを非表示にしてレンダリングする
  2. ラインアートのみをレンダリングするビューレイヤーを作成しておき、ラインアートをベイクした後にレンダリングする

レンダリングテストを繰り返す場合は、ビューレイヤーを作成する方法がよい。コンポジターで表示するビューレイヤーを指定しておけば、再ベイク後にレンダリングするだけでラインアートのみをレンダリングできる。

ラインアートのビューレイヤーを表示

ラインアートのビューレイヤーを表示

トラブルシューティング

線がでない

カメラがシーンに存在するか確認する

線にパースがつく

線幅の固定を参照。

ビューポートの線が汚い・一部線が出ない

グリースペンシルオブジェクトの最前面のチェックを確認する。最前面にチェックを入れると、透過時に線がメッシュより手前に表示されてしまうのが欠点だ。

最前面

最前面

交差線が出ない

ラインアートモディフィアの「交差」のチェックを確認する。

ソースタイプがオブジェクトの場合、交差線がうまくでないことがある。

Vertex Weight Transfer が機能しない

「重複頂点を削除」オプションが有効な場合、Vertex Weight Transfer が機能しないことがある。

線が暗くなるところがある

グリースペンシルレイヤーの「ライトを使用」のチェックを外す

グリースペンシルレイヤーのライトを使用のチェックを外す

グリースペンシルレイヤーのライトを使用のチェックを外す

チントモディフィアが機能しない

チントモディフィアはマテリアルプレビューかレンダーシェーディングでしかプレビューできない。

アドオン

Line Art Tool

サイドバーにラインアートのショートカットを追加するアドオン。



Line Art Modifier(公式ドキュメント)

【Line Artモディファイアの機能紹介・使い方】リアルタイムで確認できる新しいライン描画方法【Blender2.93 / グリースペンシル】

開発資料

Line Art further improvement list(Line Art の実装予定機能リスト)

Line Art As GPencil Modifier FAQ

LANPR GP New Solutions

LANPR Document Draft

Yiming's Blender Wiki Content Index


WYSIWYG NPR: Drawing Strokes Directly on 3D Models

Two Fast Methods for High-Quality Line Visibility

A modified ZS thinning algorithm by a hybrid approach

関連記事

輪郭抽出方法まとめ

Blender 記事の目次


広告
広告

カテゴリ