1、背景
在许多虚拟地理空间应用的实现中,Cesium是一个很有用的WebGL图形库。学习如何解释CSS文件保证它准确呈现3D场景是一个重要的知识,因此本文提供了Cesium源代码的指导和说明。
- Cesium文件和组件
- 初始化WebGL
- 渲染流水线
- 资源优化
- 最佳实践
2、Cesium文件和组件
Cesium是一个开源的跨平台的3D地图库,允许您以不同的方式显示可视化内容。它有一些文件和组件,用来帮助构建和显示数据和地理信息。
Cesium支持各种文件格式,常见格式有KML、COLLADA、TMS和GeoJSON,它也支持跨平台服务如ArcGIS MapServer、OGC WMS、Geoserver等。
Cesium有一系列可扩展的组件,如 3D 地形和图像图,3D 城市模型,时间控制,导航功能,3D 覆盖物,三维海洋环境等。它也支持用户附加任何 Javascript 代码作为组件,以组合多个组件形成一个完整的 Cesium 应用。
3、初始化Cesium中的WebGL
让我们看看如何在Cesium中初始化 WebGL:
-
为了使用Cesium,首先需要引入
Cesium.js
文件:<script src="Cesium.js"></script>
-
然后,必须提供一个网页上用于渲染3D内容的 HTML 标签:
<div id="cesiumContainer"></div>
-
最后,可以在
cesiumContainer
中创建 Cesium 实例来创建 WebGL:var viewer = new Cesium.Viewer('cesiumContainer');
这就完成了 WebGL 的初始化。
4、流水线渲染
Cesium中的流水线渲染是一种在 3D 场景中构建具有逼真效果的低延迟图形数据处理系统。它使用从输入到输出的各种处理环节 (stages),从而可以根据硬件条件提供最佳的可用性和呈现。
Cesium 的流水线渲染使用了大量的顶点和片元处理 (vertex and fragment shaders)、几何形状和裁剪的语义,模板测试 (stencil test)、不同的材料属性 (material attributes)、光学和动画效果 (optical and animation effects) 等处理步骤。
它使用一些常用的途径来极大地提高性能,如着色缓冲 (color-buffer)、深度缓冲 (depth-buffer)、模板缓冲 (stencil-buffer)、纹理缓冲 (texture-buffer) 和显卡缓冲 (GPU-buffer)。
此外,Cesium 还包括一个实时着色器,可以快速地渲染出包含复杂可见物体的实时场景
5、资源优化
-
清理3D模型:减少不必要的复杂度,比如降低贴图采样次数,删除冗余面片等。
-
调低Cesium插件帧率:将动画、天气场景改为快速模式或者关闭它们,避免多余的CPU消耗。
-
多灵活使用dem:dem在计算tiles对低高度区域产生generateTerrainHighness这种影响之前,可以先将更加高的dem解析并且存入geojson中。
-
缩小载入范围:可以在载入cesium地图时,采用LOD(Level of Detail)方法只载入当前显示级别的tile。
6、最佳实践
-
优先使用向量地图进行操作,而不是使用栅格数据:如果操作包括绘制、编辑和查询,那么向量地图就会比栅格地图更好。向量地图更便于编辑和绘制,并且可以送至表达式,以处理查询操作。
-
避免使用 geographic 和 Cartesian 这两个坐标系:使用 WGS84 的坐标系进行绘制,然后将其转换为模型的局部坐标系,这将帮助减少数据映射和操作时精度损失。
-
优先使用静态原生数据格式:GLTF 格式尤其有益于构建高性能地图,因为它不需要额外的编码/解码步骤。
-
使用 AO-优化的材质:将 ambiet Occlusion 高级功能启用在 Obj 或 FBX 对象上将提升地图对象的细节水平。
-
使用 CVT-Triangulations :CVT分割技术可以在保留细节的情况下细分图块,从而提升地图的性能。
-
使用 Shader 着色器:HLSL Shader 着色器可以实现一系列的功能,并大大提升 Cesium 集成功能的性能。