NGUI および Unity3D オブジェクトのレンダリング順序の問題を解決するための renderQueue の制御

UI をやったことがある人なら誰でも、NGUI と Unity3D オブジェクトのレンダリング順序の問題に遭遇したことがあるはずです。主にUnityで制作された特殊効果や3DキャラクターなどとUIを併用して表示する際のレイヤー問題を指します。

UI と特殊効果はすべて透明な方法でレンダリングされるため、Unity と NGUI は同じ透明なオブジェクトのレンダリング キューを管理するときに実際にはお互いを認識せず、並べ替えの問題が発生します。次に、UI と特殊効果を希望の順序でレンダリングするという目的を達成するために、レンダー キューの値を導入します。

ここではまず、最も面倒な部分でもある UI の描画呼び出しの設定について詳しく説明します。NGUI は、同じマテリアルを使用するウィジェットをレンダリングのために同じ描画呼び出しにマージすることがわかっています。ただし、私たちの要件では、この機能により、ウィジェット間に他のレンダリング キューを挿入できないという問題が発生しました。これは、本来のサンドイッチの問題です。UI コントロールの散在のみが関係する場合、NGUI は深さの設定を通じて解決できます。

同じマテリアルを使用する複数のコントロールが異なる深度値に設定されている場合でも、NGUI はこれらのコントロールを同じ描画呼び出しにマージします。異なる深度を持つ複数のコントロールが設定され、
異なるマテリアルが使用されている場合、NGUI はそれらを 1 つの描画呼び出しにマージします。はさまざまな描画呼び出しに分割され、順序は深さに応じて指定されます。

Unityでは、material.renderQueueはマテリアルのレンダーキュー(Render Queue)を設定するために使用されるプロパティです。レンダー キューは、レンダリング順序を制御するために使用されるメカニズムであり、レンダリング パイプライン内のオブジェクトの描画順序を決定するため、シーン内でのオブジェクトのレンダリング順序に影響を与えます。

各マテリアルには関連付けられたレンダー キューがあり、これにより、レンダリング パイプラインのどの段階でマテリアルがレンダリングされるかが決まります。レンダー キューの値が小さいほど、オブジェクトがレンダリング パイプラインの早い段階でレンダリングされることを意味し、レンダー キューの値が大きいほど、オブジェクトがレンダリング パイプラインの後半でレンダリングされることを意味します。

material.renderQueue プロパティを使用して、マテリアルのレンダー キューを設定できます。通常、これを使用してマテリアルのレンダリング順序を制御し、透明オブジェクトのレンダリングの問題を解決し、さまざまな深さの順序で正しくレンダリングできるようにします。

using UnityEngine;

public class RenderQueueExample : MonoBehaviour
{
    
    
    public Material customMaterial;
    public int customRenderQueue = 3000; // 设置自定义渲染队列值

    private void Start()
    {
    
    
        if (customMaterial != null)
        {
    
    
            customMaterial.renderQueue = customRenderQueue; // 设置材质的渲染队列值
        }
    }
}

カスタムマテリアルは、Unity エディターでこのスクリプトのパブリック フィールドに割り当てることができるシェーダーです。その後、custommaterial.renderQueue プロパティを使用してマテリアルのレンダー キュー値を設定できます。

長所と短所

プロジェクトのニーズと使用法に応じて、material.renderQueue を使用してマテリアルのレンダー キューを制御すると、いくつかの利点と潜在的な欠点があります。

利点:

透明オブジェクトの深度順序の問題の解決: シーン内に複数の重なり合う透明オブジェクトがある場合、それらのレンダリング順序は正しく表示するために重要です。さまざまなマテリアルのレンダー キューを調整することで、透明なオブジェクトが正しい順序でレンダリングされ、深さのソートの問題を回避できます。

特定のレンダリング順序を実装する: スカイボックスのレンダリング後またはレンダリング前など、レンダリング パイプラインの特定の段階で特定のオブジェクトをレンダリングしたい場合があります。レンダリング キューを設定すると、ニーズに合わせてオブジェクトがレンダリングされる順序を制御できます。

カスタム レンダリング効果: 一部のレンダリング効果では、オブジェクトを特定の順序でレンダリングする必要がある場合があります。レンダー キューを設定すると、ストローク、グローなどのカスタマイズされたレンダリング効果を実現できます。

危害:

複雑さの増加: レンダリング キューを使用すると、特にレンダリング順序の微調整が必​​要な場合に、プロジェクトの複雑さが増す可能性があります。レンダーキューの調整が多すぎると、プロジェクトの保守が困難になる可能性があります。複数の UI またはオブジェクトがマテリアルを共有している可能性もありますが、異なるシーンで表示される位置に一貫性がありません。

潜在的なレンダリングの問題: レンダー キューを正しく設定しないと、オブジェクトのちらつき (z_fightong)、深度違反などのレンダリングの問題が発生する可能性があります。レンダー キューを調整するときは、実際のレンダリングに問題が発生しないように注意する必要があります。

すべての状況に適用できるわけではありません。すべてのプロジェクトでレンダー キューの明示的な制御が必要なわけではありません。プロジェクトによっては、デフォルトのレンダリング順序で十分な場合があり、追加の調整は必要ありません。Z軸を調整する方が良い解決策になる可能性があります

要約すると、material.renderQueue を使用すると、場合によってはレンダリング順序の問題を解決できますが、使用する場合は注意が必要です。レンダーキューを調整するときは、テストを行ってレンダリング結果を注意深く観察し、望ましい結果が得られていることを確認することをお勧めします。

後ほど画像説明を追加します

おすすめ

転載: blog.csdn.net/qq_45498613/article/details/132245399