北斗网格性能优化(二):GPU Instancing 与 DrawCommand
GPU Instancing 让一批形状相同的物体共享一份几何,各自只提供变换、颜色这些实例属性,一次提交画完整批。 它减少的是 CPU 反复组织和提交绘制的开销,不减少 GPU 要处理的实例数量。
DrawCommand 是 Cesium 对一次绘制任务的描述,把几何缓冲、Shader、渲染状态和绘制数量组织在一起。给顶点属性配上 instanceDivisor、给命令填上 instanceCount,Instancing 就接进了 Cesium 的渲染流程;不带这些配置时,它描述的也是一次普通绘制。
这套北斗网格的做法是:一份中心在原点的单位立方体,每个格子存一份 64 字节矩阵和 16 字节颜色,按 Tile 分批,每个 Tile 最多两条 DrawCommand —— 一条画面,一条画棱。两条命令共用同一批实例缓冲,只有索引和着色器不同,所以只显示线框时不必重传任何实例数据。
GPU 仍要逐实例处理顶点。所以后面还需要 LOD、视锥剔除和活动预算,一起控制真正参与绘制的格子数量。