要件の説明
特定のレベルのオブジェクトは常に別のレベルの前にレンダリングされます
最初のアイデアは、マテリアルのシェーダを使用することです。これら 2 つのレベルのオブジェクトが異なるマテリアルを使用している場合は、マテリアルのレンダリング キューを調整できます。
また、マテリアルを変更しないようにするには、RenderPipelineAsset を調整してレンダリング特性を高め、レベルに応じて調整することもできます。
ここでのレベルはオブジェクトのレイヤーを指します
レイヤー書き込みテンプレートの指定
Urp を使用して、UniversalRenderPipelineAsset_Renderer を開き、機能を追加します
指定したレベルのデフォルトのレンダリングをオフにして、機能を使用します
PlayerBack を Player の後ろに置く必要があると仮定し、最初に PlayerBack レイヤーをレンダリングします。
キューはアドバタイズされたレイヤーのマテリアル レンダリング キューと一致します。
レイヤー マスクはレンダリングするターゲット レイヤーを選択します。
深度は記述せず、テンプレートを記述します。
ターゲット レイヤーは、レイヤーの書き込み後にテンプレート テストを実行します。
ターゲット レイヤは、レイヤの書き込み後にステンシル テストを実行し、ターゲット レイヤ上でのみレンダリングされます (書き込みレイヤのみがステンシル テストに合格できるため)。
ここでの深度テストは必ずパスし、同時に深度も書き込まれますが、目的は通常レイヤーの深度テストに合格するためです(黒が出ている場合は通常レイヤーを再度描画する必要があるためです)
通常レイヤー
通常のレイヤーは正常に描画されますが、深度はあらかじめ書き込まれているため指定したレイヤー上に描画でき、テンプレートには指定したレイヤーのみを書き込むため他の描画レベルに干渉しません(指定したレイヤーを強調表示する原理)レイヤーはアプリケーション テンプレート テストでもあります)
効果
赤いプレーヤー、白いプレーヤーバック、プレーヤーバックは常にプレーヤーの後ろにあります