一覧に戻る

Unity3Dプラグインのレンダリング

2017.07.01Unity3Dプラグイン

オクルージョン

ジオメトリを隠すための透過オブジェクトを作成する手順を説明します。

  • プロジェクトタブで新しいシェーダーアセットを作成し、名前をOccluderにします。
  • シェーダーを開き、次のコードを貼り付けます。
Shader "Unlit/Occluder" {
    SubShader {
        Tags { "Queue" = "Geometry-1" }
        ColorMask 0
        ZWrite On
        Pass { }
    }
}
  • 新しいマテリアルを作成し、名前をOccluderにします。
  • マテリアルのInspector
    • Unlit/Occluderにシェーダーを設定します。
    • Render QueueがFrom Shaderに設定されることを確認します。この値は1999になります。
  • オクルージョンとして機能するオブジェクトを新しく作成します。
  • 新しいオクルーダーオブジェクトのMesh Rendererコンポーネントでは作成したOccluderマテリアルにマテリアルを設定します。
  • オクルーダーオブジェクトは、背後にある他のオブジェクトをすべて非表示にしますが背景は描画します。

どのオブジェクトを非表示にし、どのオブジェクトを表示するかを設定するには、オクルーダーオブジェクトのRender Queueの値を2001に設定し、オクルーダーオブジェクトに隠れるオブジェクトのRender Queue の値に2002を設定します。これにより、すべてのデフォルトオブジェクトが表示されたままになり、一部のオブジェクトにだけオクルージョンの効果を設定できます。他のオブジェクトのRender Queueを設定するには、カスタムシェーダーを作成するか、オブジェクトに以下のスクリプトを追加します。

using UnityEngine;

public class SetRenderQueue : MonoBehaviour {

    [SerializeField]
    protected int[] m_queues = new int[] { 2002 };

    protected void Awake() {
        Material[] materials = renderer.materials;
        for (int i = 0; i < materials.Length && i < m_queues.Length; ++i) {
            materials[i].renderQueue = m_queues[i];
        }
    }
}