1 VFXUVData GetUVData(VFX_VARYING_PS_INPUTS i) // uvs are provided from interpolants
3 VFXUVData data = (VFXUVData)0;
5 data.uvs.xy = i.VFX_VARYING_UV.xy;
6 #if USE_FLIPBOOK_INTERPOLATION && defined(VFX_VARYING_FRAMEBLEND)
7 data.uvs.zw = i.VFX_VARYING_UV.zw;
8 data.blend = i.VFX_VARYING_FRAMEBLEND;
9 #if USE_FLIPBOOK_MOTIONVECTORS && defined(VFX_VARYING_MOTIONVECTORSCALE)
10 float2 mvPrev = -(SampleTexture(VFX_SAMPLER(motionVectorMap), data.uvs.xy).rg * 2 - 1) * i.VFX_VARYING_MOTIONVECTORSCALE * data.blend;
11 float2 mvNext = (SampleTexture(VFX_SAMPLER(motionVectorMap), data.uvs.zy).rg * 2 - 1) * i.VFX_VARYING_MOTIONVECTORSCALE * (1.0-data.blend);
20 VFXUVData GetUVData(VFX_VARYING_PS_INPUTS i,float2 uv) // uvs are provided from ps directly
22 #ifdef VFX_VARYING_FLIPBOOKSIZE
23 float2 flipBookSize = i.VFX_VARYING_FLIPBOOKSIZE;
25 float2 flipBookSize = float2(1, 1);
28 #ifdef VFX_VARYING_INVFLIPBOOKSIZE
29 float2 invFlipBookSize = i.VFX_VARYING_INVFLIPBOOKSIZE;
31 float2 invFlipBookSize = 1.0f / flipBookSize;
34 #ifdef VFX_VARYING_TEXINDEX
35 float texIndex = i.VFX_VARYING_TEXINDEX;
37 float texIndex = 0.0f;
40 return GetUVData(flipBookSize, invFlipBookSize, uv, texIndex);
43 float4 VFXGetParticleColor(VFX_VARYING_PS_INPUTS i)
46 #if VFX_NEEDS_COLOR_INTERPOLATOR
47 #ifdef VFX_VARYING_COLOR
48 color.rgb *= i.VFX_VARYING_COLOR;
50 #ifdef VFX_VARYING_ALPHA
51 color.a *= i.VFX_VARYING_ALPHA;
57 float VFXGetSoftParticleFade(VFX_VARYING_PS_INPUTS i)
60 #if USE_SOFT_PARTICLE && defined(VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE)
61 float sceneZ = VFXLinearEyeDepth(VFXSampleDepth(i.VFX_VARYING_POSCS));
62 fade = saturate(i.VFX_VARYING_INVSOFTPARTICLEFADEDISTANCE * (sceneZ - i.VFX_VARYING_POSCS.w));
63 fade = fade * fade * (3.0 - (2.0 * fade)); // Smoothsteping the fade
68 float4 VFXGetTextureColor(VFXSampler2D s,VFX_VARYING_PS_INPUTS i)
70 return SampleTexture(s, GetUVData(i));
73 float4 VFXGetTextureColorWithProceduralUV(VFXSampler2D s, VFX_VARYING_PS_INPUTS i, float2 uv)
75 return SampleTexture(s, GetUVData(i, uv));
78 float3 VFXGetTextureNormal(VFXSampler2D s,float2 uv)
80 float4 packedNormal = s.t.Sample(s.s,uv);
81 packedNormal.w *= packedNormal.x;
83 normal.xy = packedNormal.wy * 2.0 - 1.0;
84 normal.z = sqrt(1.0 - saturate(dot(normal.xy, normal.xy)));
88 float4 VFXGetFragmentColor(VFX_VARYING_PS_INPUTS i)
90 float4 color = VFXGetParticleColor(i);
91 color.a *= VFXGetSoftParticleFade(i);
95 void VFXClipFragmentColor(float alpha,VFX_VARYING_PS_INPUTS i)
98 #if defined(VFX_VARYING_ALPHATHRESHOLD)
99 clip(alpha - i.VFX_VARYING_ALPHATHRESHOLD);
101 clip(alpha - VFX_EPSILON);
106 float4 VFXApplyFog(float4 color,VFX_VARYING_PS_INPUTS i)
108 #if USE_FOG && defined(VFX_VARYING_POSCS)
109 #if defined(VFX_VARYING_POSWS)
110 return VFXApplyFog(color, i.VFX_VARYING_POSCS, i.VFX_VARYING_POSWS);
112 return VFXApplyFog(color, i.VFX_VARYING_POSCS, (float3)0); //Some pipeline (LWRP) doesn't require WorldPos