映像編集等で後々画像を切り分けたいときに使える、CustomStencil を使ったオブジェクトマスクの作り方を紹介します
CustomStencil について #
CustomStencil(CustomDepthStencil)とは、CustomDepth の拡張で、オブジェクトごとに任意の値(1 ~ 255)を書き込むことができる機能です
CustomStencil の使用設定 #
ProjectSettings で、 Custom Depth-Stencil Pass
を Enabled with Stencil
に設定しておきましょう
CustomStencil を設定したい Actor(Mesh)の Render CustomDepth Pass
を ON にし、 CustomDepth Stencil Value
に値を設定します
PostProcessMaterial の実装 #
基本実装はこのような形になります
CustomStencil の出力は 0 ~ 255 に展開された状態で出てくるので、任意のステンシル値と一致したときに 1 を、一致しないときに 0 を出力すれば OK です
RGB で分けたいときは、これを 3 つ用意し、それぞれ別のステンシル値を対象にすれば良いでしょう
画像ではわかりやすいように色と掛け算して Add で合成していますが、MakeFloat3
でまとめたほうが若干スマートになります
チラツキ対策 #
PostProcess の適用タイミングが AfterTonemapping
の場合、アンチエイリアスによって境界がちらつく場合があります
ちらつきを抑えたい場合は、 BlendableLocation
を BeforeTonemapping
にしておきましょう
参考資料 #
ポストプロセスマテリアル
https://docs.unrealengine.com/5.0/ja/post-process-materials-in-unreal-engine/