【TA 100】3.1 テンプレートテストとデプステスト

1. 始める前に、理解するために例を見てみましょう

1.引例

ここに画像の説明を挿入します
● 左の画像はカラー バッファ内の画像です。テンプレート バッファでは、この画像の各フラグメントに 0 ~ 255 (8 ビット、デフォルトは 0) の番号を割り当てます。 ● 中央と右の画像は、必要に応じて変更できます
。ご覧のとおり、いくつかの 0 を 1 に変更し、テンプレート バッファー内の 1 に対応するフラグメントの色を出力するなど、いくつかのカスタム基準を通過させました。0 は出力されず、テンプレート テストに合格した最終結果は次のようになります。右。

2. テンプレートテスト適用による効果例

● ①ポータル効果:左側のポータルのシーンが右側のシーンと全く同じであることがわかります。
ここに画像の説明を挿入します

② 3D カード効果、探偵ミラー効果など、ミニオンによって説明されるいくつかの効果。
3 各キューブの面は異なるシーンを表示します (各面はシーンを表示するためのマスクとして使用されます)。

https://www.patreon.com/posts/14832618
画像の説明を追加してください
画像の説明を追加してください

3. 理解する

● 上記の例をまとめると、これらの効果は基本的に 3 つの階層に帰属する
○ ②のポータルを例にとると、ドアの外のシーン、ドアの中のシーン、ドアの 3 つのレイヤーが対応する
●言い換えると、2 つのオブジェクト/シーンのレイヤーと 1 つのマスクのレイヤーが含まれると理解できます。

2. テンプレートテストとは何ですか?

1. レンダリングパイプラインから理解する

● 以下の図は、フラグメント シェーダから FrameBuffer までのプロセス (フラグメントごとの操作) を示しています。
ここに画像の説明を挿入します

ピースごとの操作プロセス:
ここに画像の説明を挿入します

● 各フラグメントのプロセスは、
○ ピクセル所有権テスト → トリミング テスト → 透明度テスト → テンプレート テスト → 深さテスト → 透明度ブレンディング
○ PixelOwnershipTest:
■ 簡単に言うと、現在の画面ピクセルの使用権を制御します
■ 例:ゲーム エンジン ゲーム ウィンドウのレンダリングのみ
○ ScissorTest (トリミング テスト):
■ レンダリング ウィンドウ内のどの部分をレンダリングするかを定義します
。 ■ クリッピング スペースと併せて理解します。つまり、表示されている部分のみをレンダリングします
。 ■ 例: ゲーム ウィンドウの左下隅のみをレンダリングします。 window
○ AlphaTest (透明度テスト)
■ 事前に透明度の事前値を設定します
■ 不透明効果と完全透明効果のみを実現できます
■ 例: 透明度 a を 0.5 に設定します。フラグメントがこの値より大きい場合、テストに合格します。 0.5未満の場合は除外
○ StencilTest(テンプレートテスト)
○ DepthTest(深さテスト)
○ Blending(透明ブレンディング)
■ 半透明効果を実現可能
○ 以下の一連のその他の操作を完了した後、適格な結果を出力しますフラグメント/ピクセルをフレーム バッファー (FrameBuffer) にコピーします。

● フラグメント単位の操作は構成可能ですが、プログラム可能ではありません(対応する図の黄色の背景)。つまり、パイプライン/ハードウェア自体によって指定され、内部のコンテンツのみを構成できます。

これはレンダリング パイプラインの最後のステップです。フラグメントごとの操作は OpenGL の用語であり、DirectX では、このステージは出力マージ ステージ (Output-Merger) と呼ばれます。「マージ」という言葉を使用すると、読者はこのステップの目的、つまりマージを理解しやすくなるかもしれません。OpenGL の名前により、読者はこの段階の操作単位、つまり各フラグメントに対して何らかの操作を実行する操作を理解することができます。しかし、どのデータをマージし、どのような操作を実行する必要があるでしょうか?
1. 各フラグメントの可視性を決定します。これには、詳細なテストやテンプレート テストなど、多くのテスト作業が含まれます。
2. フラグメントがすべてのテストに合格した場合、このフラグメントのカラー値をカラー バッファーに既に格納されているカラーとマージまたは混合する必要があります。

A テスト:
クロップ テスト (シザー テスト)
透明度テスト (アルファ テスト)
テンプレート テスト (ステンシル テスト)
深さテスト (深度テスト)
B マージ: 透明度の混合と不透明度の混合
step1. テストされていないフラグメントは破棄されるため、テストする必要はありません。混合段階;
ステップ 2. テストされたフラグメントは混合段階に入り、ピクセルに変換できます (この時点でピクセルにはすでに深度情報が含まれており、情報のこの部分は以前にフラグメントのカラー値は、カラー バッファーに保存されているカラーと結合または混合されます。
step3. すべてが完了すると、フラグメントがカラーバッファに送信されます。

2. 論理的に理解する

○ 理解:
■ ReferenceValue: 現在のステンシル バッファ フラグメントの参照値
■ stencilBufferValue: ステンシル バッファ内の値
■ 中間の比較関数は比較を行います
○ 結果:
■ 合格した場合、フラグメントは次のステージに入ります
■ 失敗/放棄、停止し次の段階に入らない、つまりカラーバッファに入らない
○概要:フラグメント/フラグメント属性を保持するか破棄するかを一定の条件で判断する。
ここに画像の説明を挿入します

3. 書かれた概念から理解する

テンプレート バッファ - FrameBuffer
● テンプレート バッファは、画面上の各ピクセルの符号なし整数値 (通常は 8 ビット int 0 ~ 255) を保存できます。
● この値の意味は、プログラムの特定のアプリケーションによって異なります。

テンプレート テスト
● レンダリング プロセス中に、この値を使用して事前に設定された基準値 (ReferenceValue) と比較し、その結果に基づいて対応するピクセルのカラー値を更新するかどうかを決定できます。
● この比較プロセスはテンプレート テストと呼ばれます。
● テンプレートのテストは、透明度テストの後、深さテストの前に実行されます。
● テンプレート テストに合格すると、対応するピクセルが更新されます。合格しなかった場合は、更新されません。

3. 基本原理と使い方

1. 文法表現・構造説明

ここに画像の説明を挿入します
■ Ref: 現在のフラグメントの参照値 (0 ~ 255)
■ ReadMask: 読み取りマスク
■ WriteMask: 書き込みマスク
■ Comp: 比較演算関数
■ Pass: テストに合格し、演算を実行します (StencilOperation、後で詳しく説明します)
■失敗: テストが失敗した場合、操作が実行されます
■ ZFail: テンプレート テストは成功しましたが、深さテストは失敗しました。

2.比較機能

● ニーズに合わせて設定可能
ここに画像の説明を挿入します

3.StencilOperation 更新値
● さまざまな更新操作があります。必要に応じて設定してください。
ここに画像の説明を挿入します

3.StencilOperation 更新値
● さまざまな更新操作があります。必要に応じて設定してください。

ここに画像の説明を挿入します

4. デモエフェクトの表示と解説

1. ケース 1: 3D カード効果

● 注: Unity のテンプレート バッファーはデフォルトで 0 です。
● マテリアル内で ReferenceValue を 0 に変更した場合の効果 (モデルを直接配置した場合の効果)
画像の説明を追加してください
ここに画像の説明を挿入します
ここに画像の説明を挿入します

マスクされたシェーダ

コードの理解
● マスクの ID である int 型属性は 1 つだけあります。
● レンダリング タイプは不透明オブジェクトで、キューは Geometry+1 (デフォルトの不透明オブジェクトの後にマスク レンダリングが続きます)
● ColorMask カラー マスク、0何も意味しない 出力 (高度に構成可能、RGBA (マスクなし) に変更可能、単一チャンネル R、G、B を出力)
● ZWrite off は、表示されているものが深度で消去されるのを防ぐために深度書き込みをオフにします (深度テストの詳細は後述します) )
● ステンシル/テンプレートテスト部分
○ Ref [_ID] インデックス値は前の属性で宣言された ID
○ Comp always //デフォルトの比較
○ Pass replace //デフォルトは keep
○ Fail、ZFail、書かれていない場合は、コードに示されているように、デフォルト値にしてください
● 後続は頂点シェーダとフラグメント シェーダです
● すでに ColorMask0 であるため、カラーにhalf4 を与えるだけです (何も出力されません)

オブジェクトシェーダ

ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
コードの理解:
● 独自の属性に加えて、ID も与えられます。
● レンダリング タイプは不透明オブジェクト、キューは Geometry+2 (フロント マスクの後にレンダリング)
● ステンシル/テンプレート テスト パーツ:
○ Ref [_ID ] 上記と同じ
○ Comp が等しい場合、このフラグメントは、指定されたインデックス値が現在のテンプレート バッファーの値と等しい場合にのみレンダリングされます。
○後から書かない場合はデフォルト値となります。
●以下は独自の照明モデル、演色等です。

③実装アイデアのまとめ

● 前提知識:
○ Unity のテンプレートバッファのデフォルト値は 0
● デフォルトオブジェクト(マスク外のオブジェクト)のインデックス値も 0 に設定され、Comp は常に設定されている ○ つまり、
比較の結果は常に渡され、変更されません ステンシル バッファの値は変更されません (ステンシル テストのないオブジェクトがレンダリングされた後、ステンシル バッファの値は 0 のままです) ● その後、マスク
(マスク) のレンダリングが開始されます
○ マスク設定 Comp も常にそのままですですが、違いは、ID 1 (属性部分で定義) が与えられ、Pass が replace に設定されているということです。これは、マスクが配置されているテンプレート バッファーの値が 1 になることを意味します。
● この時点で要約すると、マスクの外側のオブジェクトの値は 0、マスクの値は 1 です。
● 最後に、マスクの内側にオブジェクトがあります。
○ マスクのテンプレートテストは次のようになります。ID は 1、Comp は等しいです。翻訳すると、テンプレート バッファの値は 1 で、比較条件は等しいです
。このとき、内側のオブジェクトのテンプレート バッファの値は 1、外側のオブジェクトのテンプレート バッファは 0、条件は等しいです。コンプは等しい。結果は明らかに等しくなく、マスクによって表示される部分を除いて、外側のシーンはレンダリングされません。
○ 振り返ってみると、マスクバッファの値も1でテストに合格しているので、マスク部分(カード部分)が描画されています。

2. ケース 2: ボックスの異なる側面には異なるシーンが表示されます画像の説明を追加してください

ここに画像の説明を挿入します

実装アイデア
● カード効果と同様に、オブジェクトをマスクでマスクします。ボックスの各面がマスクで覆われます。 ● これも
デフォルト値の 0 を使用して実行されますが、さらに多くの面があり、マスクは内部に表示されているものと同じです。さらに多くのオブジェクトがあり、ID は 1、2、3、および 4 です。 ●
概要: 1 つのマスクは 1 つのオブジェクトに対応します。それらは同じ ID を使用します。効果は次のとおりです: の物理的な内部コードの理解:
ここに画像の説明を挿入します

属性 設定可能なプロパティを外部から選択できるように、組み込みの列挙が使用されます。

5. テンプレートテストの概要

● 最も重要な 2 つの値 (比較に使用):
○ 現在のステンシル バッファー値 (StencilBufferValue)、ステンシル参照値 (ReferenceValue)
● ステンシル テストの内容:
○ 主にこれら 2 つの値に対して特定の比較演算を実行します。 Never、Always、Equal など、詳細については上の表を参照してください。
● テンプレートのテスト後
○ Keep、Replace などのテンプレート バッファーの値を更新するには、上の表を参照してください。詳細
○ 更新操作: さまざまな結果に応じて値を更新できます。テンプレート バッファーは、テンプレート テストが成功した場合は Pass、テンプレート テストが失敗した場合は Fail、深度テストが失敗した場合は ZFail、フロントおよびバック更新など、さまざまな更新操作を実行します。パスバック、パスフロント、フェイルバックなどの操作

深さテスト

1.深度テストとは何ですか?

● オブジェクトのオクルージョン関係の処理に協力してください。
1. レンダリング パイプラインから理解します。
深度テストは、テンプレート テスト後、透明度混合前のフラグメントごとの操作プロセスにも配置されます。

2. 論理的に理解する

ここに画像の説明を挿入します
● 理解:
○ テンプレートのテストと同様に、一連の操作は比較によって判断されます
○ 図 1:
■ ZWrite On の場合、現在の深度値と深度バッファーの値を比較し、合格した場合、深度は
○ 図 2: ■ 現在の深度値と深度バッファの値を比較し、合格し
た場合はカラー バッファに書き込みます。渡されない場合、カラー バッファには書き込まれません。

3. 書かれた概念から理解する

● 深度テスト ○ の概念は、
オブジェクト自体の深度値と、現在の画面上の対応するピクセルの現在の深度バッファー (より正確には FrameBuffer) の深度値を比較することです。クリックすると、カラー バッファにカラーが書き込まれます。

4. 開発の視点から

ここに画像の説明を挿入します
● シーンをレンダリングしたい場合、通常は複数のオブジェクトが存在します。
●まずは描画順序を制御する
○ペインターのアルゴリズム:
■ 油絵の描き方のこと。つまり、油絵​​を描くには、遠くから描き始め、その上に近くのものを重ねていきます。少しずつ(GAMES シリーズのレッスンで言及) 何度も)
■ 既存の問題点: 例えば、オブジェクトのリストでは、手前のオブジェクトが一番大きく、前に立って見ると、目しか見えません。この方法では、後ろのオブジェクトを描画する必要がなく、パフォーマンスの無駄になります (OverDraw)。
○ Z バッファ アルゴリズム:
■ 深度バッファを介してレンダリング順序を制御します。
● Z バッファによる深度の保存を制御します。
○ 例: 深度バッファをいつ更新するか、いつ深度バッファを使用するか
○ 2 つの代表的な機能:
■ Z テスト
■ Z Write
○ 詳細については後述します
● さまざまなタイプのオブジェクトのレンダリング順序を制御します
○ 透明なオブジェクト
○ 不透明なオブジェクト
○ レンダリング キュー (非常に便利な概念です。後で説明します)
● OverDraw の削減
○ Early-Z、最適化手法については後述
■ Z-cull(最適化手法)
■ Z-check(正しいオクルージョン関係を確認)についてお話します。

2. 基本原理と使い方

1.Z バッファ (深度バッファ)
● カラー バッファと同様に、情報は各フラグメントに格納され、通常はカラー バッファと同じ幅と高さを持ちます
● カラー バッファ:
○ 最終的にはディスプレイ ハードウェア上にあります GPU メモリ領域カラーを表示するバッファです。このバッファには、フレームごとに更新される最終的なカラー値が保存されます。グラフィックス パイプラインは、フラグメントの破棄、色の混合などを含む一連のテストを受けます。最終的に生成されたピクセル カラー値はここに保存され、送信されます。ディスプレイハードウェア。
● 深度バッファはウィンドウ システムによって自動的に作成され、深度値を 16、24、または 32 ビット浮動小数点数の形式で保存します。
○ //ほとんどのシステムの深度値は 24 ビットです。
● 現在の深度情報は Z バッファに保存され、深度値はピクセルごとに保存されます。
● Z-Write および Z-Test を通じて Z-Buffer を呼び出して、目的のレンダリング効果を実現できます。

2.Z Writer (深度書き込み)
● 深度書き込みには 2 つの状態が含まれます
○ ZWrite On 、 ZWrite Off
○ 深度書き込みをオンにすると、オブジェクトがレンダリングされるときに、画面上の各ピクセル (FrameBuffer) の深度が深度に書き込まれます。バッファ。
○ 深度書き込み状態をオフにすると、オブジェクトの深度は深度バッファーに書き込まれなくなります。
● ZWrite が深度バッファに書き込むかどうかに加えて、より重要なのは、深度テスト、つまり Z-Test に合格するかどうかです。
○ Z-Test に合格しない場合、深度は書き込まれません。
○ つまり、ZTest と ZWrite の両方が実行可能な場合にのみ、深度バッファに書き込むことができます
● まとめると、ZWrite にはオンとオフの 2 つの状況があり、ZTest には成功と失敗の 2 つの状況があり、その 2 つを組み合わせた 4 つの状況があります。次のように:
ここに画像の説明を挿入します

3.Z-Test比較演算

ここに画像の説明を挿入します
● デフォルト:
○ Z 書き込み: オン
○ Z テスト: LEqual
● 深度バッファは無限大から開始します

4.Unityのレンダリングキュー

● Unity に組み込まれたいくつかのタイプのレンダリング キュー:
ここに画像の説明を挿入します
○ レンダリング順序に従って最初から最後に並べ替えます。キューの数が少ないほど、レンダリングが早くなり、その逆も同様です。
● Unity でレンダリング キューを設定します。
○ 構文: Tags { “Queue” = “Rendering Queue Name”}
○ デフォルトはジオメトリです。
● Unity での不透明オブジェクトのレンダリング順序: 前から後ろへ
○ つまり、最も小さい深度のレンダリングが最初にレンダリングされ、次に 2 番目の大きいレンダリング深度がレンダリングされます。
● Unity での透明オブジェクトのレンダリング順序: 後から前 (ペインターのアルゴリズムと同様で、オーバードローが発生します)
● レンダリング キュー関連のプロパティは、シェーダーのインスペクターパネル
ここに画像の説明を挿入します

5. Early-Z テクノロジーの簡単な説明

● Early-Z は、三角形トラバースの後、フラグメントごとの操作の前に配置されます。
● 従来のレンダリング パイプラインでは、ZTest はブレンディング段階にあります。この時点で深度テストが実行されると、オブジェクトのピクセル シェーダーが 1 回計算されます。パフォーマンスの向上はありません。正しい効果を得るためにのみ行われます。その結果、無駄な計算が大量に発生します。(深度テストに失敗したフラグメントは、すでに計算されているフラグメントです。つまり、テストの 1 つのステップが失敗して破棄されるまで、以前の計算は役に立ちません。) ● これらの不必要な計算を削減するために、最新の
GPU Early -Z テクノロジーを使用すると、頂点ステージとフラグメント ステージの間 (ラスター化後、フラグメント シェーダーの前) に深度テストが実行されます (下の左の図の黒いボックス)。
○ この深度テストが失敗した場合、フラグメント シェーダーで無関係な計算を行う必要がなくなり、パフォーマンスが向上します。
○ 正しいオクルージョン関係を確認するために、最終的な ZTest を実行する必要があります。
○ 右の図に示すように、前の Z-Cull はパフォーマンスの最適化を達成するためのトリミングを目的とし、後の Z-Check は正しいオクルージョン関係を保証することを目的としています。
ここに画像の説明を挿入します

6. 深さの値

深度値の概念を正しく理解する
● まず、レンダリング パイプラインにおけるモデルのいくつかの空間変換を理解します
ここに画像の説明を挿入します
。 ○ モデルが最初に配置されるモデル空間: 深さはありません。
○ M マトリックスによるワールド空間への変換 この時点で、モデル座標は同次座標 (x、y、z、w) に変換されており、深さには z 成分が存在します。
○ V マトリックスを介して観察空間 (カメラ空間) に変換:深度に z 成分 (線形) が存在します。
○ P マトリックスを介してクリッピング空間に変換:深度バッファー内のこの空間の z/w にあります (それ○最終的に
はプロジェクションマッピングによりスクリーン空間に変換

7 非線形深度が深度バッファーに保存されるのはなぜですか?

理由 1: 近接場での精度を高める
● 深度バッファーの深度値は 0.0 ~ 1.0 であり、観察者が見るものは、シーン内のすべてのオブジェクトの Z 値と比較されます。
● これらの z 値は、投影錐台 (つまり、視錐台) の近い平面と遠い平面の間の任意の値にすることができます。
ここに画像の説明を挿入します
● ただし、線形深度バッファは実際にはほとんど使用されず、正しい投影特性を求める非線形深度方程式は 1/z に比例します。これにより、Z が近いときは精度が高く、Z が遠いときは精度が低くなりますが、これは下図のように私たちの生活の状況と一致しています○ 実はガンマを思い出すことができます。比較して
理解するために、実際の状況 (人間の目の特性) に基づいて、暗い部分の精度を高め、ここでは近くの領域の精度を高めます。ここに画像の説明を挿入します

理由 2: Z ファイトと深度の競合
○ 2 つの平面または三角形が互いにほぼ平行である場合、深度バッファーにはどちらと戦うかを決定するのに十分な精度がありません。
○ その結果、2 つの図形の順序が常に入れ替わり、2 つの図形が先頭の位置を争っているように見えるという奇妙な問題が発生します。
○これを深い葛藤といいます。
○ 深度競合は深度バッファーでよく見られる問題で、通常、オブジェクトが遠くにあるほど影響が強くなります (z 値が非常に大きい場合、深度バッファーの精度が高くないため) ○ 深度競合は回避できませんが、テクニックはあります
:
■ 物理的なアプローチは、物体が近づきすぎないようにすることです
■ 近い面をできるだけ遠くに設定します。
■ より正確な深度値を取得するには、パフォーマンスをある程度犠牲にしてください。

3. デモエフェクトの表示と解説

ケースその1

ここに画像の説明を挿入します
図 1 の詳細説明: 通常のレンダリング シーケンス
● レンダリング処理を整理すると、
○ レンダリングがない場合、この時点で Unity の深度バッファーのデフォルト値は無限大です
○ 青い立方体のレンダリング

■ デフォルトの深度の無限大に対する相対バッファの値はそれ以下である必要があるため、テストに合格しました。
○ 緑色の立方体をレンダリングします。
■ この時点で、青色のオブジェクトの位置にある深度バッファの値は無限ではなくなり、他の位置はそのままです。
■ 注:深度バッファとカラー バッファは両方ともフラグメントに関連しています (フラグメントは、未完成のピクセル、つまりまだレンダリング パイプラインにあるピクセルとして理解できます) ■ 緑色の立方体は深度テストを実行します。深度テストも LessEqual であり
、緑の深度値は青の立方体の深度値よりも大きくなります。
■ 結果: 2 つの立方体の重なり合う部分が深度バッファより大きい、つまりテストが失敗するため、重なり合う部分は緑色ではなく青のままです。 Depth は当然 infinity よりも大きいので
、描画およびレンダリングすると、緑色の立方体の重なっていない部分が表示されます。
○赤も同様です。

図 2 詳細説明: 最前列キューブの深度書き込みをオフにする

● レンダリング プロセスを整理する:
○ 設定: 青い立方体の深度を ZWrite に書き込み、オフにする;
○ アイデア: 最初の青い立方体がレンダリングされるとき、テストは合格しましたが、深さは書き込まれません。
○ つまり、青い立方体がレンダリングされるとき、深度バッファーの値はまだ無限です。
○青と緑の重なりが緑に見えるのはこのためです。

図 3 の詳細説明:
● 図 2 と比較すると、緑色の立方体の ZTest を always に変更するだけです。
● LessEqual であっても、always であってもテストは合格するため、効果は図 2 と同じです。

図 4 詳細な説明: ZTest 条件の変更
● 赤い立方体の ZTest を always に変更します。これにより、赤い立方体の深度テストは常に合格して書き込まれます。
●前から後ろに向かって描画されるため、順番に青、緑、赤となり、デプスバッファ内の値も後ろから描画されます ●後ろが前を覆っている効果として理解でき
ます。

図 5 の詳細説明: レンダリング キューの変更

● 図 4 と比較すると、緑色の立方体のレンダリング キューが Geometry+1 に変更されています
● このときのフレーム バッファー パネルは次のようになります
○ 緑色の立方体は手前にありますが、シーン内の赤い立方体。キュー +1 なので、レンダリング順序が赤い立方体に変わります。
● つまり、レンダリング キューの優先順位 > 透明オブジェクトのレンダリング順序 (前から後ろ)

図 6 の詳細説明: ZTest の条件をもう一度理解する

● 図 1 と比較して、緑の立方体の ZTest を Greater に変更します。
● つまり、青の立方体と緑の立方体の重なっている部分、より大きい部分テンプレート バッファーはテストに合格し、テンプレート バッファー領域に書き込まれます。
● 結果は、重なっている部分が緑色になり、重なっていない部分の深さは当然無限大未満であるため、テストに失敗し、当然テストには失敗します。レンダリングされる。
●赤い部分は正常です。

シェーダーのスクリーンショット

ここに画像の説明を挿入します

2.ケース 2: X 線の影響

ここに画像の説明を挿入します

実装アイデア:
○ 3 つの部分に分割: 正面の壁、壁によって遮られた X 線効果部分、壁の上のオブジェクト ○ 前の
6 枚の画像を思い出してください。どの画像が前面にレンダリングされ、1 つは背面にレンダリングされます。背面が最初にレンダリングされます。 前面部分のレンダリングは完了しましたか? —> 図頂点シェーダー
○ つまり、ZTest を使用して6 (C++のヘッダファイルと同様)■ X-Ray描画部分● 先ほどの実装と同じ考え方、ZWrite Off、ZTest Greater ● Cull backとは最適化のために裏面を削除すること● Blend SrcAlpha One:透明な部分があるため上記を除き、透明ブレンドを行うには Blend のステップが必要です。● レンダリングタイプとレンダリングキューは透明です。■ 通常の描画部分は省略されています。

ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します







ケース 3. 粒子システムでの詳細なテスト

● パーティクル システム ParticleSystem を作成します。デフォルトは透明であることがわかります。
ここに画像の説明を挿入します
● 理解を深めるために、このパーティクル システムの効果を自分で再現してみます
○ マテリアルを自分で作成し、パーティクルに与えます
○ このとき、パーティクルシステムはそうなります

7. 詳細なテストの概要

● 2 つの最も重要な値: 現在の深度バッファ値 (ZBufferValue) と深度参照値 (ReferenceValue)。理想的なレンダリング効果は、比較演算によっても達成されます。
● Unity でのレンダリング順序:
○ 最初に不透明なオブジェクトをレンダリング (前から後ろへ)、次に透明なオブジェクトをレンダリング (後ろから前へ)
● Unity のデフォルト条件:
○ ZWrite: On
○ Ztest : LessEqual
○ レンダリング キュー: Geometry (2000)
● ZWrite と ZTest の組み合わせ構成を通じて半透明オブジェクトのレンダリングを制御 (深度書き込みをオフにし、深度テストをすぐにオンにし、透明度の混合)
● Early-Z 導入後の深度テスト関連内容 (Z-Cull、Z-Check)
● 深度バッファに格納される深度値は [0, 1] の非線形値です。

おすすめ

転載: blog.csdn.net/weixin_45810196/article/details/131120924