精华已解决

3D Tiles 场景在浏览器里加载卡顿、内存越来越高,应该从哪里优化?

东营昕睿官方1 回复0 浏览使用问题
东营昕睿官方官方楼主

一个区县范围的倾斜摄影模型转成 3D Tiles 后,用 Cesium 加载,镜头一移动就明显卡顿,浏览时间长了浏览器内存越来越高。

应该先查数据、服务还是前端?有没有一个排查顺序?

1 条回复

楼主采纳的答案

东营昕睿官方官方楼主#2

结论:先用浏览器开发者工具的「网络」面板判断瓶颈在哪一层——请求太多、单个文件太大,还是服务响应慢——再对应处理。三维场景卡顿很少只有一个原因。

数据层

  • 是否分级分块(LOD):没有分级的大场景,一打开就要加载最高精度数据。转换时确认生成了多个层级;
  • 单个瓦片大小:瓦片过大时,即使分了层级,每次加载的数据量依然很高;
  • 纹理:倾斜摄影的体积大头通常是纹理,转换时可以适当压缩;
  • 坐标:位置错了,相机飞过去看到的是空白,常被误认为"加载不出来"。

服务层

  • 瓦片文件放在固态硬盘上,并发读取时差别明显;
  • 服务端开启 gzip 等压缩,tileset.json 与模型文件都能明显变小;
  • 多个系统共用同一套模型时用同一个地址,浏览器缓存才能复用。

前端层(以 Cesium 为例)

  • 适当调大 maximumScreenSpaceError:远处加载的精度降低,帧率明显改善;
  • 限制瓦片缓存上限,避免长时间浏览后内存持续上涨;
  • 不需要的图层及时隐藏或销毁,而不是只设置透明。

依据

3D Tiles 是 OGC 标准(OGC 3D Tiles 1.1,OGC 22-025r4),核心思想就是分层细节(HLOD)+ 空间分块:客户端按屏幕空间误差决定加载哪一层。数据没分层,或者前端误差阈值设得过小,都会让客户端加载远超需要的数据。

更系统的说明见OSGB 转 3D Tiles 的性能优化与3D Tiles 是什么;批量转换工具见星火 3D Tiles 模型转换工具。

参与讨论

举报

举报原因*