Skip to content
Merged
Show file tree
Hide file tree
Changes from 40 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
17d1ef0
Merge remote-tracking branch 'origin/donmccurdy/feat/bufferprimitivec…
danielzhong Mar 5, 2026
e44bb16
temp save work
danielzhong Mar 5, 2026
b270243
remove GPU lookup
danielzhong Mar 5, 2026
91cca30
Merge remote-tracking branch 'origin/donmccurdy/feat/bufferprimitivec…
danielzhong Mar 5, 2026
4cd999a
fix
danielzhong Mar 5, 2026
5480ab7
lint
danielzhong Mar 5, 2026
19c4052
fix test
danielzhong Mar 6, 2026
a2e44b5
Merge remote-tracking branch 'origin/donmccurdy/feat/bufferprimitivec…
danielzhong Mar 7, 2026
49ffec7
update
danielzhong Mar 9, 2026
3e75da1
Merge branch 'donmccurdy/feat/bufferprimitivecollection-render-gl' in…
danielzhong Mar 9, 2026
73db7b2
Merge branch 'donmccurdy/feat/bufferprimitivecollection-render-gl' in…
danielzhong Mar 9, 2026
ef7b1aa
Merge remote-tracking branch 'origin/donmccurdy/feat/bufferprimitivec…
danielzhong Mar 9, 2026
53acb4d
Merge remote-tracking branch 'origin/donmccurdy/feat/bufferprimitivec…
danielzhong Mar 11, 2026
9b1d15f
Merge branch 'main' into DanielZhong/VectorTiles
danielzhong Mar 11, 2026
631394b
Cesium3DTileset: Support CESIUM_mesh_vector, add samples
donmccurdy Mar 11, 2026
6bb310c
Cesium3DTileset: Regenerate samples
donmccurdy Mar 11, 2026
3fdf7b0
extract line/polygon infos from glb files
danielzhong Mar 12, 2026
eede5c8
allocate one buffer collection per source mesh primitive
danielzhong Mar 12, 2026
85ca4d6
Update sample-us-states.glb tileset for polygon spec proposal
donmccurdy Mar 12, 2026
a029f9e
GltfLoader: Update CESIUM_mesh_vector to latest polygon proposal
donmccurdy Mar 12, 2026
bfb64cf
lint
danielzhong Mar 12, 2026
dab4c87
unit tests
danielzhong Mar 13, 2026
26b3779
Merge branch 'main' into DanielZhong/VectorTiles
danielzhong Mar 13, 2026
05b000a
unit tests
danielzhong Mar 13, 2026
c8dc1a1
Merge branch 'DanielZhong/VectorTiles' of https://github.com/CesiumGS…
danielzhong Mar 13, 2026
57c917b
unit tests
danielzhong Mar 13, 2026
03819b9
Merge branch 'main' into DanielZhong/VectorTiles
danielzhong Mar 17, 2026
1143deb
ES6
danielzhong Mar 17, 2026
97bcc8e
test sample
danielzhong Mar 17, 2026
f82fa55
fix
danielzhong Mar 17, 2026
088decc
update
danielzhong Mar 17, 2026
ce77229
Merge branch 'main' into DanielZhong/VectorTiles
danielzhong Mar 17, 2026
ad37d1f
update
danielzhong Mar 17, 2026
94ec728
scratchPointPosition
danielzhong Mar 17, 2026
7a61273
update
danielzhong Mar 17, 2026
c1f9d7b
update
danielzhong Mar 17, 2026
12163a9
Remove TODO
donmccurdy Mar 19, 2026
a6bf602
Fix extensions in sample tilesets
donmccurdy Mar 19, 2026
a5a07b0
Merge branch 'main' into DanielZhong/VectorTiles
donmccurdy Mar 20, 2026
b976475
fix(BufferPoint): Allow non-indexed points
donmccurdy Mar 20, 2026
5fcd46f
update
danielzhong Mar 20, 2026
373817a
update
danielzhong Mar 20, 2026
b3e30f2
update
danielzhong Mar 20, 2026
49bd15c
update
danielzhong Mar 20, 2026
e07e785
Merge branch 'main' into DanielZhong/VectorTiles
danielzhong Mar 20, 2026
b634e6d
update
danielzhong Mar 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added Apps/SampleData/vector/sample-cities-spain.glb
Binary file not shown.
17 changes: 17 additions & 0 deletions Apps/SampleData/vector/sample-cities-spain.tileset.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"asset": { "version": "1.1" },
"extensionsUsed": [ "3DTILES_content_gltf" ],
"extensions": {
"3DTILES_content_gltf": {
"extensionsRequired": [ "CESIUM_mesh_vector" ],
"extensionsUsed": [ "CESIUM_mesh_vector" ]
}
},
"geometricError": 2000000.0,
"root": {
"boundingVolume": { "region": [ -0.14912553056282754, 0.630603674286057, 0.038089971913258434, 0.7585433514898835, -1000, 1000 ] },
"geometricError": 0.0,
"refine": "REPLACE",
"content": { "uri": "sample-cities-spain.glb" }
}
}
Binary file added Apps/SampleData/vector/sample-us-outline.glb
Binary file not shown.
17 changes: 17 additions & 0 deletions Apps/SampleData/vector/sample-us-outline.tileset.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"asset": { "version": "1.1" },
"extensionsUsed": [ "3DTILES_content_gltf" ],
"extensions": {
"3DTILES_content_gltf": {
"extensionsRequired": [ "CESIUM_mesh_vector" ],
"extensionsUsed": [ "CESIUM_mesh_vector" ]
}
},
"geometricError": 2000000.0,
"root": {
"boundingVolume": { "region": [ -3.1267109291897386, 0.31214887295348465, 3.13772622569785, 1.2453371191800977, -1000, 1000 ] },
"geometricError": 0.0,
"refine": "REPLACE",
"content": { "uri": "sample-us-outline.glb" }
}
}
Binary file added Apps/SampleData/vector/sample-us-states.glb
Binary file not shown.
17 changes: 17 additions & 0 deletions Apps/SampleData/vector/sample-us-states.tileset.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"asset": { "version": "1.1" },
"extensionsUsed": [ "3DTILES_content_gltf" ],
"extensions": {
"3DTILES_content_gltf": {
"extensionsRequired": [ "CESIUM_mesh_vector" ],
"extensionsUsed": [ "CESIUM_mesh_vector" ]
}
},
"geometricError": 2000000.0,
"root": {
"boundingVolume": { "region": [ -3.1267109291897386, 0.31214887295348465, 3.13772622569785, 1.2453371191800977, -1000, 1000 ] },
"geometricError": 0.0,
"refine": "REPLACE",
"content": { "uri": "sample-us-states.glb" }
}
}
9 changes: 9 additions & 0 deletions packages/engine/Source/Scene/Cesium3DTileContentFactory.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import Implicit3DTileContent from "./Implicit3DTileContent.js";
import Model3DTileContent from "./Model/Model3DTileContent.js";
import Tileset3DTileContent from "./Tileset3DTileContent.js";
import Vector3DTileContent from "./Vector3DTileContent.js";
import VectorGltf3DTileContent from "./VectorGltf3DTileContent.js";
import GaussianSplat3DTileContent from "./GaussianSplat3DTileContent.js";
import RuntimeError from "../Core/RuntimeError.js";

Expand Down Expand Up @@ -100,6 +101,10 @@ const Cesium3DTileContentFactory = {
return GaussianSplat3DTileContent.fromGltf(tileset, tile, resource, glb);
}

if (tileset.isGltfExtensionUsed("CESIUM_mesh_vector")) {
return VectorGltf3DTileContent.fromGltf(tileset, tile, resource, glb);
}

return Model3DTileContent.fromGltf(tileset, tile, resource, glb);
},
gltf: function (tileset, tile, resource, json) {
Expand All @@ -109,6 +114,10 @@ const Cesium3DTileContentFactory = {
return GaussianSplat3DTileContent.fromGltf(tileset, tile, resource, json);
}

if (tileset.isGltfExtensionUsed("CESIUM_mesh_vector")) {
return VectorGltf3DTileContent.fromGltf(tileset, tile, resource, json);
}

return Model3DTileContent.fromGltf(tileset, tile, resource, json);
},
geoJson: function (tileset, tile, resource, json) {
Expand Down
1 change: 1 addition & 0 deletions packages/engine/Source/Scene/Cesium3DTileset.js
Original file line number Diff line number Diff line change
Expand Up @@ -3674,6 +3674,7 @@ Cesium3DTileset.supportedExtensions = {
"3DTILES_bounding_volume_S2": true,
"3DTILES_batch_table_hierarchy": true,
"3DTILES_draco_point_compression": true,
CESIUM_mesh_vector: true,
MAXAR_content_geojson: true,
};

Expand Down
51 changes: 51 additions & 0 deletions packages/engine/Source/Scene/GltfLoader.js
Original file line number Diff line number Diff line change
Expand Up @@ -2055,6 +2055,10 @@ function loadPrimitive(loader, gltfPrimitive, hasInstances, frameState) {
}

const extensions = gltfPrimitive.extensions ?? Frozen.EMPTY_OBJECT;
const meshVectorExtension = extensions.CESIUM_mesh_vector;
if (defined(meshVectorExtension)) {
primitive.meshVector = loadMeshVectorExtension(loader, meshVectorExtension);
}

let needsPostProcessing = false;
const outlineExtension = extensions.CESIUM_primitive_outline;
Expand Down Expand Up @@ -2238,6 +2242,48 @@ function loadPrimitiveOutline(loader, outlineExtension) {
return loadAccessor(loader, accessor, useQuaternion);
}

function loadMeshVectorExtension(loader, meshVectorExtension) {
if (!defined(meshVectorExtension)) {
return undefined;
}

const result = {
vector: meshVectorExtension.vector,
count: meshVectorExtension.count,
};

const accessors = loader.gltfJson.accessors;
function loadVectorAccessor(accessorId, name) {
if (!defined(accessorId)) {
return undefined;
}
const accessor = accessors[accessorId];
if (!defined(accessor)) {
throw new RuntimeError(`CESIUM_mesh_vector ${name} accessor not found!`);
}
return loadAccessor(loader, accessor);
}

result.polygonAttributeOffsets = loadVectorAccessor(
meshVectorExtension.polygonAttributeOffsets,
"polygonAttributeOffsets",
);
result.polygonHoleCounts = loadVectorAccessor(
meshVectorExtension.polygonHoleCounts,
"polygonHoleCounts",
);
result.polygonHoleOffsets = loadVectorAccessor(
meshVectorExtension.polygonHoleOffsets,
"polygonHoleOffsets",
);
result.polygonIndicesOffsets = loadVectorAccessor(
meshVectorExtension.polygonIndicesOffsets,
"polygonIndicesOffsets",
);

return result;
}

// For EXT_mesh_features
function loadPrimitiveFeatures(
loader,
Expand Down Expand Up @@ -2512,6 +2558,7 @@ function loadNode(loader, gltfNode, frameState) {
const nodeExtensions = gltfNode.extensions ?? Frozen.EMPTY_OBJECT;
const instancingExtension = nodeExtensions.EXT_mesh_gpu_instancing;
const articulationsExtension = nodeExtensions.AGI_articulations;
const meshVectorExtension = nodeExtensions.CESIUM_mesh_vector;

if (defined(instancingExtension)) {
if (loader._loadForClassification) {
Expand All @@ -2526,6 +2573,10 @@ function loadNode(loader, gltfNode, frameState) {
node.articulationName = articulationsExtension.articulationName;
}

if (defined(meshVectorExtension)) {
node.meshVector = meshVectorExtension;
}

const meshId = gltfNode.mesh;
if (defined(meshId)) {
const mesh = loader.gltfJson.meshes[meshId];
Expand Down
Loading