在线体验版
这是一个基于CesiumJS的3D高斯泼溅渲染器Web应用,支持上传ply文件并将其转换为3dtiles格式,并在3D地图中可视化展示。注意ply文件的坐标系应为ENU坐标系,并且需要提供ENU坐标系参考点的经纬度和海拔高。
在线体验版:gaussian-splatting-3dtiles

开源地址:libTileSplat( 如果有人感兴趣的话可以考虑开源,可以先试试在线体验版**)**
这是一个C++工具库,用于将3D高斯溅射(3DGS)的PLY文件转换为3DTiles,从而支持使用CesiumJS进行渲染。
该库具有以下功能:
- PLY 文件解析:支持 ASCII 和二进制 3DGS PLY 文件
- 完整属性提取:位置、颜色、不透明度、缩放、旋转和球谐系数
- 3DTiles生成:输出符合 3DTiles 规范的 GLB 或 GLTF 格式
- 分层瓦片:支持 LOD的四叉树组织
- 坐标转换:ENU 到 ECEF 的转换
- CesiumJS版本支持:1.125(splat-shader)、1.130.1、1.135、1.139
此代码依赖:
方法说明
将3DGS点云作为输入,进行瓦片化并构建LOD(多层级瓦片),并转换为Cesium兼容的3D Tiles格式。
核心模块包括:1)高斯点云瓦片化;2)瓦片数据清洗;3)构建LOD数据;4)生成3DTiles数据
1. 高斯点云瓦片化
使用nianticlabs/spz提供的spz::loadSplatFromPly读取ply文件,并按照指定的瓦片宽高将点云分割为多个瓦片。
2. 瓦片数据清洗

3. 构建LOD数据
1、KD树搜索最近邻高斯点
2、基于透明度计算权重(w = 1.0f / (1.0f + std::exp(-opacity))
3、邻域内计算加权平均位置 position
4、邻域内计算加权平均颜色(RGBA)
5、邻域内计算加权平均尺度(scale)
6、邻域内计算加权平均旋转(rotation四元数)
4. 生成3DTiles数据
1)生成spz数据
使用nianticlabs/spz提供的spz::saveSpz接口可以将spz::GaussianCloud保存为spz文件
2)生成glb数据
读取spz文件,并按照glTF扩展KHR_gaussian_splatting_compression_spz_2的要求,并使用TinyGLTF提供的数据结构tinygltf::Model构造gltf,参考https://github.com/CesiumGS/glTF/tree/draft-splat-spz-split/extensions/2.0/Khronos/KHR_gaussian_splatting_compression_spz_2
3)构造tileset.json
3DTILES_content_gltf是3D Tiles 1.1 规范中的核心扩展,它的作用是允许瓦片内容直接使用 glTF 2.0 格式文件(.gltf 或 .glb)。并在extensionsRequired和extensionsUsed中,声明使用KHR_gaussian_splatting和KHR_gaussian_splatting_compression_spz_2
{
"asset": {
"version": "1.1"
},
"extensions": {
"3DTILES_content_gltf": {
"extensionsRequired": [
"KHR_gaussian_splatting",
"KHR_gaussian_splatting_compression_spz_2"
],
"extensionsUsed": [
"KHR_gaussian_splatting",
"KHR_gaussian_splatting_compression_spz_2"
]
}
},
"extensionsUsed": [
"3DTILES_content_gltf"
],
"geometricError": 8.0,
"root": {xxx},
}
}
Cesium版本更新记录
Cesium版本更新速度很快,基本上每个月会更新一次,这里会定期记录一些版本更新的要点
https://github.com/CesiumGS/cesium/releases
|-----------------------|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|
| 版本 | 发布时间 | 功能 | 支持的扩展 |
| splat-shader(基于1.125) | 2025-1 | 实验性的实现加载3dgs数据 | KHR_gaussian_splatting |
| 1.130.1 | 2025-6 | 3DGS数据加载工程正式合并到主分支 | KHR_spz_gaussian_splats_compression |
| 1.131 | 2025-7 | 修复了tileset中modelMatrix平移和旋转的更改对GaussianSplatPrimitive的处理。 | KHR_spz_gaussian_splats_compression |
| 1.132 | 2025-8 | 修复了多个高斯泼溅tileset移除时的问题;...... | KHR_spz_gaussian_splats_compression |
| 1.133 | | ...... | KHR_spz_gaussian_splats_compression |
| 1.134 | | ...... | KHR_spz_gaussian_splats_compression |
| 1.135 | 2025-11 | 移除支持KHR_spz_gaussian_splats_compression扩展,改为支持新扩展 | 同时有以下扩展KHR_gaussian_splatting(定义和splat-shader不同)KHR_gaussian_splatting_compression_spz_2 |
| 1.136 | | ...... | 同时有以下扩展KHR_gaussian_splattingKHR_gaussian_splatting_compression_spz_2 |
| ...... | | ...... | ...... |
| 1.139 | 2026-3 | 修复了快照/排序更新中的高斯分布竞争条件;修复了渲染多个高斯散射图元时出现的闪烁问题; | 同时有以下扩展KHR_gaussian_splattingKHR_gaussian_splatting_compression_spz_2 |
| 1.140 | 2026-4 | 通过减少变换工作量、重用聚合缓冲区以及降低相机移动过程中重复排序的扰动,提高了高斯飞溅加载和更新的性能提高了高斯飞溅SPZ解码性能修复了在解码具有高球谐度的大型高斯飞溅SPZ文件时发生的崩溃修复了在渲染具有超过约1600万个飞溅的高斯飞溅tileset时,WebGL发生的崩溃修复了当tileset变换发生变化时,高斯飞溅模型矩阵未正确应用于飞溅位置、旋转和缩放的问题 | 同时有以下扩展KHR_gaussian_splattingKHR_gaussian_splatting_compression_spz_2 |
| | | | |