// Shadow pass Pass { Tags { "LightMode"=${VFXPassShadow} } ZClip [_ZClip] ZWrite On Blend Off HLSLPROGRAM #pragma target 4.5 #if !USE_ALPHA_TEST && IS_TRANSPARENT_PARTICLE #define USE_ALPHA_TEST 1 #endif struct ps_input { float4 pos : SV_POSITION; float3 offsets : TEXCOORD0; #if VFX_USE_ALPHA_CURRENT || USE_ALPHA_TEST // x: alpha // y: alpha threshold nointerpolation float2 builtInInterpolants : TEXCOORD1; #endif nointerpolation uint faceID : TEXCOORD2; UNITY_VERTEX_OUTPUT_STEREO }; #define VFX_VARYING_PS_INPUTS ps_input #define VFX_VARYING_POSCS pos #if USE_ALPHA_TEST #define VFX_VARYING_ALPHA builtInInterpolants.x #define VFX_VARYING_ALPHATHRESHOLD builtInInterpolants.y #endif #define VFX_VARYING_OFFSETS offsets #define VFX_VARYING_FACEID faceID ${VFXBegin:VFXVertexAdditionalProcess} VFXApplyShadowBias(o.VFX_VARYING_POSCS, vPosWS); ${VFXEnd} ${VFXPassShadowDefine} ${VFXInclude("Shaders/ParticleHexahedron/Pass.template")} #pragma fragment frag float frag(ps_input i) : SV_Target0 { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); VFXTransformPSInputs(i); float alpha = VFXGetFragmentColor(i).a; alpha *= VFXGetTextureColorWithProceduralUV(VFX_SAMPLER(mainTexture),i,VFXCubeGetUV(i)).a; VFXClipFragmentColor(alpha,i); return 0; } ENDHLSL }