Feature
Summary
Cesium for Unity silently fails to render glTF tiles that require EXT_meshopt_compression on every platform except
iOS and WebGL. The tile hierarchy populates and metadata extensions (EXT_structural_metadata, EXT_mesh_features)
are honored, but the geometry buffers are dropped, leaving placeholder GameObjects with CesiumModelMetadata and no
MeshFilter / MeshRenderer children. The same tilesets render fine in CesiumJS.
Reproduction
- Package:
com.cesium.unity 1.23.2 (registry), commit hash AA71215DE0C4 in Library/PackageCache.
- Unity: 6000.x, Windows 11 Editor, HDRP project.
- Steps:
- Add a
Cesium3DTileset under a CesiumGeoreference with origin in Amsterdam.
- Set
Source = From Url, URL = https://data.3dbag.nl/v20250903/cesium3dtiles/lod22/tileset.json.
- Place a properly georeferenced camera over the dataset.
- Expected: Buildings render, as they do in CesiumJS.
- Actual: ~259 tile-placeholder GameObjects are added under the tileset, each with only
Transform +
CesiumModelMetadata. Zero MeshFilter / MeshRenderer are created anywhere in the subtree. No errors are logged;
ComputeLoadProgress() returns 100.
Evidence the cause is missing meshoptimizer on desktop
Inspecting an individual tile GLB header (https://data.3dbag.nl/v20250903/cesium3dtiles/lod22/t/4/384/896.glb):
"extensionsRequired": ["EXT_meshopt_compression", "KHR_mesh_quantization"]
"extensionsUsed": ["EXT_mesh_features", "EXT_meshopt_compression",
"KHR_mesh_quantization", "EXT_structural_metadata"]
All vertex/index buffer views are stored as EXT_meshopt_compression blobs.
Searching the installed package for the meshopt decoder library:
./Plugins/iOS/lib/libmeshoptimizer.a
./Plugins/WebGL/lib/libmeshoptimizer.a
libmeshoptimizer is present only for iOS and WebGL. There is no equivalent binary under Editor/x86_64, Editor/arm64,
Plugins/Standalone, Plugins/Android, or Plugins/WSA. Because EXT_meshopt_compression is declared in
extensionsRequired, cesium-native must skip the geometry on builds where the decoder isn't linked, which matches the
observed behavior exactly (metadata processes, geometry doesn't).
Cross-check with CesiumJS
The same tileset URL renders correctly in CesiumJS 1.133 in a browser, because CesiumJS ships its own meshopt decoder.
So the dataset is conformant; only the Cesium for Unity desktop/Android/WSA path is affected.
Impact
3DBAG (Dutch national 3D buildings) and other open 3D Tiles publishers increasingly emit meshopt-compressed GLBs
because it dramatically reduces transfer size. Users who can't or don't want to round-trip through Cesium Ion's
transcoding pipeline currently have no working option on the Unity Editor or any desktop/Android target — they only
discover this after the tileset appears to "load" (because metadata processes) but renders nothing.
Suggested fix
Link libmeshoptimizer into the cesium-native builds for the remaining platforms (Editor/x86_64, Editor/arm64,
Plugins/Standalone/*, Plugins/Android/*, Plugins/WSA/*) and ship the binaries with the package, the same way the iOS
and WebGL builds already do. The cesium-native side already knows how to call the decoder — it's purely a
build/packaging gap, not a code-change in the loader.
Feature
Summary
Cesium for Unity silently fails to render glTF tiles that require
EXT_meshopt_compressionon every platform exceptiOS and WebGL. The tile hierarchy populates and metadata extensions (
EXT_structural_metadata,EXT_mesh_features)are honored, but the geometry buffers are dropped, leaving placeholder GameObjects with
CesiumModelMetadataand noMeshFilter/MeshRendererchildren. The same tilesets render fine in CesiumJS.Reproduction
com.cesium.unity1.23.2 (registry), commit hashAA71215DE0C4inLibrary/PackageCache.Cesium3DTilesetunder aCesiumGeoreferencewith origin in Amsterdam.Source = From Url, URL =https://data.3dbag.nl/v20250903/cesium3dtiles/lod22/tileset.json.Transform+CesiumModelMetadata. ZeroMeshFilter/MeshRendererare created anywhere in the subtree. No errors are logged;ComputeLoadProgress()returns100.Evidence the cause is missing meshoptimizer on desktop
Inspecting an individual tile GLB header (
https://data.3dbag.nl/v20250903/cesium3dtiles/lod22/t/4/384/896.glb):