升级水插件
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
// Crest Water System
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
using UnityEngine;
|
||||
using WaveHarmonic.Crest.Internal;
|
||||
using WaveHarmonic.Crest.Utility;
|
||||
|
||||
namespace WaveHarmonic.Crest
|
||||
{
|
||||
@@ -84,60 +85,46 @@ namespace WaveHarmonic.Crest
|
||||
}
|
||||
}
|
||||
|
||||
if (_UseDisplacements)
|
||||
var success = _UseDisplacements
|
||||
? collProvider.RetrieveSucceeded(collProvider.Query(GetHashCode(), _ObjectWidth, _SamplePositions, _ResultDisplacements, _UseNormals ? _ResultNormals : null, null, _Layer))
|
||||
: collProvider.RetrieveSucceeded(collProvider.Query(GetHashCode(), _ObjectWidth, _SamplePositions, _ResultHeights, _UseNormals ? _ResultNormals : null, null, _Layer));
|
||||
|
||||
#if !UNITY_EDITOR
|
||||
// Gizmos handle this in editor.
|
||||
if (success)
|
||||
{
|
||||
if (collProvider.RetrieveSucceeded(collProvider.Query(GetHashCode(), _ObjectWidth, _SamplePositions, _ResultDisplacements, _UseNormals ? _ResultNormals : null, null, _Layer)))
|
||||
{
|
||||
for (var i = 0; i < _Steps; i++)
|
||||
{
|
||||
for (var j = 0; j < _Steps; j++)
|
||||
{
|
||||
var result = _SamplePositions[j * _Steps + i];
|
||||
result.y = water.SeaLevel;
|
||||
result += _ResultDisplacements[j * _Steps + i];
|
||||
|
||||
var norm = _UseNormals ? _ResultNormals[j * _Steps + i] : Vector3.up;
|
||||
|
||||
DebugDrawCross(result, norm, Mathf.Min(_StepSize / 4f, 1f), Color.green);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (collProvider.RetrieveSucceeded(collProvider.Query(GetHashCode(), _ObjectWidth, _SamplePositions, _ResultHeights, _UseNormals ? _ResultNormals : null, null, _Layer)))
|
||||
{
|
||||
for (var i = 0; i < _Steps; i++)
|
||||
{
|
||||
for (var j = 0; j < _Steps; j++)
|
||||
{
|
||||
var result = _SamplePositions[j * _Steps + i];
|
||||
result.y = _ResultHeights[j * _Steps + i];
|
||||
|
||||
var norm = _UseNormals ? _ResultNormals[j * _Steps + i] : Vector3.up;
|
||||
|
||||
DebugDrawCross(result, norm, Mathf.Min(_StepSize / 4f, 1f), Color.green);
|
||||
}
|
||||
}
|
||||
}
|
||||
Render(water, Debug.DrawLine);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
public static void DebugDrawCross(Vector3 pos, float r, Color col, float duration = 0f)
|
||||
internal void Render(WaterRenderer water, DebugUtility.DrawLine draw)
|
||||
{
|
||||
Debug.DrawLine(pos - Vector3.up * r, pos + Vector3.up * r, col, duration);
|
||||
Debug.DrawLine(pos - Vector3.right * r, pos + Vector3.right * r, col, duration);
|
||||
Debug.DrawLine(pos - Vector3.forward * r, pos + Vector3.forward * r, col, duration);
|
||||
}
|
||||
if (_SamplePositions == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
public static void DebugDrawCross(Vector3 pos, Vector3 up, float r, Color col, float duration = 0f)
|
||||
{
|
||||
up.Normalize();
|
||||
var right = Vector3.Normalize(Vector3.Cross(up, Vector3.forward));
|
||||
var forward = Vector3.Cross(up, right);
|
||||
Debug.DrawLine(pos - up * r, pos + up * r, col, duration);
|
||||
Debug.DrawLine(pos - right * r, pos + right * r, col, duration);
|
||||
Debug.DrawLine(pos - forward * r, pos + forward * r, col, duration);
|
||||
for (var i = 0; i < _Steps; i++)
|
||||
{
|
||||
for (var j = 0; j < _Steps; j++)
|
||||
{
|
||||
var result = _SamplePositions[j * _Steps + i];
|
||||
|
||||
if (_UseDisplacements)
|
||||
{
|
||||
result.y = water.SeaLevel;
|
||||
result += _ResultDisplacements[j * _Steps + i];
|
||||
}
|
||||
else
|
||||
{
|
||||
result.y = _ResultHeights[j * _Steps + i];
|
||||
}
|
||||
|
||||
var normal = _UseNormals ? _ResultNormals[j * _Steps + i] : Vector3.up;
|
||||
DebugUtility.DrawCross(draw, result, normal, Mathf.Min(_StepSize / 4f, 1f), Color.green);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Crest Water System
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
// NOTE: DWP2 depends on this file. Any API changes need to be communicated to the DWP2 authors in advance.
|
||||
@@ -13,23 +13,18 @@ namespace WaveHarmonic.Crest
|
||||
/// <summary>
|
||||
/// A layer/event where queries are executed.
|
||||
/// </summary>
|
||||
[@GenerateDoc]
|
||||
public enum CollisionLayer
|
||||
{
|
||||
/// <summary>
|
||||
/// Include all displacement.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="Generated.CollisionLayer.Everything"/>
|
||||
[Tooltip("Include all displacement.")]
|
||||
Everything,
|
||||
|
||||
/// <summary>
|
||||
/// Only include Animated Waves.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="Generated.CollisionLayer.AfterAnimatedWaves"/>
|
||||
[Tooltip("Only include Animated Waves.")]
|
||||
AfterAnimatedWaves,
|
||||
|
||||
/// <summary>
|
||||
/// Include Animated Waves and Dynamic Waves.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="Generated.CollisionLayer.AfterDynamicWaves"/>
|
||||
[Tooltip("Include Animated Waves and Dynamic Waves.")]
|
||||
AfterDynamicWaves,
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Crest Water System
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
using UnityEngine;
|
||||
@@ -82,27 +82,28 @@ namespace WaveHarmonic.Crest
|
||||
{
|
||||
var layers = _Water.AnimatedWavesLod._CollisionLayers;
|
||||
|
||||
// Displacement is the fallback if there are no layers (ie single layer).
|
||||
if (layers == CollisionLayers.Nothing)
|
||||
{
|
||||
return _Displacement;
|
||||
}
|
||||
|
||||
if (layer == CollisionLayer.Everything)
|
||||
var everything = layer == CollisionLayer.Everything;
|
||||
|
||||
// Displacement is the final layer, if present.
|
||||
if (everything && layers.HasFlag(CollisionLayers.Displacement))
|
||||
{
|
||||
if (layers.HasFlag(CollisionLayers.Displacement))
|
||||
{
|
||||
return _Displacement;
|
||||
}
|
||||
return _Displacement;
|
||||
}
|
||||
|
||||
if (layer >= CollisionLayer.AfterDynamicWaves)
|
||||
// Chosen/fallback to Dynamic Waves.
|
||||
if ((everything || layer >= CollisionLayer.AfterDynamicWaves) &&
|
||||
layers.HasFlag(CollisionLayers.DynamicWaves) && _Water.DynamicWavesLod.Enabled)
|
||||
{
|
||||
if (layers.HasFlag(CollisionLayers.DynamicWaves) && _Water.DynamicWavesLod.Enabled)
|
||||
{
|
||||
return _DynamicWaves;
|
||||
}
|
||||
return _DynamicWaves;
|
||||
}
|
||||
|
||||
// If not single layer, this is always present.
|
||||
return _AnimatedWaves;
|
||||
}
|
||||
|
||||
@@ -131,6 +132,19 @@ namespace WaveHarmonic.Crest
|
||||
_Displacement.UpdateQueries(water);
|
||||
}
|
||||
|
||||
public void SendReadBack(WaterRenderer water, CollisionLayers layers)
|
||||
{
|
||||
// Will only submit readback if there are queries.
|
||||
_AnimatedWaves.SendReadBack(water);
|
||||
_DynamicWaves.SendReadBack(water);
|
||||
_Displacement.SendReadBack(water);
|
||||
}
|
||||
|
||||
public void SendReadBack(WaterRenderer water)
|
||||
{
|
||||
_Displacement.SendReadBack(water);
|
||||
}
|
||||
|
||||
public void CleanUp()
|
||||
{
|
||||
_AnimatedWaves.CleanUp();
|
||||
@@ -143,6 +157,7 @@ namespace WaveHarmonic.Crest
|
||||
{
|
||||
public static void UpdateQueries(this ICollisionProvider self, WaterRenderer water, CollisionLayer layer) => (self as CollisionQueryWithPasses)?.UpdateQueries(water, layer);
|
||||
public static void UpdateQueries(this ICollisionProvider self, WaterRenderer water) => (self as IQueryable)?.UpdateQueries(water);
|
||||
public static void SendReadBack(this ICollisionProvider self, WaterRenderer water, CollisionLayers layer) => (self as CollisionQueryWithPasses)?.SendReadBack(water, layer);
|
||||
public static void CleanUp(this ICollisionProvider self) => (self as IQueryable)?.CleanUp();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Crest Water System
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
// Crest Water System
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
using UnityEngine;
|
||||
using WaveHarmonic.Crest.Internal;
|
||||
using WaveHarmonic.Crest.Utility;
|
||||
|
||||
namespace WaveHarmonic.Crest
|
||||
{
|
||||
@@ -33,7 +34,7 @@ namespace WaveHarmonic.Crest
|
||||
{
|
||||
var endPos = transform.position + transform.forward * dist;
|
||||
Debug.DrawLine(transform.position, endPos, Color.green);
|
||||
CollisionAreaVisualizer.DebugDrawCross(endPos, 2f, Color.green, 0f);
|
||||
DebugUtility.DrawCross(Debug.DrawLine, endPos, 2f, Color.green, 0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Crest Water System
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Crest Water System
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Crest Water System
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
using UnityEngine;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Crest Water System
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
namespace WaveHarmonic.Crest
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Crest Water System
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
// Potential improvements
|
||||
@@ -43,6 +43,7 @@ namespace WaveHarmonic.Crest
|
||||
int RequestCount { get; }
|
||||
int QueryCount { get; }
|
||||
void UpdateQueries(WaterRenderer water);
|
||||
void SendReadBack(WaterRenderer water);
|
||||
void CleanUp();
|
||||
}
|
||||
|
||||
@@ -512,7 +513,20 @@ namespace WaveHarmonic.Crest
|
||||
if (_SegmentRegistrarRingBuffer.Current._QueryCount > 0)
|
||||
{
|
||||
ExecuteQueries();
|
||||
}
|
||||
}
|
||||
|
||||
public void SendReadBack(WaterRenderer water)
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
// Seems to be a terrible memory leak coming from creating async GPU readbacks.
|
||||
// This was marked as resolved by Unity and confirmed fixed by forum posts.
|
||||
// May be worth keeping. See issue #630 for more details.
|
||||
if (!water._HeightQueries && !Application.isPlaying) return;
|
||||
#endif
|
||||
|
||||
if (_SegmentRegistrarRingBuffer.Current._QueryCount > 0)
|
||||
{
|
||||
// Remove oldest requests if we have hit the limit
|
||||
while (_Requests.Count >= k_MaximumRequests)
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Crest Water System
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
using UnityEngine;
|
||||
@@ -10,19 +10,15 @@ namespace WaveHarmonic.Crest
|
||||
/// <summary>
|
||||
/// What transform to use for queries.
|
||||
/// </summary>
|
||||
[@GenerateDoc]
|
||||
public enum QuerySource
|
||||
{
|
||||
/// <summary>
|
||||
/// This game object's transform.
|
||||
/// </summary>
|
||||
/// <inheritdoc cref="Generated.QuerySource.Transform"/>
|
||||
[Tooltip("This game object's transform.")]
|
||||
Transform,
|
||||
|
||||
/// <summary>
|
||||
/// The viewer's transform.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The viewer is the main camera the system uses.
|
||||
/// </remarks>
|
||||
/// <inheritdoc cref="Generated.QuerySource.Viewer"/>
|
||||
[Tooltip("The viewer's transform.\n\nThe viewer is the main camera the system uses.")]
|
||||
Viewer
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Crest Water System
|
||||
// Crest Water System
|
||||
// Copyright © 2024 Wave Harmonic. All rights reserved.
|
||||
|
||||
using UnityEngine;
|
||||
@@ -226,7 +226,7 @@ namespace WaveHarmonic.Crest
|
||||
public bool Sample(Vector3 position, out Vector2 flow, float minimumLength = 0f)
|
||||
{
|
||||
var water = WaterRenderer.Instance;
|
||||
var flowProvider = WaterRenderer.Instance == null ? null : water.FlowLod.Provider;
|
||||
var flowProvider = water == null ? null : water.FlowLod.Provider;
|
||||
|
||||
if (flowProvider == null)
|
||||
{
|
||||
@@ -262,7 +262,7 @@ namespace WaveHarmonic.Crest
|
||||
bool Sample(Vector3 position, out Vector2 result)
|
||||
{
|
||||
var water = WaterRenderer.Instance;
|
||||
var depthProvider = WaterRenderer.Instance == null ? null : water.DepthLod.Provider;
|
||||
var depthProvider = water == null ? null : water.DepthLod.Provider;
|
||||
|
||||
if (depthProvider == null)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user