2025-10-21 14:18:31 +09:00

58 lines
2.0 KiB
HLSL

// Stylized Water 3 by Staggart Creations (http://staggart.xyz)
// COPYRIGHT PROTECTED UNDER THE UNITY ASSET STORE EULA (https://unity.com/legal/as-terms)
// • Copying or referencing source code for the production of new asset store, or public, content is strictly prohibited!
// • Uploading this file to a public repository will subject it to an automated DMCA takedown request.
#ifndef WATER_WAVES_INCLUDED
#define WATER_WAVES_INCLUDED
#include "Gerstner.hlsl"
TEXTURE2D(_WaveProfile);
void CalculateWaves(in Texture2D<float4> lutTex, in uint layerCount, in uint maxCount, float2 uv, float frequency, float3 positionWS, float2 baseDir, float3 normalWS, float time, float mask, float3 scale,
in float normalStrength, float fadeStart, float fadeEnd, out float3 waveOffset, out float3 waveNormalWS)
{
waveOffset = float3(0,0,0);
float3 waveTangent = float3(1,0,0);
float3 waveBiTangent = float3(0,0,1);
float2 waveDir = baseDir;
#if _RIVER
waveDir.x = 1;
waveDir.y = -1;
#endif
CalculateGerstnerWaves_float(lutTex, layerCount, uv, frequency, time, normalStrength, waveDir, maxCount,
//Out
waveOffset, waveTangent, waveBiTangent);
waveNormalWS = cross(waveBiTangent, waveTangent);
//waveNormal = float3(0,0,1);
//Tangent- to world-space
//half3x3 waveTangentToWorldMatrix = half3x3(waveTangent, waveBiTangent, normal);
//waveNormalWS = TransformTangentToWorld(waveNormalWS, waveTangentToWorldMatrix);
//Flatten by blue vertex color weight
float waveMask = lerp(1.0, 0.0, mask);
//Distance based scalar
float fadeFactor = DistanceFadeMask(positionWS, fadeStart, fadeEnd, 1.0);
waveMask *= fadeFactor;
waveMask = saturate(max(0.0001, waveMask));
//return float4(waveMask.xxx, 1.0);
//Scaling
waveOffset.y *= scale.y * waveMask;
waveOffset.xz *= scale.xz * waveMask;
//Fading
waveNormalWS = lerp(normalWS, waveNormalWS, waveMask * scale.y);
waveNormalWS = normalize(waveNormalWS);
//water.offset.xyz += waveOffset;
//water.waveNormal = waveNormalWS;
}
#endif