Skip to content

ステンシル設定

概要

3D空間上で行われるマスク処理の調整ができます。1マテリアル内で行われるマスク処理はテクスチャを、他マテリアルも絡むマスク処理はステンシルをそれぞれ使うことで様々な表現が行えます。基本的にステンシル設定は Ref / Comp / Pass / Render Queue のみを調整すれば大抵の表現ができます。

パラメーター

名前説明
Refステンシル処理に使われるIDです。IDを元に描画する・しないを決定します。
ReadMask比較前のRefの値に対するマスク処理です。
WriteMask書き込む値に対するマスク処理です。
CompIDの比較の方法です。この条件を満たすときに描画されます。
Pass描画するときにIDを書き換えるかどうかの設定です。
Fail描画されないときにIDを書き換えるかどうかの設定です。
ZFail手前にものがあって描画されないが、Compの条件を満たす場合にIDを書き換えるかどうかの設定。
Set Writerステンシルを書き込む側の設定にします。
Set Readerステンシルを読み込む側の設定にします。
Resetステンシルの設定を初期化し、ステンシルを行わない状態に戻します。

複雑で理解が困難な場合、以下のように理解すると問題なく使えます。

例: 眉毛を髪の上から描画したい場合
眉毛のマテリアルでSet Writer、髪のマテリアルでSet Readerを押す
眉毛と髪のRefの数値を合わせる

具体的な設定例

Refの数値については1や2のような値ではなく、82や143のようなランダムな値を用いたほうが数値の被りによる描画不全を回避しやすいためオススメです。
ここに掲載している設定例はわかりやすくするためシンプルな値を使っています。

  • Comp - 通常はAlwaysに設定し、一部分を切り抜きたいマテリアルではNotEqualかEqualに設定します。
  • Pass - 通常はKeep、切り抜く側(眉毛など)はReplaceに設定します。
  • Render Queue - 画面上に見えている状態ではなく描画処理が行われたかどうかでステンシルの書き込みが行われます。例えば、肌→顔パーツの順に描画される場合は肌の中に隠れている部分の描画がスキップされるため狙った通りの効果が得られますが、顔パーツ→肌の順に描画すると隠れていても描画がスキップされないため狙いと異なる結果になります。

顔パーツを髪の上に描画

一般的に使われるオーソドックスなものです。

プロパティ顔パーツ
Ref011
CompAlwaysAlwaysNotEqual
PassKeepReplaceKeep
Render Queue245024512452
  1. 肌が描画される
  2. 顔パーツが描画され、その領域が1で置き換えられる
  3. 1ではない領域(顔パーツ以外のところ)に髪が描画される

顔パーツを髪の上に半透明で描画

顔パーツを髪の上に描画に加えて、顔パーツの領域に半透明で髪を描画することで実現できます。

プロパティ顔パーツ髪(透過)
Ref0111
CompAlwaysAlwaysNotEqualEqual
PassKeepReplaceKeepKeep
Render Queue2450245124522460
  1. 肌が描画される
  2. 顔パーツが描画され、その領域が1で置き換えられる
  3. 1ではない領域(顔パーツ以外のところ)に髪が描画される
  4. 1の領域(顔パーツのところ)に髪(透過)が描画される

肌・顔パーツだけ透過する髪

通常は不透明マテリアルし、肌・顔パーツの上では透過マテリアルとして描画するテクニックです。
透過の重なりによる描画不全を回避します。

プロパティ肌・顔パーツ髪(不透明)髪(透過)
Ref111
CompAlwaysNotEqualEqual
PassReplaceKeepKeep
Render Queue245024512460
  1. 肌が描画され、その領域が1で置き換えられる
  2. 1ではない領域(肌以外のところ)に髪(不透明)が描画される
  3. 1の領域(肌のところ)に髪(透過)が描画される

肌だけ透過する髪の上に半透明で描画される顔パーツ

プロパティ髪(不透明)顔パーツ髪(透過)髪(透過2)
Ref11212
CompAlwaysNotEqualAlwaysEqualEqual
PassReplaceKeepReplaceKeepKeep
Render Queue24502451245224602461
  1. 肌が描画され、その領域が1で置き換えられる
  2. 1ではない領域(肌以外のところ)に髪(不透明)が描画される
  3. 顔パーツが描画され、その領域が2で置き換えられる
  4. 1の領域(肌のところ)に髪(透過)が描画される
  5. 2の領域(顔パーツのところ)に髪(透過2)が描画される

肌の上だけに描画される照れ・髪影

プロパティ照れ・髪影
Ref11
CompAlwaysEqual
PassReplaceKeep
Render Queue24502460
  1. 肌が描画され、その領域が1で置き換えられる
  2. 1の領域(肌のところ)に照れ・髪影が描画される

オブジェクトの縁だけに輪郭線を出す

プロパティ本体輪郭線
Ref11
CompAlwaysNotEqual
PassReplaceKeep
  1. 本体が描画され、その領域が1で置き換えられる
  2. 1ではない領域(本体以外のところ)に輪郭線が描画される

レンズ越しでしか見えないオブジェクト

プロパティレンズオブジェクト
Ref11
CompAlwaysEqual
PassReplaceKeep
Render Queue24502451
ZWriteOffOn
  1. レンズが描画され、その領域が1で置き換えられる
  2. 1の領域(レンズのところ)にオブジェクトが描画される

オブジェクトのCompをNotEqualにすると"レンズ越しでは見えなくなるオブジェクト"を作れます。

Released under the MIT License.