升级6.4.升级水,升级天气

This commit is contained in:
2026-04-05 00:26:54 +08:00
parent 63bc9b5536
commit 5f7cbfb713
635 changed files with 34718 additions and 22567 deletions

View File

@@ -23,14 +23,14 @@ namespace WaveHarmonic.Crest
DisplacementPass _DisplacementPass = DisplacementPass.LodIndependent;
[Tooltip("Whether to filter this input by wavelength.\n\nIf disabled, it will render to all LODs.")]
[@Predicated(nameof(_DisplacementPass), inverted: true, nameof(DisplacementPass.LodDependent))]
[@Enable(nameof(_DisplacementPass), nameof(DisplacementPass.LodDependent))]
[@GenerateAPI]
[DecoratedField, SerializeField]
bool _FilterByWavelength;
[Tooltip("Which octave to render into.\n\nFor example, set this to 2 to render into the 2m-4m octave. These refer to the same octaves as the wave spectrum editor.")]
[@Predicated(nameof(_DisplacementPass), inverted: true, nameof(DisplacementPass.LodDependent))]
[@Predicated(nameof(_FilterByWavelength))]
[@Enable(nameof(_DisplacementPass), nameof(DisplacementPass.LodDependent))]
[@Enable(nameof(_FilterByWavelength))]
[@GenerateAPI]
[@DecoratedField, SerializeField]
float _OctaveWavelength = 512f;
@@ -49,7 +49,7 @@ namespace WaveHarmonic.Crest
float _MaximumDisplacementHorizontal = 0f;
[Tooltip("Use the bounding box of an attached renderer component to determine the maximum vertical displacement.")]
[@Predicated(nameof(_Mode), inverted: true, nameof(LodInputMode.Renderer))]
[@Enable(nameof(_Mode), nameof(LodInputMode.Renderer))]
[@GenerateAPI]
[@DecoratedField, SerializeField]
bool _ReportRendererBounds = false;
@@ -63,23 +63,35 @@ namespace WaveHarmonic.Crest
_FollowHorizontalWaveMotion = true;
}
internal override float Filter(WaterRenderer water, int slice)
private protected override void Initialize()
{
return AnimatedWavesLod.FilterByWavelength(water, slice, _FilterByWavelength ? _OctaveWavelength : 0f);
base.Initialize();
_Reporter ??= new(this);
_DisplacementReporter = _Reporter;
}
private protected override void OnUpdate(WaterRenderer water)
private protected override void OnDisable()
{
base.OnUpdate(water);
base.OnDisable();
_DisplacementReporter = null;
}
internal override float Filter(WaterRenderer water, int slice)
{
return AnimatedWavesLod.FilterByWavelength(water, slice, _FilterByWavelength ? _OctaveWavelength : 0f, water.AnimatedWavesLod.Resolution);
}
bool ReportDisplacement(WaterRenderer water, ref Rect bounds, ref float horizontal, ref float vertical)
{
if (!Enabled)
{
return;
return false;
}
var maxDispVert = _MaximumDisplacementVertical;
// let water system know how far from the sea level this shape may displace the surface
// TODO: we need separate min/max vertical displacement to be optimal.
if (_ReportRendererBounds)
{
var range = Data.HeightRange;
@@ -89,19 +101,40 @@ namespace WaveHarmonic.Crest
maxDispVert = Mathf.Max(maxDispVert, Mathf.Abs(seaLevel - minY), Mathf.Abs(seaLevel - maxY));
}
if (_MaximumDisplacementHorizontal > 0f || maxDispVert > 0f)
var rect = Data.Rect;
if (bounds.Overlaps(rect, false))
{
water.ReportMaximumDisplacement(_MaximumDisplacementHorizontal, maxDispVert, 0f);
horizontal += _MaximumDisplacementHorizontal;
vertical += maxDispVert;
return true;
}
return false;
}
float ReportWaveDisplacement(WaterRenderer water, float displacement)
{
return displacement;
}
}
partial class AnimatedWavesLodInput : ISerializationCallbackReceiver
partial class AnimatedWavesLodInput
{
[SerializeField, HideInInspector]
#pragma warning disable 414
int _Version = 1;
#pragma warning restore 414
Reporter _Reporter;
sealed class Reporter : IReportsDisplacement, IReportWaveDisplacement
{
readonly AnimatedWavesLodInput _Input;
public Reporter(AnimatedWavesLodInput input) => _Input = input;
public bool ReportDisplacement(WaterRenderer water, ref Rect bounds, ref float horizontal, ref float vertical) => _Input.ReportDisplacement(water, ref bounds, ref horizontal, ref vertical);
public float ReportWaveDisplacement(WaterRenderer water, float displacement) => _Input.ReportWaveDisplacement(water, displacement);
}
}
partial class AnimatedWavesLodInput
{
private protected override int Version => Mathf.Max(base.Version, 1);
[System.Obsolete("Please use DisplacementPass instead.")]
[Tooltip("When to render the input into the displacement data.\n\nIf enabled, it renders into all LODs of the simulation after the combine step rather than before with filtering. Furthermore, it will also affect dynamic waves.")]
@@ -110,30 +143,25 @@ namespace WaveHarmonic.Crest
[HideInInspector]
bool _RenderPostCombine = true;
[System.Obsolete]
void SetRenderPostCombine(bool previous, bool current, bool force = false)
{
if (previous == current && !force) return;
_DisplacementPass = current ? DisplacementPass.LodIndependent : DisplacementPass.LodDependent;
}
#pragma warning disable CS0612 // Type or member is obsolete
#pragma warning disable CS0618 // Type or member is obsolete
/// <inheritdoc/>
void ISerializationCallbackReceiver.OnAfterDeserialize()
private protected override void OnMigrate()
{
base.OnMigrate();
if (_Version < 1)
{
SetRenderPostCombine(_RenderPostCombine, _RenderPostCombine, force: true);
_Version = 1;
}
}
#pragma warning restore CS0612 // Type or member is obsolete
#pragma warning restore CS0618 // Type or member is obsolete
/// <inheritdoc/>
void ISerializationCallbackReceiver.OnBeforeSerialize()
{
}
}
}