44 lines
1.7 KiB
HLSL
44 lines
1.7 KiB
HLSL
#ifndef PRIPPLE_INCLUDED
|
|
#define PRIPPLE_INCLUDED
|
|
|
|
#include "PUniforms.cginc"
|
|
#include "PCommon.cginc"
|
|
|
|
float4 CalculateRippleVertexOffset(float4 localPos, float rippleHeight, float rippleSpeed, float rippleScale, float3 flowDir)
|
|
{
|
|
float4 worldPos = mul(unity_ObjectToWorld, float4(localPos.xyz, 1));
|
|
float2 noisePos = float2(worldPos.x, worldPos.z);
|
|
|
|
rippleScale *= 0.01;
|
|
rippleSpeed *= 0.1;
|
|
|
|
float noiseBase = SampleVertexNoise((noisePos - flowDir.xz * _PoseidonTime * rippleSpeed) * rippleScale) * 0.5 + 0.5;
|
|
float noiseFade = lerp(0.5, 1, SampleVertexNoise((noisePos + flowDir.xz * _PoseidonTime * rippleSpeed * 3) * rippleScale) * 0.5 + 0.5);
|
|
|
|
float noise = abs(noiseBase - noiseFade);
|
|
|
|
float4 offset = float4(0, noise * rippleHeight, 0, 0);
|
|
return offset;
|
|
}
|
|
|
|
void ApplyRipple(inout float4 v0, inout float4 v1, inout float4 v2)
|
|
{
|
|
float3 flowDir = float3(1, 1, 1);
|
|
v0 += CalculateRippleVertexOffset(v0, _RippleHeight, _RippleSpeed, _RippleNoiseScale, flowDir);
|
|
v1 += CalculateRippleVertexOffset(v1, _RippleHeight, _RippleSpeed, _RippleNoiseScale, flowDir);
|
|
v2 += CalculateRippleVertexOffset(v2, _RippleHeight, _RippleSpeed, _RippleNoiseScale, flowDir);
|
|
}
|
|
|
|
void ApplyRipple(inout float4 vertex,inout float4 texcoord, inout float4 color, float4 texcoord1)
|
|
{
|
|
float3 flow0 = float3(texcoord.w, 0, color.w);
|
|
float3 flow1 = float3(texcoord1.x, 0, texcoord1.y);
|
|
float3 flow2 = float3(texcoord1.z, 0, texcoord1.w);
|
|
|
|
vertex += CalculateRippleVertexOffset(vertex, _RippleHeight, _RippleSpeed, _RippleNoiseScale, flow0);
|
|
texcoord += CalculateRippleVertexOffset(texcoord, _RippleHeight, _RippleSpeed, _RippleNoiseScale, flow1);
|
|
color += CalculateRippleVertexOffset(color, _RippleHeight, _RippleSpeed, _RippleNoiseScale, flow2);
|
|
}
|
|
|
|
#endif
|