【Unity】【シェーダ】Custom Render Queueについて

マテリアルからQueueによる描画順をいじるCustom Render Queueの使い方です。

Custom Render Queue?

Unityでは基本的にシェーダでRender Queueを指定します。

Tags { "Queue"="Geometry+1" }

これをマテリアルから上書きするのがCustom Render Queueです。
Custom Render Queueを設定すると、シェーダで指定したRender Queueは無視されてCustom Render Queueで指定した値が使われます。

設定方法

設定はマテリアルのこの部分をいじるだけです。

f:id:halya_11:20180525123133p:plain

From Shaderとなっている部分をGeometryやAlphaTest、Transparentに変更できます。
直接数値を入力してもいいです。
From Shaderとなっている場合以外はCustom Render Queueが指定されている状態です。

ちなみにインスペクタをデバッグモードにすると、実際の変数の値が見れます。

f:id:halya_11:20180525123450p:plain

これを見ると、Custom Render Queueが未指定(From Shader)の状態のときには変数に-1が入っていることがわかります。
Custom Render Queueが指定されている場合はその値が入っています。

スクリプトから制御する

Custom Render Queueはマテリアルを通してスクリプトから制御することもできます。

using UnityEngine;
// UnityEngine.Renderingをusingすること
using UnityEngine.Rendering;

public class CustomRenderQueue : MonoBehaviour {

    private void Awake () {
        // MaterialのCustom Render Queueを書き換える処理
        GetComponent<MeshRenderer>().material.renderQueue = (int)RenderQueue.Overlay;
    }
}

renderQueueにはintを自由に代入できますが、RenderQueue列挙型に値が定義されているので基本的にはこれを使います。
前節で述べたように、-1を代入すればシェーダに設定されたQueueを使うようになります。