Static prims flagged as moving objects by float noise: rain and snow inside buildings, snow coat indoors #1166

Closed
opened 2026-10-27 21:03:00 +00:00 by TheSlowly · 1 comment
Collaborator

Rain and snow fall inside closed, static buildings, and an avatar standing indoors gets a snow coat (#1165). RenderVKWeatherSnowDepthDebug shows the building flipping between covered (yellow) and mover (magenta) every few seconds. RenderVKShadowMoverSettleSecs 0 hides it.

Cause:

  • Indoors, the camera distance to the big prims around it is clamped to 0.01 m (vkStampMoveVisibility, pipeline.cpp). At that distance LL's damped ease never passes its end test (LLDrawable::updateXform), because the rounding of the reached rotation stays above it.
  • The eased pose then flips by single ULPs (0.03-0.06 mm, velocity 0) while the drawable stays on the move list.
  • The bit-exact pose compare in refreshObjectPose / applyComposedPose counts that as motion. The ingest marks the prims as dynamic casters (instance bit 21).
  • Movers are left out of the weather roof map, so the roof disappears for about 2 s at a time. Rain falls through it, and the avatar's exposure reads 1, which with #1160's fill cap builds a full coat.

Fix:

  • Snap an ease that is within float rounding of its target (RenderVKEaseSnapAtTarget).
  • Classify movers against a reference pose, using #1007's near-unchanged measure with a 2 mm threshold (RenderVKShadowMoverPoseThreshold). The comparison accumulates, so slow movers are still caught.

Related: #1145 (the remaining indoor leak after its PR), #1165.

Rain and snow fall inside closed, static buildings, and an avatar standing indoors gets a snow coat (#1165). `RenderVKWeatherSnowDepthDebug` shows the building flipping between covered (yellow) and mover (magenta) every few seconds. `RenderVKShadowMoverSettleSecs 0` hides it. **Cause:** - Indoors, the camera distance to the big prims around it is clamped to 0.01 m (`vkStampMoveVisibility`, pipeline.cpp). At that distance LL's damped ease never passes its end test (`LLDrawable::updateXform`), because the rounding of the reached rotation stays above it. - The eased pose then flips by single ULPs (0.03-0.06 mm, velocity 0) while the drawable stays on the move list. - The bit-exact pose compare in `refreshObjectPose` / `applyComposedPose` counts that as motion. The ingest marks the prims as dynamic casters (instance bit 21). - Movers are left out of the weather roof map, so the roof disappears for about 2 s at a time. Rain falls through it, and the avatar's exposure reads 1, which with #1160's fill cap builds a full coat. **Fix:** - Snap an ease that is within float rounding of its target (`RenderVKEaseSnapAtTarget`). - Classify movers against a reference pose, using #1007's near-unchanged measure with a 2 mm threshold (`RenderVKShadowMoverPoseThreshold`). The comparison accumulates, so slow movers are still caught. Related: #1145 (the remaining indoor leak after its PR), #1165.
TheSlowly added this to the Slipstream project 2026-10-27 21:03:00 +00:00
Author
Collaborator

Fixed in main by ad6e8c6adf (PR #1167).

Fixed in main by ad6e8c6adf (PR #1167).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#1166
No description provided.