Unity5では、standardシェーダにて、Rendering ModeをTransparentかFadeに設定し、Albedoで適当なテクスチャーを設定すればオブジェクトを簡単に透明にすることができる。
今回はあえて下記のような透明ようのシェーダを独自に作ってみたが、なぜか透明にならないという問題が起きた。
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」になっているのがわかった。
前回も紹介したが、Queueの値はそれぞれ下記のように設定され、その値が低い順にレンダリングされる。
Background 1000 Geometry 2000 AlphaTest 2450 Transparent 3000 Overlay 4000
しかしながら、今回のようにCustom Render Queが2000に設定されているということは、独自シェーダーで「Queue=Transparent」としている部分が反映されていないことを意味する。きちんと独自シェーダーのQueueを反映させるためには、このCustom Render Queを「-1」に設定するとよいらしい。