広告
広告

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

カテゴリ:blender

個人的には反転ポリゴン法頂点色を使う方法が好みだ. 反転ポリゴン法はリアルタイムで表示できて入り抜きを調整できるが,任意の場所に線を出すのは苦手だ. 頂点色を使う方法は任意の場所に線を出せて入り抜きを調整できるが,リアルタイムの確認はできない. 基本的には反転ポリゴン法を使い,反転ポリゴン法で出せない線はその他の方法を使うのがおすすめだ.

フリースタイルは破線や深度を使った入り抜きなど他の方法では実現できない機能を持つ. しかしフリースタイルには最大の欠点がある. 入り抜きを入れると視点によっては途中で線が途切れる問題だ. これは現状(Blender 2.78a)避ける方法がない.

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

目次

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

反転ポリゴンを使う

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

法線/深度を使う

明度差/色を使う

Object/Material ID を使う

UV を使う

フリースタイル

応用編

輪郭の太さを変更する

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

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

余計な線を消す方法

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

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

AA の設定
AA の設定

ブラーを使った AA

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

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

反転ポリゴンを使った輪郭抽出

Blender Render

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

設定まとめ

Cycles

Solidify modifier Contour/Outline(英語)

Cycles で反転ポリゴンを使う方法も基本的には Blender Render と同じだ. Solidify で輪郭用ポリゴンを作り,マテリアルを割り当て,シェーダで不要な部分を透明にする.

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

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

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

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

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

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

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

solved
輪郭抽出用の Solidify が下

法線/深度を使った輪郭抽出

単純な法線を使った輪郭抽出

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

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

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

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

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

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

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

ふたつを合成

手軽な方
法線と深度を合成する
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』アニメ調に最適

フリースタイル

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

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

CyclesでFreeStyleを使う

FreeStyle 101: Edge Types(英語)

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

輪郭の太さを変更する

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

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

ブラーをかける ことで,輪郭を太くできる.

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

コンポジティングノードを使用して輪郭線を検出する方法

色塗り

頂点色用のマテリアルを作成し,Shadeless(陰影なし)と Vertex Color Paint(頂点カラーペイント)にチェックを入れる. そして線を出したい場所を色分けして塗る

shadeless
Shadeless

頂点ペイント tips

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

mask
マスク

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

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

レンダリング設定

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

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

ノード設定

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

ノード例

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

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

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

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

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

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

余計な線を消す方法

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


関連記事

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

Blender 記事の目次


広告
広告