今回のチュートリアルでは、実際にはレンダリングする必要はないものの、その形状や位置情報を利用して別の効果を実現するために、View Layers を使ってオブジェクトからマスクを取得する方法を見ていきます。
動画の書き起こし
皆さんこんにちは!これは、数日前に公開した View Layers と Z-Combine に関するビデオチュートリアルの補足編です。
そのチュートリアルでは、Blender 4.1 で View Layers を定義して、シーン内のオブジェクトを個別にレンダリングする方法と、その後 Z-Combine ノードを使ってそれらを合成し、カメラからの距離に基づいてピクセルを表示する方法を紹介しました。
今回のチュートリアルでは、実際にはレンダリングする必要はないものの、その形状や位置情報を利用して別の効果を実現するために、View Layers を使ってオブジェクトからマスクを取得する方法を見ていきます。
使用しているシーンには、特に 3 つの View Layers があり、それぞれに 1 つのオブジェクトが含まれています。具体的には、航空機、排気ガスを表すコーン、そしてショックダイヤモンドを表現する複数のシリンダーで構成されたメッシュオブジェクトです。
航空機を含む View Layer のみをレンダリングすると、排気ガスやショックダイヤモンドなしで、仮想空間の背景に対して航空機がレンダリングされていることが分かります。背景は Nishita Sky を使用して作成されています。

ショックダイヤモンドを表すメッシュは、排気ガスを表すコーンにペアレント設定されており、そのコーンはさらに航空機にペアレント設定されています。そのため、これら 2 つの要素は航空機のすべての動きに追従します。

すべての View Layers をレンダリングすると、3 つの個別レンダリングが得られ、それらが Compositing で合成されます。それでは、その方法を見ていきましょう。

この 2 つの要素そのものをレンダリングするのではなく、それらを表す白黒マスクだけが必要なので、オブジェクトを含む 2 つの View Layer で Object Index Render Pass を有効にし、Object Data タブの Relations セクションでそれぞれのオブジェクトに数値インデックスを割り当てます。なお、これらは別々の View Layers 上にあるため、同じインデックスを割り当てても問題なく区別できます。

また、この 2 つの View Layer の View Layer タブで、Compositing における Depth 情報を取得するために Z Render Pass も有効にする必要があります。
Depth 情報は、Z-Combine ノードを使って複数の View Layers を合成するために必要です。
それでは、このチュートリアル冒頭でお見せした最終レンダリングを実現するために作成した Compositing セットアップを見てみましょう。

セットアップの左側には入力があります。
ご覧の通り、3 つの Render Layers ノードがあり、それぞれ独自の View Layer を持っています。排気ガスとショックダイヤモンド用の 2 つの Render Layers には、IndexOB 出力もあります。

セットアップの右側には、皆さんおなじみの 2 つの Z-Combine ノードがあります。具体的には、まず排気ガスとショックダイヤモンドがこの順番で合成され、その合成結果が Foreground として別の Z-Combine ノードに渡されます。そこで、Background は航空機のレンダリングです。

View Layers と Z-Combine の基本チュートリアルでも説明した通り、Z-Combine ノードの 2 つの入力は、実際には Background と Foreground に分かれています。Foreground に入る情報が半透明の場合、Background 側の情報も部分的に表示されるためです。
追加した 2 つのオブジェクトをレンダリングせずにマスクだけを取得するには、それぞれの Render Layers ノードから IndexOB 情報のみを取り出し、その情報を ID Mask ノードに渡します。そして、Object Data タブでオブジェクトに割り当てたものと同じ番号を指定します。

入力されたマスクは、黒背景に白で表示されます。
透明背景のマスクを得るには、ID Mask の出力を Set Alpha ノードに接続し、そのマスクを両方の入力に接続します。こうすることで、マスクの黒い部分が透明としてレンダリングされます。

その後、好みのグロー効果を実装するためのノードがありますが、この部分については、目的の効果を得るために Compositing ノードや各種パラメータを自由に調整してください。ここで紹介するのは、最終レンダリングを実現するために私が使用した設定例にすぎず、決して固定的なものではありません。

ショックダイヤモンド用のノードセットアップは最もシンプルで、マスクを Blur ノードでぼかし、その後 RGB Curves ノードで明るさを調整しているだけです。
RGB Curves ノード内では、最終画像に少し青みを加えるために B カーブも調整しました。

排気ガス用のノードセットアップは少し複雑です。というのも、排気ガスを表すコーンの輪郭だけを取得したかったからです。

この輪郭を作るために、マスクから、その縮小版を減算しました。縮小版は、負の値を設定した Dilate Erode ノードを使って作成しています。
Dilate Erode ノードを使ってマスクの輪郭だけを取得する方法については、以前「Glowing Edges」というビデオチュートリアルを作成しました。まだ見ていない方にはおすすめします。興味深い内容が含まれていると思います。

その後、マスクをぼかし、RGB Curves ノードで明るさと色を調整しました。この場合は R カーブを変更していますが、これは個人的な選択です。さらに、Fog Glow モードの Glare ノードを使って追加のグローを加えています。

排気ガスとショックダイヤモンドは 3D オブジェクトなので、常に航空機に追従します。Compositing では、それらの強度や見た目を自由に調整できます。そして、このように Z-Combine ノードを設定することで、すべてのフレームで正しくレンダリングされ、航空機の上に不自然に重なることもありません。


それでは、今回のチュートリアルは以上です!少しでも参考になれば嬉しいです!また次回お会いしましょう!