Cesium-3D Tiles 跳跃式层级细节


       Cesium的3D Tiles使用分层细节(HLOD)来自适应地加载和优化3D模型。这样做能够使模型在离相机很远的时候能够渲染低分辨率的瓦片,在离相机近的时候渲染高分辨的瓦片。但是,之前展示HLOD模型的方法都是加载每一级别分辨率的瓦片直到所需的分辨率。

       目前3D Tiles最新的渲染方式能够在加载的时候跳跃式加载层次细节,这样就减少了加载时间、网络请求还有内存占用。为了实现这个方式,Cesium在遍历HLOD树时基于视觉启发式只加载了瓦片的一个子集,并利用一些聪明的渲染技巧来精确地混合多级层次细节。通过这样做,Cesium能够合理安排高分辨率瓦片的加载顺序。

Cesium-3D Tiles 跳跃式层级细节

     左边的是最初的加载方式,右边是最新的加载方式。(原文里是动图,但是我粘贴过来的就成静态图片了,想要看效果的看原文吧。。)右边的动图里显示最终的精细细节明显少了很多时间,而且下载的瓦片数量更少。

     通过增加跳跃式层次细节这种优化方式,在加载时间和内存占用上大约减少了30~50%,并且在加载时候能做到更小的性能影响而且当没有瓦片加载时候的稳定状态没有性能差异。用最初的算法加载City Hall这个模型大约用了16s,但是用优化后的算法加载只需要11s。跳跃层次细节下载的数据也从32M下降到了22M。

     下面的图表描绘了数据下载和数据集加载的帧率。最初的算法(左边的图)明显在数据量使用上要高于最新的算法(右边的图)。性能图表则表示了帧速率在很大程度上不受影响。在数据集完成加载后,在图表上可以看出渲染一帧的时间降低到16ms。

最初算法                                                                                                                           优化后

Cesium-3D Tiles 跳跃式层级细节   Cesium-3D Tiles 跳跃式层级细节

Cesium-3D Tiles 跳跃式层级细节  Cesium-3D Tiles 跳跃式层级细节


     为了实现层级跳跃不出现故障和突然意外,Cesium应用了多个渲染技巧来混合多层级细节。下图显示了绘制AGI的headquarters调用绘制方法的数量。
     
     左边的图表描述了用最初算法调用的绘制命令的数量。右边的是优化后调用绘制命令的数量。我们可以观察到,一开始在大部分模型都没有加载的时候,新方式调用的绘制命令要比最初算法调用的数量要多很多。这是因为需要额外的绘制命令来混合层次细节。但是这两种方式最终调用绘制命令的数量差不多相等,这就表明新方式在完成数据集加载后不会有额外的损耗。

最初算法                                                                                                                            优化后

Cesium-3D Tiles 跳跃式层级细节      Cesium-3D Tiles 跳跃式层级细节