広告
広告

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

カテゴリ:blender

目次

概要

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

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

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

線のみが必要な場合

カメラの設定

ラインアートの作成

ラインアートの設定

線幅・不透明度の設定

交差線

交差線のマスク(3.0)

辺マーク

重複頂点を削除

重複する辺を輪郭に

クリース

Occlusion

透過

線の加工

入り抜き

Fading(3.0)

Vertex Weight Transfer

チェーン化

線のコントロール

ズーム時の線幅の問題

幅の均一化

ライトの不使用

任意の場所に線を置く

不要な線を除去する

色トレス

被写界深度

フリースタイル

ベイク

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

SVG エクスポート

画像をメッシュに変換

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

トラブルシューティング

線が出ない

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

交差線が出ない

Vertex Weight Transfer が機能しない

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

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

アドオン

外部リンク

概要

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

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

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

輪郭抽出技法まとめ

背面法

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

ベベルモディフィア

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

Ambient Occlusion

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

Malt

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

コンポジター

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

フリースタイル

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

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

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

バージョン 3.0

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

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

  • ポリゴン数を減らす
  • 遠景をローポリに差し替える
  • 交差線を使わない
  • 見えない・カメラに映らないメッシュを非表示にする
  • ラインアートモディフィアを重ねない(2.93 のみ)
  • チェーン化を無効にする

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

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

線を滑らかにする

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

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

線のみが必要な場合

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

配列モディフィア

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

縁取り

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

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

ラインアートの非表示

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

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

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

カメラの設定

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

lock camera
カメラをビューにロック

ラインアートの作成

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

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

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

ラインアートの設定

線幅・不透明度の設定

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

交差線

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

交差線のマスク(3.0)

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

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

設定

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

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

collection mask
コレクションのマスク

辺マーク

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

重複頂点を削除

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

重複する辺を輪郭に

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

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

クリース

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

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

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

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

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

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

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

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

アンベベルアドオン

Mira Tools

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

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

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

Occlusion

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

透過

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

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

set transparent bit
透過ビットの設定

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

line art occlusion setting
ラインアートの透過設定

線の加工

入り抜き

幅モディフィア(Thickness modifier)

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

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

設定

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

thickness modifier
幅モディフィアの設定

Fading(3.0)

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

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

fading rig
ドライバーの設定
demo
動作デモ

Vertex Weight Transfer

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

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

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

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

vertex weight transfer
モディフィアの設定

転送スクリプト

メッシュの頂点グループ名をグリースペンシルオブジェクトの頂点グループ名に複製するスクリプト。スクリプトの 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)

チェーン化

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

thickness noise
団子状の線

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

chaining demo
チェーン化の設定例

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

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

disable chaining
チェーン化を無効にする

線のコントロール

ズーム時の線幅の問題

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

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

幅の均一化

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

カメラのズームに合わせて線幅を変更したい場合は、「幅の均一化」のチェックを外し、ラインアートモディフィアの幅をアニメーションさせる。

ライトの不使用

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

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

任意の場所に線を置く

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

place line
辺を配置して線出し

不要な線を除去する

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

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

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

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

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

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

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

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

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

色トレス

色ごとにオブジェクトを分ける方法と、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 の時点では、数万ポリゴンのラインアートをベイクして編集することは実用的ではない。

ベイクの注意点

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

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

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

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

image to grease pencil
画像をグリースペンシルに変換

SVG エクスポート

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

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

画像をメッシュに変換

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

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

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

方法はふたつある。

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

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

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

トラブルシューティング

線がでない

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

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

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

in front
最前面

交差線が出ない

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

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

Vertex Weight Transfer が機能しない

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

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

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

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

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

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

アドオン

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 記事の目次


広告
広告