blenderで境界ぼかしをする

境界をぼかすのは割とメジャーな表現な気がするのにもかかわらず,調べてもやり方があまり出てこなかったので,ノードでのコンポジットの方法をメモしておきます.Blenderのバージョンは2.93.3です.

目標

以下のように,平面と球のオブジェクトを用意し,球のうち三次元的な距離が平面に近い部分だけぼかすような表現を目指します.イメージとしては球が平面から湧き出しているような感じですね.


下準備

「Plane」,「Ball」の二つのビューレイヤーを作成し,前者では平面をレンダリング対象に,後者では球をレンダリング対象,平面をマスクの対象にします.以下の図のように設定すればOKです.



コンポジット

下準備が済んだところで,コンポジットに入ります.コンポジットエディタを開き,ノードを使用するにチェック,そのあと,ノードを以下のようにつなぎます.

Planeのレンダリング結果にBallのそれがアルファオーバーされた,普通の結果が得られます.このBallの画像の下部分をぼかしていきます.


レンダーレイヤーの深度は各ピクセルにおける,カメラと対象物の距離を表していますので,この減算結果が小さいほど球と平面が近いことを表しています.そのためその減算結果が一定の範囲内にあるときのみ0より大きい結果を返すようなノードグループを作成します.

新しく適当なノードを追加し,それを選択したうえで追加→グループ→グループ作成でノードグループを作り,以下のように設計します.

これは,input1-input2の結果がthresholdより小さくかつ正であるときのみに出力から0以上の値をだし,そうでない時は0を出力するようなノードとなっております.また,後で調整を楽にするために,出力にmultiplierの値を掛けられるようにしております.

このノードグループができたら,右上にある曲がった矢印のボタンを押して親ノードツリーに移動し,再度以下のようにノードをつなぎます.

各値はプレビューを見ながら調整してください.ぼかしのXYを調整することでぼかしの効果が大きくなり,さっき作ったノードグループのthresholdを大きくするとぼかしの適用される範囲が広がります.

完成

これにより,めでたく目標としていた画像が合成できます.

やはりBlenderの表現力はなかなかですね.