CesiumGS / CesiumGS/cesium

Voxel artifacts when clipping past bounds

Open
#11,005 0 comments 0 reactions 0 assignees View on GitHub
category - voxels type - bug
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.

![clipping-bug](https://user-images.githubusercontent.com/915398/210593012-a7b982b1-e76e-4ad2-be38-27e37efba8f0.gif)

[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

![IMG_20221230_161017162-clipped](https://user-images.githubusercontent.com/915398/210595938-63bcaae9-4b11-4f0f-b212-8785a3826496.jpg)

(Black = bounds, magenta = clipping bounds)

Contributor guide

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.