覚え書きブログ

読者です 読者をやめる 読者になる 読者になる

Unity覚え書き(シェーダが反映されない場合の対処)

Unity5では、standardシェーダにて、Rendering ModeをTransparentかFadeに設定し、Albedoで適当なテクスチャーを設定すればオブジェクトを簡単に透明にすることができる。
f:id:hirotaka_hachiya:20160713001659p:plain

今回はあえて下記のような透明ようのシェーダを独自に作ってみたが、なぜか透明にならないという問題が起きた。

Shader "Custom/Transparent" {


	SubShader{
		Pass{
			Tags{ "RenderType" = "Transparent" "Queue" = "Transparent" }
			Blend SrcAlpha OneMinusSrcAlpha

			CGPROGRAM
#pragma vertex vert
#pragma fragment frag

			float4 vert(float4 v:POSITION) : SV_POSITION{
				return mul(UNITY_MATRIX_MVP, v);
			}

			fixed4 frag() : SV_Target{
				return fixed4(1.0, 0, 0, 0.2);
			}
			ENDCG
			}
	}
}

いろいろ調べたところ、どうやらきちんと独自シェーダのQueueの設定が反映されていないようだ。つまり、該シェーダを設定したマテリアルのDebugを下図のように開いて、「Custom Render Que」の値を見てみたところ「2000」になっているのがわかった。
f:id:hirotaka_hachiya:20160713002240p:plain
前回も紹介したが、Queueの値はそれぞれ下記のように設定され、その値が低い順にレンダリングされる。

Background 1000
Geometry 2000
AlphaTest 2450
Transparent 3000
Overlay 4000

しかしながら、今回のようにCustom Render Queが2000に設定されているということは、独自シェーダーで「Queue=Transparent」としている部分が反映されていないことを意味する。きちんと独自シェーダーのQueueを反映させるためには、このCustom Render Queを「-1」に設定するとよいらしい。
f:id:hirotaka_hachiya:20160713003624p:plain