【UnityShader】雙面透光布料材質
阿新 • • 發佈:2018-12-26
觀察shadowmap,現在背面也渲染到shadowmap了SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { Tags { "LightMode"="ForwardBase" } cull off CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_fog #pragma multi_compile_fwdbase #include "UnityCG.cginc" #include "Lighting.cginc" #include "AutoLight.cginc" struct v2f { float2 uv : TEXCOORD0; float3 worldNormal : TEXCOORD1; float4 worldPos : TEXCOORD2; UNITY_FOG_COORDS(3) SHADOW_COORDS(4) float4 pos : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; v2f vert (appdata_base v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); o.worldNormal = UnityObjectToWorldNormal(v.normal); o.worldPos = mul(unity_ObjectToWorld, v.vertex); UNITY_TRANSFER_FOG(o,o.pos); TRANSFER_SHADOW(o); return o; } fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); UNITY_LIGHT_ATTENUATION(atten, i, i.worldPos) float3 litDir = normalize(UnityWorldSpaceLightDir(i.worldPos.xyz)); float ndl = abs(dot(i.worldNormal, litDir))*0.5+0.5; col.rgb = col.rgb * (UNITY_LIGHTMODEL_AMBIENT.rgb + _LightColor0.rgb* ndl*atten); UNITY_APPLY_FOG(i.fogCoord, col); return col; } ENDCG } Pass{ Name "ShadowCaster" Tags{ "LightMode" = "ShadowCaster" } cull off//確保正面和背面都正確的渲染到shadowmap CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_shadowcaster #include "UnityCG.cginc" struct v2f { V2F_SHADOW_CASTER; }; v2f vert(appdata_base v) { v2f o; TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) return o; } float4 frag(v2f i) : SV_Target { SHADOW_CASTER_FRAGMENT(i) } ENDCG } }