3DGS的GIS可视化:将ply文件切片成3dtiles

在线体验版

这是一个基于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 |
| | | | |

相关推荐
两点王爷2 天前
GIS八股文基础篇:核心知识点与高频面试题全解析
gis
黑马水牛2 天前
Carla仿真系列:17_利用Carla仿真环境跑通3DGS——从采集360张图到高斯泼溅建模
python·ros·colmap·3dgs·新视角合成·carla仿真·三维建图
贾伟康3 天前
【HarmonyOS 7新能力|029】3DGS工程封装:把接入逻辑放进可维护的分层结构
harmonyos·arkts·三维重建·3dgs·harmonyos 7
熊猫钓鱼>_>4 天前
从拍照到建模:HarmonyOS 7 3DGS端侧重建完整实战指南
人工智能·3d·ai·harmonyos·arkts·鸿蒙·3dgs
在下胡三汉4 天前
宣布了3D地理空间数据格式“3D Tiles 2.0”。 支持与 glTF 2.1 集成,并使用 3DGS 实现数据显示,如何在线查看3dtiles
无人机·gltf·3dtiles·osgb
奔跑的呱呱牛4 天前
腾讯地图瓦片接入方案:一个 Bun 代理,让 Mapbox / Leaflet / OpenLayers 通用
gis·openlayers·mapbox·leaflet
GISBox5 天前
数字孪生项目必备:RVT模型转3DTiles格式的高效解决方案
gis·cesium·格式转换·服务发布·gisbox·rvt切片·3dtiles格式
charlee446 天前
《GIS基础原理与技术实践》配套教学课件
gis·开源项目·地理信息系统·教学课件·gis基础原理与技术实践
敲敲敲敲暴你脑袋6 天前
地图瓦片批量改色来啦!
node.js·gis·数据可视化
GIS好难学8 天前
测绘工程有哪些转型方向?
gis