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

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

カテゴリ:blender

目次

概要

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

反転ポリゴン法

反転ポリゴンを使う

反転ポリゴンの線の太さを調整する

フリースタイル

フリースタイル

ノード

法線/深度を使う

明度差/色を使う

Object/Material ID を使う

UV を使う

覆い焼き(Dodge)を使う

応用編

輪郭の太さを変更する

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

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

余計な線を消す方法

概要

Blender で輪郭抽出する方法は大きく分けて3つある。反転ポリゴン法・ノードを使う方法・フリースタイルだ。

反転ポリゴン法

反転ポリゴン法はリアルタイムで表示できて入り抜きを調整できるが、任意の場所に線を出すのは苦手だ。 メッシュのセットアップが必要なので使い回しができない欠点もある。

ノードを使う方法

ノードを使う方法はリアルタイムで表示できず入り抜きも入れられないが、任意の場所に線を出せる。ノードの使い回しができて、メッシュのセットアップが不要という利点もある。 任意の場所に線を表示したい時は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 と同じだ。 Solidify で輪郭用ポリゴンを作り、マテリアルを割り当て、シェーダで不要な部分を透明にする。

Cycles で反転ポリゴンを使うときのノード設定

Blender Render

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

設定まとめ

反転ポリゴンの線の太さを調整する

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

反転ポリゴンを使う際の注意

反転ポリゴンは板ポリゴンではうまく機能しない。 これは前髪などで問題になることがある。

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

その時は追加の Solidify(厚み付け)をつけることで輪郭を表示させられる。 このとき輪郭抽出用の Solidify が下になるようにする。

solved
輪郭抽出用の Solidify が下

ノードを使った輪郭抽出

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

法線/深度を使う

法線のみを使う

Filter の Laplace や Sobel を使えば法線を線画に変換できる。

Laplace を使った輪郭抽出
result
Laplace を使った輪郭抽出の結果

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

法線を使って輪郭抽出するノード
結果
法線を使った結果
単純なソーベル
単純なソーベル

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

単純な方法では微妙な深度を検出しづらい。 コントラストを上げれば検出できるが、手前や奥の情報が飛び背景に不要な線が現れる。 エッジノード では深度を対数に変換してから輪郭を抽出している。

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

深度に色をつける

深度を正規化した後にカラーランプで色を付ける。 カラーランプのカラーモードを HSL にして、補間モードを時計回りにすると簡単に虹色をマップできる。

ふたつを合成

手軽な方法1
手軽な方2
法線と深度を合成する
Depth+Normal
深度と法線の合成

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

エッジノード

明度差/色を使う

明度差

ColorRamp で線の出る範囲を調節できる。

明度差を検出する

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

赤を検出する
結果
結果

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 を使う方法

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

覆い焼きを使う方法

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

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

フリースタイル

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

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

CyclesでFreeStyleを使う

FreeStyle 101: Edge Types(英語)

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

輪郭の太さを変更する

拡張/浸食(Dilate/Erode)

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

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

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

インペイント(Inpaint)

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

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

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

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

頂点色を使ってレンダリングするには、 マテリアルの「陰影なし」と「頂点カラーペイント」にチェックを入れて頂点色を使ってレンダリングする。

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

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

頂点ペイント tips

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

mask
マスク

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

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

レンダリング設定

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

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

ノード設定

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

ノード例

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

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

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

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

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

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

余計な線を消す方法

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


外部リンク

関連記事

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

Blender 記事の目次


広告
広告