Assets/Create/Shader/Unlitで作った、vertex-fragment Shaderで、影を落とす方法。
-
ShadowCaster Passを追加。
- Name "ShadowCaster"
- Tags{ "LightMode" = "ShadowCaster" }
-
v2f構造体内でV2F_SHADOW_CASTWER;
- 内部的には、float4 pos : SV_POSITION;を宣言している
-
vert関数内で、TRANSGER_SHADOW_CASTER(o)
- opos:o.pos : SV_POSITION
- hpos : TEXCOORD0;
- opos = mul(UNITY_MATRIX_MVP, float4(v.vertex.xyz,1));
- opos = UnityApplyLinearShadowBias(opos);
- o.hpos = opos;
-
frag関数内で、SHADOW_CASTER_FRAGMENT(i)
- return 0;するだけでも、影は落ちる。いろんなプラットフォームの差を埋めるやつ?
-
v.vertexは、事前に変形させておく。
-
各処理のソースは、UnityCG.cginc内をSearchすると分かる
-
マクロの中身を展開してみたら、TRANSFER_SHADOW_CASTER(o)とかの中では、あんましなにもしてないのでは???てかんじになった(unlit-ShadowCast.shader)
- Biasに対する処理とかをしてる!