升级水插件
This commit is contained in:
@@ -88,9 +88,10 @@ namespace WaveHarmonic.Crest
|
||||
/// <param name="wavelength">Wavelength in m</param>
|
||||
/// <param name="componentsPerOctave">How many waves we're sampling, used to conserve energy for different sampling rates</param>
|
||||
/// <param name="windSpeed">Wind speed in m/s</param>
|
||||
/// <param name="gravity">Gravity</param>
|
||||
/// <param name="power">The energy of the wave in J</param>
|
||||
/// <returns>The amplitude of the wave in m</returns>
|
||||
internal float GetAmplitude(float wavelength, float componentsPerOctave, float windSpeed, out float power)
|
||||
internal float GetAmplitude(float wavelength, float componentsPerOctave, float windSpeed, float gravity, out float power)
|
||||
{
|
||||
Debug.AssertFormat(wavelength > 0f, this, "Crest: {0} wavelength must be > 0.", nameof(WaveSpectrum));
|
||||
|
||||
@@ -121,15 +122,18 @@ namespace WaveHarmonic.Crest
|
||||
var hasNextIndex = nextIndex < _PowerLogarithmicScales.Length;
|
||||
var nextPower = hasNextIndex && !_PowerDisabled[nextIndex] ? _PowerLogarithmicScales[nextIndex] : s_MinimumPowerLog;
|
||||
|
||||
// Empirical wind influence based on alpha-beta spectrum that underlies empirical spectra
|
||||
gravity *= _GravityScale;
|
||||
|
||||
// The amplitude calculation follows this nice paper from Frechot:
|
||||
// https://hal.archives-ouvertes.fr/file/index/docid/307938/filename/frechot_realistic_simulation_of_ocean_surface_using_wave_spectra.pdf
|
||||
var wl_lo = Mathf.Pow(2f, Mathf.Floor(wl_pow2));
|
||||
var k_lo = 2f * Mathf.PI / wl_lo;
|
||||
var c_lo = ComputeWaveSpeed(wl_lo);
|
||||
var c_lo = ComputeWaveSpeed(wl_lo, gravity);
|
||||
var omega_lo = k_lo * c_lo;
|
||||
var wl_hi = 2f * wl_lo;
|
||||
var k_hi = 2f * Mathf.PI / wl_hi;
|
||||
var c_hi = ComputeWaveSpeed(wl_hi);
|
||||
var c_hi = ComputeWaveSpeed(wl_hi, gravity);
|
||||
var omega_hi = k_hi * c_hi;
|
||||
|
||||
var domega = (omega_lo - omega_hi) / componentsPerOctave;
|
||||
@@ -141,9 +145,6 @@ namespace WaveHarmonic.Crest
|
||||
power = hasNextIndex ? Mathf.Lerp(thisPower, nextPower, alpha) : thisPower;
|
||||
power = Mathf.Pow(10f, power);
|
||||
|
||||
// Empirical wind influence based on alpha-beta spectrum that underlies empirical spectra
|
||||
var gravity = _GravityScale * WaterRenderer.Instance.Gravity;
|
||||
|
||||
// Zero gravity will cause NaNs, and they have always been flat.
|
||||
if (gravity <= 0f) return 0f;
|
||||
|
||||
@@ -163,11 +164,11 @@ namespace WaveHarmonic.Crest
|
||||
return a * _Multiplier;
|
||||
}
|
||||
|
||||
static float ComputeWaveSpeed(float wavelength, float gravityMultiplier = 1f)
|
||||
static float ComputeWaveSpeed(float wavelength, float gravity, float gravityMultiplier = 1f)
|
||||
{
|
||||
// wave speed of deep sea water waves: https://en.wikipedia.org/wiki/Wind_wave
|
||||
// https://en.wikipedia.org/wiki/Dispersion_(water_waves)#Wave_propagation_and_dispersion
|
||||
var g = WaterRenderer.Instance.Gravity * gravityMultiplier;
|
||||
var g = gravity * gravityMultiplier;
|
||||
var k = 2f * Mathf.PI / wavelength;
|
||||
//float h = max(depth, 0.01);
|
||||
//float cp = sqrt(abs(tanh_clamped(h * k)) * g / k);
|
||||
@@ -209,10 +210,8 @@ namespace WaveHarmonic.Crest
|
||||
}
|
||||
|
||||
// This applies the correct PM spectrum powers, validated against a separate implementation
|
||||
internal void ApplyPiersonMoskowitzSpectrum()
|
||||
internal void ApplyPiersonMoskowitzSpectrum(float gravity)
|
||||
{
|
||||
var gravity = WaterRenderer.Instance != null ? WaterRenderer.Instance.Gravity : Mathf.Abs(Physics.gravity.y);
|
||||
|
||||
for (var octave = 0; octave < k_NumberOfOctaves; octave++)
|
||||
{
|
||||
var wl = SmallWavelength(octave);
|
||||
|
||||
Reference in New Issue
Block a user