CapersProject/Assets/StylizedWater2/Shaders/Libraries/Foam.hlsl
2024-08-06 16:37:03 +09:00

56 lines
1.8 KiB
HLSL

//Stylized Water 2
//Staggart Creations (http://staggart.xyz)
//Copyright protected under Unity Asset Store EULA
#ifndef WATER_FOAM_INCLUDED
#define WATER_FOAM_INCLUDED
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
TEXTURE2D(_FoamTex);
SAMPLER(sampler_FoamTex);
#define FOAM_CHANNEL 0
float SampleFoamTexture(TEXTURE2D_PARAM(tex, samplerName), float2 uv, float2 tiling, float subTiling, float2 time, float speed, float subSpeed, float slopeMask, float slopeSpeed, float slopeStretch, bool slopeFoamOn)
{
float4 uvs = PackedUV(uv, tiling, time, speed, subTiling, subSpeed);
float f1 = SAMPLE_TEXTURE2D(tex, samplerName, uvs.xy)[FOAM_CHANNEL];
float f2 = SAMPLE_TEXTURE2D(tex, samplerName, uvs.zw)[FOAM_CHANNEL];
#if UNITY_COLORSPACE_GAMMA
f1 = SRGBToLinear(f1);
f2 = SRGBToLinear(f2);
#endif
float foam = saturate(f1 + f2);
if(slopeFoamOn)
{
uvs = PackedUV(uv, tiling, time, speed * slopeSpeed, subTiling, subSpeed * slopeSpeed);
//Stretch UV vertically on slope
uvs.yw *= 1-slopeStretch;
//Cannot reuse the same UV, slope foam needs to be resampled and blended in
float f3 = SAMPLE_TEXTURE2D(tex, samplerName, uvs.xy)[FOAM_CHANNEL];
float f4 = SAMPLE_TEXTURE2D(tex, samplerName, uvs.zw)[FOAM_CHANNEL];
#if UNITY_COLORSPACE_GAMMA
f3 = SRGBToLinear(f3);
f4 = SRGBToLinear(f4);
#endif
const half slopeFoam = saturate(f3 + f4);
foam = lerp(foam, slopeFoam, slopeMask);
}
return foam;
}
float SampleFoamTexture(float2 uv, float2 tiling, float subTiling, float2 time, float speed, float subSpeed, float slopeMask, float slopeSpeed, half slopeStretch, bool slopeFoamOn)
{
return SampleFoamTexture(TEXTURE2D_ARGS(_FoamTex, sampler_FoamTex), uv, tiling, subTiling, time, speed, subSpeed, slopeMask, slopeSpeed, slopeStretch, slopeFoamOn);
}
#endif