シェーダー入門したくないけど書いてみたい その5 透過編
はじめに
この記事ではシェーダに関して入門することができません。とりえあずUnityでシェーダを書いて見たい人向けのブログです。
今回は透過に対応したシェーダを書いてみます。
事前準備
事前準備が済んでいない方は、第一回目の事前準備の項目を参考に事前準備を行ってください。
シェーダー入門したくないけど書いてみたい その1 - 波打際のブログさん
05.TransparencyShader
`05.TransparencyShader/TransparencyShader.unity` を開いてみてください。開くと半透明の箱がレンダリングされていると思います。
このシェーダは次のように実装されています。
Shader "ShaderLesson/05.TransparencyShader/Question" { 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.5); } ENDCG } } }
このシェーダのポイント
このシェーダのポイントは、Blendでブレンディングの指定をしていること、QueueタグにTransparentを指定していることです。
ブレンディングの指定
ピクセル同士をどのようにブレンドするかを `Blend` 構文で指定しています。これを指定しないとブレンディングが無効なのでシェーダの値がそのままピクセルの値になります。`SrcAlpha OneMinusSrcAlpha` でアルファブレンディングを指定しています。
Queueタグ
今まで定型文のように全く変化のなかったタグですが、今回はいつもと異なりRenderTypeとQueueタグにTransparentが指定されています。特に重要になってくるのがQueueタグです。QueueタグにTransparentを指定することでシェーダのレンダリング順を後回しにしています。
なぜ後回しにしなければいけないのかというと、他のシェーダーがピクセルに描画してしまうと、それより後ろにあるオブジェクトはそのピクセルに書き込めなくなってしまうためです。
RenderTypeは他のシェーダからシェーダを参照するときに使われる値を設定します。