升级6.4.升级水,升级天气
This commit is contained in:
@@ -1,14 +1,24 @@
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
#pragma exclude_renderers glcore gles3
|
||||
|
||||
#pragma kernel CrestUpdateFoam
|
||||
|
||||
#pragma multi_compile _ CREST_FLOW_ON_INTERNAL
|
||||
|
||||
// Cascade macros expect this to be available.
|
||||
#define g_Crest_CascadeFoamSource _Crest_Source
|
||||
Texture2DArray _Crest_Source;
|
||||
|
||||
#include "HLSLSupport.cginc"
|
||||
|
||||
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/Keywords.hlsl"
|
||||
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/Macros.hlsl"
|
||||
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/Constants.hlsl"
|
||||
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/Globals.hlsl"
|
||||
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/InputsDriven.hlsl"
|
||||
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/Helpers.hlsl"
|
||||
#include "Packages/com.waveharmonic.crest/Runtime/Shaders/Library/Cascade.hlsl"
|
||||
|
||||
RWTexture2DArray<float> _Crest_Target;
|
||||
@@ -21,7 +31,6 @@ float _Crest_WaveFoamCoverage;
|
||||
float _Crest_ShorelineFoamMaxDepth;
|
||||
float _Crest_ShorelineFoamStrength;
|
||||
float _Crest_SimDeltaTime;
|
||||
float _Crest_SimDeltaTimePrev;
|
||||
float _Crest_LodChange;
|
||||
bool _Crest_NeedsPrewarming;
|
||||
uint _Crest_MinimumWavesSlice;
|
||||
@@ -39,10 +48,14 @@ void UpdateFoam(uint3 id)
|
||||
|
||||
// Sample from previous frame.
|
||||
{
|
||||
float2 positionXZ = worldPosXZ;
|
||||
|
||||
#if d_Crest_FlowLod
|
||||
const half2 velocity = Cascade::MakeFlow(slice0).SampleFlow(worldPosXZ);
|
||||
const float2 positionXZ = worldPosXZ - _Crest_SimDeltaTime * velocity;
|
||||
positionXZ -= velocity * _Crest_SimDeltaTime;
|
||||
#endif
|
||||
// Slice to sample previous frames data from. LOD change takes into account shifting of the cascades in scale.
|
||||
const float sliceIndexSource = clamp(id.z + _Crest_LodChange, 0.0, cascade._Count - 1.0);
|
||||
const uint sliceIndexSource = ComputeSlice(slice0, _Crest_LodChange, g_Crest_LodCount - 1);
|
||||
foam = Cascade::MakeFoamSource(sliceIndexSource).SampleFoamOverflow(positionXZ, 1.0);
|
||||
}
|
||||
|
||||
@@ -53,9 +66,16 @@ void UpdateFoam(uint3 id)
|
||||
// accumulation of foam and causes overshoots when _Crest_WaveFoamStrength is less than 1.0.
|
||||
float simDeltaTime = _Crest_NeedsPrewarming ? max(_Crest_SimDeltaTime, min(1.0, _Crest_WaveFoamStrength - 1.0) / _Crest_FoamFadeRate) : _Crest_SimDeltaTime;
|
||||
|
||||
// Limit wave contributions at low water scales only where filtering is needed.
|
||||
uint filteredSlice = slice0;
|
||||
if (g_Crest_WaterScale <= 8)
|
||||
{
|
||||
filteredSlice = max(_Crest_MinimumWavesSlice, filteredSlice);
|
||||
}
|
||||
|
||||
// The determinant of the displacement Jacobian is a good measure for turbulence.
|
||||
float det;
|
||||
const half3 displacement = Cascade::MakeAnimatedWaves(max(_Crest_MinimumWavesSlice, slice0)).SampleDisplacement(worldPosXZ, det);
|
||||
const half3 displacement = Cascade::MakeAnimatedWaves(filteredSlice).SampleDisplacement(worldPosXZ, det);
|
||||
foam += 5.0 * simDeltaTime * _Crest_WaveFoamStrength * saturate( _Crest_WaveFoamCoverage - det );
|
||||
|
||||
// Prewarm shoreline foam. 1.0 / _Crest_FoamFadeRate perfectly matches a paused water in edit mode which is fine for
|
||||
|
||||
Reference in New Issue
Block a user