Voxel artifacts when clipping past bounds
- Dominant language
- JavaScript
- Stars
- 15.7k
- Forks
- 3.9k
- Avg merge
- 4d 6h
- Merged PRs (30d)
- 34
Description
The clipping bounds should never be allowed to exceed the bounds, but that seems to be happening with cylinders and ellipsoids.

[Sandcastle](https://sandcastle.cesium.com/#c=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)
The best place to start looking is here: https://github.com/CesiumGS/cesium/blob/b68be0e5dbb42652ce64a3c54b482f571007b07f/packages/engine/Source/Scene/VoxelCylinderShape.js#L259-L260
This is actually a somewhat hard problem
* This code does not handle the -pi / pi discontinuity properly
* In theory clipping should be able to produce a two-wedge shape like below, but this requires significant shader changes

(Black = bounds, magenta = clipping bounds)
Contributor guide
Research direction
Reproduce the voxel clipping artifacts in the linked Sandcastle example, then inspect packages/engine/Source/Scene/VoxelCylinderShape.js around lines 259-260 and the corresponding ellipsoid handling. Verify behavior at the -pi/pi discontinuity and compare the clipping bounds with the black shape bounds. Done means clipping does not exceed the shape bounds, with any required two-wedge behavior accounted for.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- computer-graphics
- Issue type
- Bug
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100