From c1053303a311e9b81a48cc37b352f04760237bcc Mon Sep 17 00:00:00 2001 From: doodlum <15017472+doodlum@users.noreply.github.com> Date: Mon, 20 Oct 2025 03:42:12 +0100 Subject: [PATCH 1/2] fix: clamp maximum depth of grass --- features/Grass Collision/Shaders/Features/GrassCollision.ini | 2 +- .../Grass Collision/Shaders/GrassCollision/GrassCollision.hlsli | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/features/Grass Collision/Shaders/Features/GrassCollision.ini b/features/Grass Collision/Shaders/Features/GrassCollision.ini index b889ce2cc9..5a20fcd76d 100644 --- a/features/Grass Collision/Shaders/Features/GrassCollision.ini +++ b/features/Grass Collision/Shaders/Features/GrassCollision.ini @@ -1,2 +1,2 @@ [Info] -Version = 3-0-1 \ No newline at end of file +Version = 3-0-2 \ No newline at end of file diff --git a/features/Grass Collision/Shaders/GrassCollision/GrassCollision.hlsli b/features/Grass Collision/Shaders/GrassCollision/GrassCollision.hlsli index ee9e98c2cc..5789756fc3 100644 --- a/features/Grass Collision/Shaders/GrassCollision/GrassCollision.hlsli +++ b/features/Grass Collision/Shaders/GrassCollision/GrassCollision.hlsli @@ -148,7 +148,7 @@ namespace GrassCollision float3 remappedWorldPosition = lerp(worldPosition, worldPositionCentre, float3(0.95, 0.95, 0.0)); float distanceFromCenter = length(worldPosition - worldPositionCentre) + 0.01; - float maximumDepth = worldPosition.z - worldPositionCentre.z; + float maximumDepth = max(0.0, worldPosition.z - worldPositionCentre.z); // Return base collision float3 collision, previousCollision; From c72619f0cd2285b3ad410d1bc15f310699b65ade Mon Sep 17 00:00:00 2001 From: doodlum <15017472+doodlum@users.noreply.github.com> Date: Mon, 20 Oct 2025 03:43:13 +0100 Subject: [PATCH 2/2] fix: the fixer --- .../Shaders/GrassCollision/GrassCollision.hlsli | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/features/Grass Collision/Shaders/GrassCollision/GrassCollision.hlsli b/features/Grass Collision/Shaders/GrassCollision/GrassCollision.hlsli index 5789756fc3..75572ff19c 100644 --- a/features/Grass Collision/Shaders/GrassCollision/GrassCollision.hlsli +++ b/features/Grass Collision/Shaders/GrassCollision/GrassCollision.hlsli @@ -68,12 +68,10 @@ namespace GrassCollision collisionSample = lerp(ZRANGE.x, ZRANGE.y, collisionSample); collisionHeights += collisionSample.x * w; - collisionAmount += max(0, worldPosition.z - collisionSample.x) * ProceduralAnimation(collisionSample.y - collisionSample.x, distanceFromCenter) * w; - collisionAmount = min(collisionAmount, maximumDepth); + collisionAmount += max(0, min(maximumDepth, worldPosition.z - collisionSample.x)) * ProceduralAnimation(collisionSample.y - collisionSample.x, distanceFromCenter) * w; previousCollisionHeights += collisionSample.z * w; - previousCollisionAmount += max(0, worldPosition.z - collisionSample.z) * ProceduralAnimation(collisionSample.w - collisionSample.z, distanceFromCenter) * w; - previousCollisionAmount = min(previousCollisionAmount, maximumDepth); + previousCollisionAmount += max(0, min(maximumDepth, worldPosition.z - collisionSample.z)) * ProceduralAnimation(collisionSample.w - collisionSample.z, distanceFromCenter) * w; wsum += w; } @@ -148,7 +146,7 @@ namespace GrassCollision float3 remappedWorldPosition = lerp(worldPosition, worldPositionCentre, float3(0.95, 0.95, 0.0)); float distanceFromCenter = length(worldPosition - worldPositionCentre) + 0.01; - float maximumDepth = max(0.0, worldPosition.z - worldPositionCentre.z); + float maximumDepth = worldPosition.z - worldPositionCentre.z; // Return base collision float3 collision, previousCollision;