ステンシル設定
概要
3D空間上で行われるマスク処理の調整ができます。1マテリアル内で行われるマスク処理はテクスチャを、他マテリアルも絡むマスク処理はステンシルをそれぞれ使うことで様々な表現が行えます。基本的にステンシル設定は Ref
/ Comp
/ Pass
/ Render Queue
のみを調整すれば大抵の表現ができます。
パラメーター
名前 | 説明 |
---|---|
Ref | ステンシル処理に使われるIDです。IDを元に描画する・しないを決定します。 |
ReadMask | 比較前のRefの値に対するマスク処理です。 |
WriteMask | 書き込む値に対するマスク処理です。 |
Comp | IDの比較の方法です。この条件を満たすときに描画されます。 |
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 - 画面上に見えている状態ではなく描画処理が行われたかどうかでステンシルの書き込みが行われます。例えば、肌→顔パーツの順に描画される場合は肌の中に隠れている部分の描画がスキップされるため狙った通りの効果が得られますが、顔パーツ→肌の順に描画すると隠れていても描画がスキップされないため狙いと異なる結果になります。
顔パーツを髪の上に描画
一般的に使われるオーソドックスなものです。
プロパティ | 肌 | 顔パーツ | 髪 |
---|---|---|---|
Ref | 0 | 1 | 1 |
Comp | Always | Always | NotEqual |
Pass | Keep | Replace | Keep |
Render Queue | 2450 | 2451 | 2452 |
- 肌が描画される
- 顔パーツが描画され、その領域が
1
で置き換えられる 1
ではない領域(顔パーツ以外のところ)に髪が描画される
顔パーツを髪の上に半透明で描画
顔パーツを髪の上に描画に加えて、顔パーツの領域に半透明で髪を描画することで実現できます。
プロパティ | 肌 | 顔パーツ | 髪 | 髪(透過) |
---|---|---|---|---|
Ref | 0 | 1 | 1 | 1 |
Comp | Always | Always | NotEqual | Equal |
Pass | Keep | Replace | Keep | Keep |
Render Queue | 2450 | 2451 | 2452 | 2460 |
- 肌が描画される
- 顔パーツが描画され、その領域が
1
で置き換えられる 1
ではない領域(顔パーツ以外のところ)に髪が描画される1
の領域(顔パーツのところ)に髪(透過)が描画される
肌・顔パーツだけ透過する髪
通常は不透明マテリアルし、肌・顔パーツの上では透過マテリアルとして描画するテクニックです。
透過の重なりによる描画不全を回避します。
プロパティ | 肌・顔パーツ | 髪(不透明) | 髪(透過) |
---|---|---|---|
Ref | 1 | 1 | 1 |
Comp | Always | NotEqual | Equal |
Pass | Replace | Keep | Keep |
Render Queue | 2450 | 2451 | 2460 |
- 肌が描画され、その領域が
1
で置き換えられる 1
ではない領域(肌以外のところ)に髪(不透明)が描画される1
の領域(肌のところ)に髪(透過)が描画される
肌だけ透過する髪の上に半透明で描画される顔パーツ
プロパティ | 肌 | 髪(不透明) | 顔パーツ | 髪(透過) | 髪(透過2) |
---|---|---|---|---|---|
Ref | 1 | 1 | 2 | 1 | 2 |
Comp | Always | NotEqual | Always | Equal | Equal |
Pass | Replace | Keep | Replace | Keep | Keep |
Render Queue | 2450 | 2451 | 2452 | 2460 | 2461 |
- 肌が描画され、その領域が
1
で置き換えられる 1
ではない領域(肌以外のところ)に髪(不透明)が描画される- 顔パーツが描画され、その領域が
2
で置き換えられる 1
の領域(肌のところ)に髪(透過)が描画される2
の領域(顔パーツのところ)に髪(透過2)が描画される
肌の上だけに描画される照れ・髪影
プロパティ | 肌 | 照れ・髪影 |
---|---|---|
Ref | 1 | 1 |
Comp | Always | Equal |
Pass | Replace | Keep |
Render Queue | 2450 | 2460 |
- 肌が描画され、その領域が
1
で置き換えられる 1
の領域(肌のところ)に照れ・髪影が描画される
オブジェクトの縁だけに輪郭線を出す
プロパティ | 本体 | 輪郭線 |
---|---|---|
Ref | 1 | 1 |
Comp | Always | NotEqual |
Pass | Replace | Keep |
- 本体が描画され、その領域が
1
で置き換えられる 1
ではない領域(本体以外のところ)に輪郭線が描画される
レンズ越しでしか見えないオブジェクト
プロパティ | レンズ | オブジェクト |
---|---|---|
Ref | 1 | 1 |
Comp | Always | Equal |
Pass | Replace | Keep |
Render Queue | 2450 | 2451 |
ZWrite | Off | On |
- レンズが描画され、その領域が
1
で置き換えられる 1
の領域(レンズのところ)にオブジェクトが描画される
オブジェクトのCompをNotEqualにすると"レンズ越しでは見えなくなるオブジェクト"を作れます。