広告
広告

Blender で輪郭抽出する方法まとめ

カテゴリ:blender

目次

概要

アンチエイリアスをかける

厚みつけモディフィア(背面法)

厚みつけモディフィアを使う

厚みつけモディフィアの線の太さを調整する

フリースタイル

フリースタイル

ノード

法線/深度を使う

明度差/色を使う

Object/Material ID を使う

UV を直接使う

三次元 UV を出力する

マテリアルオーバーライドを使って透過 UV をレンダリングする

覆い焼き(Dodge)を使う

応用編

輪郭の太さを変更する

頂点色を使ってソーベルの輪郭抽出をコントロールする

オブジェクトの交差する部分に線を出す

余計な線を消す方法

概要

Blender で輪郭抽出する方法は大きく分けて3つある。厚みつけモディフィア・ノードを使う方法・フリースタイルだ。

厚みつけモディフィア(背面法)

背面法の利点は以下の3つ。

  1. リアルタイムで表示できる
  2. 入り抜きを調整できる
  3. オブジェクト単位で輪郭の色を塗りわけられる

欠点は以下の2つ。

  1. 任意の場所に線を出すのが難しい
  2. メッシュのセットアップが必要なので使い回しができない

ノードを使う方法

ノードを使う方法はリアルタイムで表示できず入り抜きも入れられない。加えて線の塗りわけも手間がかかる。しかし任意の場所に線を出せる。ノードの使い回しができる利点もある。

深度と法線とを使う方法はメッシュのセットアップが不要で手軽だ。しかし線のコントロールが難しく品質面(特にノイズ)で問題がある。UV を使う方法は追加の UV のセットアップが必要だが、法線や深度を使う方法よりコントロールが効き、ノイズも比較的少ない。

フリースタイル

フリースタイルは破線や深度を使った入り抜きなど他の方法では実現できない機能を持つ。しかしフリースタイルには最大の欠点がある。入り抜きを入れると視点によっては途中で線が途切れる問題だ。これは動画では線のちらつきとして問題になる。現状(Blender 2.79)では避ける方法がないが、動画で使うときは入り抜きを使わないことで避けられる。スチルならばフリースタイルは有力な選択肢になる。

chasm
線の途中に入った切れ目

アンチエイリアスをかける

Blender Render では Render > Anti-Aliasing > Full Sample にチェックを入れる。ただしレンダリング時間は長くなる。

AA の設定
AA の設定

ブラーを使った AA

カラーランプをつなぐ前にブラーをかける方法もある。ブラーの量が大きいと輪郭が太くなる。

ブラーを使った AA のノード
result
ブラーを使った AA の結果

厚みつけモディフィアを使った輪郭抽出(背面法)

背面法は厚みつけモディフィアの法線を反転して、厚みつけで生成したポリゴンに色を付けることで輪郭を描画する。

Eevee

マテリアルの Blend Mode を Alpha Blend にしないと透過しないことに注意。

eevee solidify
Eevee で反転ポリゴンの設定

Cycles

Solidify modifier Contour/Outline(英語)

Cycles の背面法も基本的には Eevee と同じだ。厚みつけモディフィアで輪郭用ポリゴンを作り、マテリアルを割り当て、シェーダで不要な部分を透明にする。

Cycles で背面法を使うときのノード設定

Blender Render

入りと抜きがある色っぽい線を作る

設定まとめ

厚みつけモディフィアの線の太さを調整する

入りと抜きがある色っぽい線を作る その2

厚みつけモディフィアを使う際の注意

厚みつけモディフィアは板ポリゴンではうまく機能しない。これは前髪などで問題になることがある。

edge is not visible
板ポリゴンでは機能しない

板ポリゴンで背面法の輪郭検出をする場合は追加の厚み付け(Solidify)モディフィアをつけることで輪郭を表示させられる。このとき輪郭抽出用の厚み付けが下になるようにする。

solved
輪郭抽出用の厚み付けが下

ノードを使った輪郭抽出

ノードを使った輪郭抽出法はフィルターノードのラプラス・ソーベル・キルシュを使って輪郭抽出する。これらのノードは色に差があればそこに線を出せるので、設定を工夫すれば任意の場所に線を出せる。

法線/深度を使う

法線のみを使う

フィルターのラプラス(Laplace)やソーベル(Sobel)を使えば法線を線画に変換できる。

法線とラプラスとを使って輪郭抽出するノード
result
法線とラプラスとを使った輪郭抽出の結果

以下のように 3 つの直交するベクトルとの内積をそれぞれ RGB として解釈させると、法線の検出力を調整できる。

法線の検出力を調整して輪郭抽出するノード

単純な深度を使った輪郭抽出

深度は値が [0, 1] の範囲に収まらないので正規化が必要になる。正規化によって深度を [0, 1] の範囲に変換することで深度を色として解釈できるようになる。 エッジノードでは深度を対数に変換することで、カメラから見て手前にある深度の精度を上げている。

深度を使った輪郭抽出
結果
結果

深度に色をつける

深度を正規化した後にカラーランプで色を付けると深度差が微妙な部分にも線が出せる。カラーランプのカラーモードを HSL にして、補間モードを時計回りにすると簡単に深度に虹色をマップできる。

ふたつを合成

手軽な方法
個別に調整可能なノード
Depth+Normal
深度と法線の合成

NormalノードでNormal抽出エッジを調整

エッジノード

明度差/色を使う

明度差

カラーランプで線の出る範囲を調節できる。

明度差を検出する

上のカラーランプは明度差をコントロールし、下の方は他の色を引き算する強さを調整する。

赤を検出する
結果
結果

Object/Material ID を使う

輪郭抽出したいオブジェクトに Object > Pass Index を設定。 マテリアルの場合 Material > Options > Pass Index。

オブジェクト ID の設定
オブジェクト ID の設定
Material ID
マテリアル ID の設定

オブジェクトのみを表示したいので、Render > Shading > Alpha を Transparent にする。 Render Layer > Passes > Object Index にチェックを入れる。 マテリアルの場合は Material Index。

オブジェクト ID の入力
オブジェクト ID の入力
アルファを有効
アルファでオブジェクトのみを表示

以下のようにノードをつなぐ。ID Mask の Index に設定した ID を指定する。

ID 検出ノード
for Material
マテリアルの場合
結果
レンダリング結果

blender - 鏡音リン(4)

UV を直接使う方法

UV 座標を使って線を出すこともできる。この方法は以下の利点がある。

  1. セットアップの手間が小さい
  2. 同時に深度も検出できる
  3. 辺のある場所ならば自由に線が描ける

欠点は以下の4つ。

  1. 透過マテリアルがあると使えない
  2. 任意の場所に線を出せない
  3. テクスチャを使う場合は2回レンダリングが必要

UV を直接使う方法の一番の欠点は透過マテリアルを使えない点だ。透過マテリアルがあると UV パスは何も出力しない。透過マテリアルごと UV をレンダリングする場合は、マテリアルオーバーライドを使って UV をレンダリングすることで UV を使って輪郭を抽出できる。

UV を使う方法では深度によっても線を抽出する。深度が異なる場所は UV 座標も異なる可能性が高いからだ。深度を使う方法で精度が不足する場合は UV を使うことで疑似的に深度を使った線を抽出できる。

手順

手順は簡単で線画抽出用UVを作成し「UVマッピング(U)> プロジェクション」でUV展開するだけだ。後は線が出てほしい部分のUVを縮小するか、移動するかする。

szanne uv
UV 例
node
UV から線画を抽出するノード
result
レンダリング結果

超簡単!blender 3d 輪郭線を抽出方法の『node』アニメ調に最適

三次元 UV を出力する

正面と横とから線画出力用のUVを作成し、色として出力する。3次元UVはマテリアルオーバーライドを使って色として出力する。

uv
UV 例
uv map
線画用UV
material
オーバーライド用マテリアル

マテリアルオーバーライドを使って透過 UV をレンダリングする

マテリアルオーバーライドを使う場合、マテリアルは透過なしか UV ごと透過するかになる。透過無しマテリアルでオーバーライドする場合は UV パスがそのまま使える。UV を色としてレンダリングする場合のマテリアルは以下のようになる。

material settings
UV をレンダリングするマテリアル
composite node
UV を色としてレンダリングした場合のコンポジットノード例

覆い焼きを使う方法

覆い焼きでは明暗差のある場所に線を出せる。ソーベルやラプラスの代わりに使うこともできる。

覆い焼きのノード
non dodge
ソース画像
dodge
輪郭抽出

フリースタイル

基本編 06: FreeStyleの使い方とおすすめ設定

トゥーンシェードにおける Freestyle の使用例

CyclesでFreeStyleを使う

FreeStyle 101: Edge Types(英語)

特定の部分の線を出さないようにする方法

輪郭の太さを変更する

拡張/浸食(Dilate/Erode)

拡張/浸食(Dilate/Erode)を使えば輪郭の太さを変更できる。

拡張/浸食(Dilate/Erode)で輪郭の太さを変更するノード
結果
結果

ブラーをかける ことで、輪郭を太くできる。

インペイント(Inpaint)

線でない部分をカラーキー(Color Key)ノードでアルファ抜きすると、インペイントノードで輪郭線を太くできる。

inpaint
カラーキー+インペイントノードで輪郭線を太くする

頂点色を使ってソーベルの輪郭抽出をコントロールする

頂点色を使ってレンダリングしてフィルタで輪郭抽出する。頂点色を変更することで輪郭をコントロールできる。

Blender レンダーで頂点色を使ってレンダリングするには、マテリアルの「陰影なし」と「頂点カラーペイント」にチェックを入れて頂点色を使ってレンダリングする。 Eevee では放射(Emission)ノードを使う。

vertex paint rendering
頂点色をレンダリングするときのマテリアルの設定

.blend ファイルダウンロード

頂点ペイント tips

マスクして塗るとエッジの効かせて色を塗れる。 マスクする面は左クリックモードでは Shift + 左クリックで選択できる。

mask
マスク

Blender 2.78a では頂点ペイントでテクスチャペイントのようにグラデーションをかけられない。 グラデーションをかけたいときはステンシルテクスチャを作る。 ステンシルテクスチャはマウス右ドラッグで平行移動。Shift + マウス右ドラッグで拡大縮小できる。

demo
頂点ペイントでグラデーション

レンダリング設定

頂点ペイント用のレンダーレイヤーを作成し、マテリアルオーバーライドを使ってレンダリングする。 マテリアルオーバーライドを使うとレンダリングするオブジェクトすべてに、指定したマテリアルを適用してレンダリングされる。 マテリアルオーバーライドを使わない場合はオブジェクトを複製しなければならず、管理が面倒になる。

render layer setting
レンダーレイヤーの設定

ノード設定

フィルタを使って輪郭を抽出する。

ノード例

オブジェクトの交差する部分に線を出す

フリースタイルとブーリアンを使う方法は 交差した部分に線が出ないんですけど… を参照。

フィルタのキルシュを使う方法は セルアニメ風輪郭線の生成方法 を参照。

そのほか ID法線も使える。

レンダーレイヤーのマスクを適用してレンダリングすれば、ソーベルなどのフィルターで輪郭抽出できる。

mask layer
マスクレイヤーで交差する部分を除去してレンダリング

余計な線を消す方法

ノードで作成した輪郭の一部を消す方法


外部リンク

関連記事

セルルックを作る方法まとめ

Blender 記事の目次


広告
広告