Unity 3 D-Shader-Unity Shaderのレンダリング順序


透明な効果を実現する2つの方法:
  • 透明度試験(Alpha Test)では,この方法では真の半透明効果は得られなかった.
  • 透明度ブレンド(Alpha Blending)
  • 深度バッファは可視性(Visibility)の問題を解決するために使用され、その物体の部分が前面にレンダリングされ、それらの部分が遮断されることを決定します.深さバッファの値に基づいてカメラからの距離を判断し、1つのセルをレンダリングする場合、その深さ値とすでに深さバッファに存在する値を比較する必要があります(深さテストが開かれています).もしその値がカメラから遠い場合、このセルがスクリーンにレンダリングされるべきではありません(物体がそれを遮っています).そうでなければ、このセルは、このときの深さバッファのピクセル値を上書きし、深さバッファに更新する必要があります(深さ書き込みがオンの場合).
    透明効果を実現するために深さ書き込み(ZWrite)をオフにする必要がある場合,従来の自動判定機構は失効する.
    透明度テストと透明度ブレンドの基本原理:
  • 透明度テストは、1つの要素が条件を満たさない限り、完全に透明または完全に不透明であるため、破棄される.
  • 透明度ブレンドは、現在の透明度をブレンド係数として使用し、既存のカラーバッファに存在するカラー値とブレンドして新しいカラーを得る必要があります.これにより、真の透明度効果が得られます.

  • 実際の透明度効果を得るには、深度ライトをオフにする必要がある透明度ブレンドテクノロジーを使用する必要があります.この場合、レンダリング順序に注意する必要があります.深さ書き込みをオフにしないと、半透明の表面の背後に表面が見えるはずだったが、深さテストの結果が遠いため、後ろの表面が除去され、見えなくなった.これにより、レンダリング順序が非常に重要になります.
    一般的なレンダリングエンジンでは、オブジェクトをソートしてからレンダリングします.
  • 最初にすべての不透明な問題をレンダリングし、
  • への深いテストと書き込みを開始します.
  • 半透明物体を遠近で並べ替え、これらの透明物体を後から順にレンダリングし、深さテストをオンにし、深さ書き込みをオフにします.

  • Unityはレンダリング順序の問題を解決するためにレンダリングキュー(RenderQueue)という解決策を提供している.
    Queueラベル(Tag)を使用することによって、私たちのモデルがそのレンダリングキューに帰属することを決定します.整数インデックスを使用してレンダリングキューを表し、インデックス番号が小さいほどレンダリングが早くなります.
    名前
    キューインデックス番号
    説明
    Background
    1000
    このレンダリングキューは、他のキューよりも前にレンダリングされます.通常、バックグラウンドに描画する必要があるオブジェクトをレンダリングするために使用されます.
    Geometry
    2000
    既定のレンダリングキューでは、ほとんどのオブジェクトがこのレンダリングキューを使用し、不透明なオブジェクトがこのレンダリングキューを使用します.
    AlphaTest
    2450
    透明度テストが必要な物体.
    Transparent
    3000
    このキューのオブジェクトはGeometryとAlphaTestオブジェクトでレンダリングされた後、後ろから前の順にレンダリングされます.透明度の混合を使用したオブジェクトは、このキューを使用する必要があります.
    Overly
    4000
    このキューはいくつかのオーバーラップ効果を実現するために使用され、最後にレンダリングする必要があるオブジェクトはすべてこのキューを使用する必要があります.
    透明度テストによる透明度効果:
    SubShader{
        Tags { "Queue"="AlphaTest" }
        Pass {}
    }

    透明度のブレンドによる透明性の効果:
    SubShader {
        Tags {"Queue" = "Transparent"}
        Pass {
            ZWrite Off
        }
    }