CesiumGS / CesiumGS/cesium

Vector tile geometry is always drawn in the translucent pass, so opaque features do not occlude each other

Open
#13,722 11 comments 0 reactions 1 assignee Claimed by @danielzhong View on GitHub
category - vector data priority - next release type - bug
Dominant language
JavaScript
Stars
15.7k
Forks
3.9k
Avg merge
4d 6h
Merged PRs (30d)
34

Description

### What happened?

Overlapping vector tile features blend through each other instead of occluding, even when the style is fully opaque. This is visible both within a layer and between layers. For example a polygon layer and a polyline layer covering the same area, where the polylines stay visible through the polygons.

`createVectorTileBuffersFromModelComponents` constructs `BufferPointCollection`, `BufferPolylineCollection`, and `BufferPolygonCollection` without passing `blendOption`, so they fall back to the `BlendOption.TRANSLUCENT `default. The renderers map that to `Pass.TRANSLUCENT`, and `OIT.getTranslucentRenderState` forces `depthMask = false`, so no depth is written.

Cesium3DTileStyle alpha never reaches `blendOption`, so color('red', 1.0) and color('red', 0.3) take the same path.

### Reproduction steps

1. Load two vector tilesets covering the same area, one polygons and one polylines.
2. Style both with a fully opaque color, e.g. color('red', 1.0).
3. Orbit the camera. The polylines remain visible through the polygons.
...

### Sandcastle example

_No response_

### Environment

Browser:
CesiumJS Version:
Operating System:

### AI acknowledgment

- [ ] I used AI to generate this issue report.
- [ ] (If the above is checked) I have reviewed the AI-generated content before submitting.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.