12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #ifndef CALMWATER_FOAM_INCLUDED
- #define CALMWATER_FOAM_INCLUDED
- void ComputeFoam(inout GlobalData data, v2f IN)
- {
- #if _FOAM_ON || _WHITECAPS_ON
- #ifndef SHADER_API_D3D9
- float2 foamUV = IN.FoamUV.xy;
- #else
- float2 foamUV = IN.worldPos.xz;
- #endif
- fixed foamMask = 0;
- //Foam Texture with animation
- fixed3 foamTex = tex2D(_FoamTex, foamUV + (data.tangentNormal.xy * 0.05)).r;
- // ===========================================================================
- // FOAM
- // ===========================================================================
- #if _FOAM_ON
- //Border Foam Mask
- foamMask = 1.0 - saturate(_FoamSize * (data.cleanDepth - data.DepthUV.z));
- #endif
- // ===========================================================================
- // WHITE CAPS
- // ===========================================================================
- #if _WHITECAPS_ON
- #ifndef SHADER_API_D3D9
- float2 maskUV = IN.FoamUV.zw;
- #else
- float2 maskUV = IN.worldPos.xz;
- #endif
- fixed capsMask = tex2D(_CapsMask, maskUV);
- #if _DISPLACEMENTMODE_WAVE || _DISPLACEMENTMODE_GERSTNER || _DISPLACEMENTMODE_TEXTURE
- capsMask *= IN.ambient.a;
- #endif
- capsMask = smoothstep(0, _CapsSize, capsMask);
- foamMask = max(_CapsIntensity * capsMask, foamMask);
- #endif
- foamTex *= foamMask.xxx * _FoamColor.rgb * max(_LightColor0.rgb, IN.ambient.rgb);
- data.finalColor += min(1.0, 2.0 * foamTex);
- #endif
- }
- #endif
|