シェーダー学習のその他を達成するためのユニティパースペクティブミラー効果シェーダーテンプレートテスト(1)

1.パースペクティブミラー効果の例

。シーン内に、正方形、壁、球の3つのオブジェクトが作成されます。
次に、3つのシェーダーと3つの初期シェーダーが作成されます。3つのシェーダーを3つのシェーダーにドラッグして
、マテリアルを追加します。ボールを3つのオブジェクトにドラッグします。簡単に観察できるように、これらの3つのオブジェクトに赤、青、緑を付けます。

赤い正方形を遠近法の鏡として使用した場合の効果を
確認します。ゲームビュー:

領域を通してはっきりと見ることができます。赤い四角。壁越しに緑の球体が見えます。

2.効果の実現
遠近効果は、実際にはテンプレートテストによって実現されます。赤い四角をマスクとして使用し、同じテンプレート値を3つのシェーダーに追加してから、球をテンプレートテストに通します。
具体的な手順:作成した3つの初期シェーダーを開き、パスを見つけて、テンプレートテストを追加します

//cube.shader  红色方块
 Pass
        {
    
    
		Stencil
			{
    
    
                Ref 2 //模板值给一个2,三个物体模板值都必须相同
                Comp always//表示在模板测试中总是通过
                Pass replace//作为遮罩物
            }
//wall.shader  蓝色墙体
Pass
        {
    
    
			Stencil
			{
    
    
                Ref 2 
                Comp NotEqual//不通过模板测试
            }
//sphere.shader  绿色球体
Pass
        {
    
    
			Stencil
			{
    
    
                Ref 2 
                Comp Equal//通过模板测试
            }

次に、効果を見てみましょう。

赤い四角は見えますが、緑の球は見えません。これは、テンプレートテストでは、四角が常にCompを与え、球がCompEqualを与えるためです。どちらもテンプレートに合格します。テストすると、バッファに書き込まれ、カメラに近いオブジェクトのみが表示されます。
したがって、cube.shaderのパスにコードを追加する必要があります:ZWrite Off

 Pass
        {
    
    
		Stencil
			{
    
    
                Ref 2 //模板值给一个2,三个物体模板值都必须相同
                Comp always
                Pass replace
            }
			ZWrite Off//不写入缓冲区

次に、効果を見てみましょう

。遠近効果が達成されました。

これにより、追加の問題が発生しました。
ゲームで球を直接見ると、見えません。

これは、テンプレートテストに合格した後、パースペクティブ範囲外のバッファーに書き込まれないためです。解決策は非常に単純です。つまり、パスコードをコピーするだけです。つまり、シェーダーに2つのパスがあります。コピーされたパスコードは、オブジェクトがゲーム内で直接観察できるように、内部のテストテンプレートコード(ステンシルコード)を削除する必要があります

3.
マスクテストの原理の簡単な説明マスクテストは、バッファを2つに分割することとして理解できます。1つはマスクオブジェクトが配置されている範囲で、もう1つはマスクオブジェクトの外側の範囲です。上記の2つの範囲例を図に示し

ます。さまざまな状況を表に要約します。次
の表
で、
マスクされたオブジェクトの範囲内のバッファーを一時的に呼び出します。内側のバッファーと、マスクされたオブジェクトの外側のバッファーを外側のバッファーとして呼び出します

マスクとしてかどうか マスクテストに合格するかどうか 書き込みバッファの状況
はい はい 内部バッファと外部バッファに書き込まれます
はい 番号 内部バッファに書き込みません、外部バッファに書き込みます
番号 はい 外部バッファではなく、内部バッファに書き込みます
番号 番号 内部バッファに書き込みません、外部バッファに書き込みます

これらの原則を使用すると、単純な遠近効果を実現できます。X線と同様の半遠近効果を実現する場合は、レンダリングキューの制御を詳細に学習する必要があります。
この記事は以上です。どなたでもコメントをお待ちしております。

おすすめ

転載: blog.csdn.net/qq_40385747/article/details/108208196