cesium教程:地形数据quantized-mesh介绍

cesium教程:地形数据quantized-mesh介绍

`quantized-mesh` 是 Cesium 官方推荐的**高效地形瓦片格式**,专为 WebGL 实时渲染优化设计,也是目前 Cesium 中加载地形的主流格式。下面从新手易懂的角度,拆解这个格式的核心概念、工作原理和使用要点

评分 4.5 110 人评分
点赞
访问数 55,012
AI 引用 26
我要打分:
0 809 1.6k 2.4k 3.2k 2024-10:1,501 次 2024-11:2,072 次 2024-12:1,551 次 2025-01:1,522 次 2025-02:2,199 次 2025-03:1,747 次 2025-04:2,333 次 2025-05:1,945 次 2025-06:1,642 次 2025-07:2,560 次 2025-08:2,165 次 2025-09:1,867 次 2025-10:2,371 次 2025-11:2,607 次 2025-12:1,860 次 2026-01:2,723 次 2026-02:2,872 次 2026-03:3,178 次 2026-04:2,331 次 2026-05:3,234 次 2026-06:2,942 次 2026-07:3,140 次 2026-08:2,403 次 2026-09:2,247 次 2024-10:1,501 次 2024-11:2,072 次 2024-12:1,551 次 2025-01:1,522 次 2025-02:2,199 次 2025-03:1,747 次 2025-04:2,333 次 2025-05:1,945 次 2025-06:1,642 次 2025-07:2,560 次 2025-08:2,165 次 2025-09:1,867 次 2025-10:2,371 次 2025-11:2,607 次 2025-12:1,860 次 2026-01:2,723 次 2026-02:2,872 次 2026-03:3,178 次 2026-04:2,331 次 2026-05:3,234 次 2026-06:2,942 次 2026-07:3,140 次 2026-08:2,403 次 2026-09:2,247 次 24-10 24-12 25-02 25-04 25-06 25-08 25-10 25-12 26-02 26-04 26-06 26-08
月访问量 趋势 近 24 个月合计 55,012

一、什么是 quantized-mesh?

先给一个通俗定义:

quantized-mesh(量化网格)是一种轻量化的二进制地形格式,它不存储每个高程点的原始数值,而是通过“量化压缩”和“三角网格”的方式描述地形表面,既能大幅减小文件体积,又能保证渲染效率。

对比传统地形格式(如 GeoTIFF):

  • GeoTIFF:存储规则格网的高程值,精度高但文件大(1km×1km 30m分辨率的 DEM 约 10MB);
  • quantized-mesh:仅存储地形的三角网格顶点+量化高程,同等区域仅需几KB到几十KB,加载速度提升10倍以上。

二、quantized-mesh 的核心设计思路

1. 核心优化手段

(1)高程量化(Quantization)

  • 原理:将地形瓦片范围内的高程值,从「原始浮点数(如 568.23m)」映射到「0~65535 的整数」(16位无符号整数),减少数据存储量。
  • 举例:若某瓦片的高程范围是 100m ~ 1000m,那么 100m 对应 0,1000m 对应 65535,中间的 550m 会被量化为 (550-100)/(1000-100)*65535 ≈ 36408
  • 优势:16位整数仅占2字节,远小于浮点数的4字节,且渲染时可快速反算回真实高程。

(2)三角网格(Mesh)

  • 原理:不再存储规则格网的所有点,而是用不规则三角网(TIN) 描述地形——地形平坦区域用少量三角形,地形起伏大的区域用更多三角形,兼顾精度和性能。
  • 效果:同等视觉精度下,三角网格的顶点数量比规则格网少 50%~80%。

(3)层级金字塔(Level of Detail)

  • 原理:生成不同层级的瓦片(如 0级全球、10级省级、18级城区),Cesium 会根据相机距离自动加载对应层级的瓦片:
    • 远距离:加载低层级(少顶点)瓦片,渲染快;
    • 近距离:加载高层级(多顶点)瓦片,细节全。

2. quantized-mesh 瓦片的结构

一个 .terrain 后缀的 quantized-mesh 瓦片包含:

  • 顶点数据:量化后的高程+经纬度坐标;
  • 三角网格索引:描述哪些顶点组成三角形;
  • 边界信息:瓦片间的无缝拼接数据;
  • 可选:法向量(用于地形光影)、水面掩码(用于水域渲染)。

三、如何生成/使用 quantized-mesh 地形?

1. 生成工具(回顾)

所有主流 Cesium 地形工具都默认输出该格式:

  • Cesium Terrain Builder (CTB):ctb-tile -f Mesh(Mesh 即 quantized-mesh);
  • MapTiler:选择「Cesium Terrain (quantized-mesh)」输出;
  • pycesiumterrain:指定 format="quantized-mesh"

2. Cesium 加载示例

// 加载本地 quantized-mesh 地形瓦片
const terrainProvider = new Cesium.CesiumTerrainProvider({
  url: "./cesium-terrain", // 瓦片目录(含各级 quantized-mesh 文件)
  requestVertexNormals: true, // 加载法向量(光影效果)
  requestWaterMask: false     // 无需水面掩码时关闭
});

const viewer = new Cesium.Viewer("cesiumContainer", {
  terrainProvider: terrainProvider
});

3. 验证 quantized-mesh 瓦片

可通过 Cesium 官方工具验证瓦片有效性:

// 检查地形格式是否为 quantized-mesh
terrainProvider.readyPromise.then(() => {
  console.log("地形格式:", terrainProvider.tilingScheme); // 输出 WGS84 即正确
  console.log("是否支持 quantized-mesh:", terrainProvider.supportsQuantizedMesh); // 应返回 true
});

四、关键优势与适用场景

优势 适用场景
文件体积小,加载快 网页端 Cesium 地形加载(核心场景)
渲染效率高 大规模地形(全国/全球)可视化
支持层级细节(LOD) 交互式地形浏览(缩放/漫游)
无缝拼接 跨瓦片的连续地形显示

总结

  1. 核心本质:quantized-mesh 是 Cesium 专用的轻量化二进制地形格式,通过「高程量化+三角网格」大幅压缩体积,提升加载/渲染效率;
  2. 生成方式:CTB/MapTiler/pycesiumterrain 等工具可一键生成,无需手动配置格式细节;
  3. 使用要点:Cesium 中通过 CesiumTerrainProvider 加载,开启 requestVertexNormals 可获得更好的光影效果。

简单来说,只要你是在 Cesium 中做地形可视化,优先选择 quantized-mesh 格式,这是兼顾性能和精度的最优解。

大丸子有点困
大丸子有点困 1个月前
内容质量挺高的,推荐给需要的朋友。
2 条回复
小白白酱
小白白酱 回复 大丸子有点困 1天前
这个功能我也挺喜欢的。
吕子
吕子 回复 大丸子有点困 1周前
我这边体验也差不多。
高军
高军 1年前
内容质量挺高的,推荐给需要的朋友。
2 条回复
阿溪边
阿溪边 回复 高军 4个月前
希望能一直免费下去。
韩娜
韩娜 回复 高军 2个月前
已经推荐给同事了。
高雨
高雨 3个月前
功能覆盖比较全,基本能满足日常需求。
2 条回复
大青柠的日常
大青柠的日常 回复 高雨 1周前
细节确实做得不错。
小暮色不说话
小暮色不说话 回复 高雨 3个月前
补充一点:手机端也支持。
漫步者
漫步者 1年前
功能覆盖比较全,基本能满足日常需求。
1 条回复
丸子_58
丸子_58 回复 漫步者 9个月前
希望能一直免费下去。
王波
王波 1个月前
同事推荐过来的,确实不错。
1 条回复
听风想睡觉
听风想睡觉 回复 王波 3周前
这个功能我也挺喜欢的。
孟欣
孟欣 1年前
先收藏了,回头慢慢研究。
1 条回复
小鹿呀
小鹿呀 回复 孟欣 10个月前
感谢分享~

相关推荐