第二回 EEVEEのレンダリング結果にマスクレイヤーを使う
※2.93にてEEVEEでのレンダーレイヤーへのset holdoutが実装されたためこちらの方法を使う必要は無くなりました。
※2.80現在での話です、すでに2.81にholdoutシェーダーが実装されているので、遅くとも2.82までには従来のマスクレイヤーが搭載されると思います。ですのでどうしても必要な場合の間に合わせの方法とお考え下さい
現状のEEVEEではマスクレイヤーを使うことが出来ません。しかしながらcyclesのほうでは利用可能です。前述したSceneをリンクしてコピーすることでレイヤマスクをEEVEEのレンダリング結果に適用することができます。
将来的にこの方法は使用する必要がなくなると思いますが。今後説明する異なるレンダラーの結果を合成する方法の基本ともなるのでご参照ください。また同様の手段をとればUVやidmask等、現状でEEVEEが対応してないパスをとりあえず利用することも可能です(cyclesを間接的に利用するのでせっかくのEEVEEの高速なレンダリングという利点を無駄にしてしまうという欠点もあります)
以下具体的なやりかたとなります。
まずは普通にこんな感じにマスクしたいオブジェクトを別のCollectionに配置します。
次にこのSceneをlinked copyして新しく作ったScene.001のほうのrender engineをcyclesに変更します。今回はマスク以外の要素は必要ないので出来る限りレンダリングが早くなるようサンプル数やclampを出来る限り低い値にします。filmのtransparentのチェックをオンにするのを忘れないように
マスクしたいCollectionを選択して右クリック→ViewLayer→set holdoutを選びます。するとそのCollectionに含まれるオブジェクトがマスクされます
もとのSceneに戻ってコンポジットエディタを開いてさしあたり以下のようなコンポジットノードを組みます
これをレンダリングするとこのようになります
マスクさえ出来ればあとはいろんな応用が可能です
記事用 blender2.80のEEVEEの結果にマスクレイヤーを使う方法 #b3d pic.twitter.com/vQ9LRrXLTc
— どぶごんずい (@dovnzui) October 31, 2019
追記
cyclesのパスを参照しているのでマスクレイヤーだけでなくcryptmatteも使うことが可能です。こっちはこっちで応用が効きそう。
cyclesの結果を参照出来るなら当然レイヤマスクだけじゃなくてcryptomatteも利用可能。これは便利 #b3d pic.twitter.com/IkuSufD4I7
— どぶごんずい (@dovnzui) November 2, 2019
その他メモ等
・単一のオブジェクトだけなら2.81でもholdoutシェーダーあるのでそっち使ったほうが早くて楽です。
・恐らくsetholdoutも、2.79のマスクレイヤーもそのレイヤーのマテリアルをholdoutするマテリアルにオーバーライドしてるようなのでEEVEEにマテリアルオーバーライドがつけばすぐにでもマスクレイヤーは復活するのでは
・またこの仕組み上アルファで抜いてあるマテリアルをマスクレイヤーとして使うことは出来ないっぽい。オブジェクトの形でアルファが抜かれる(2.79でもそう)逆にそういうオブジェクトがある場合それ専用のシェーダー作ることで対応も可能では
この記事が気に入ったらサポートをしてみませんか?