横向比较:
Inadequacy of current system design( 现代系统和一些软件的不足)
软件特点:
Output sensitivity
Out-of core data handing
Incremental updates
Scalabity
Visibility-guided rendering
作者对所有节点赋予了可见性权值,该权值影响节点在 (外存-内存-显存)交换中的优先度。
整体架构:
Queuing occlusion queries
GPU向CPU发送命令时具有一定的延迟,所以如果利用深度优先搜索整个队列会造成CPU在等待GPU的命令时,不再向GPU发送命令,GPU无命令
执行而轮空的现象。所以可以利用一个查询队列,改为广度优先搜索。
广度优先遮挡查询:
(1)向GPU发送所有相互需要查询的节点,并把该节点加入到查询队列中。
(2)当要查询的节点发送完毕后,利用API查询该队列首项是否收获查询结果
(2-1)如果有结果:
(2-1-1)可见:则把其子节点继续发送到查询队列
(2-1-2)不可见:无操作
(2-2)没有结果:则按照上一帧可见性进行处理,重复2-1-X,
(3)继续查看队列下一个节点
Frame to frame coherence
利用帧与帧的连续性维护kdTree和进一步优化遮挡查询的对象(只有最后渲染的对象,才能获得真正是否可见的信息)。
假定上一帧可见对象仍然均可见,则不再对其进行遮挡查询,并且优先渲染,每次仅从其不确定的父节点进行重新查询,
查询不可见节点。那么什么时候更新这些假定可见节点的可见信息呢?
LOD
Two-level cache mechanism
两级缓存,此外还有一些系统应该具有的基本设定如内存管理,资源管理。
VRAM management
作者提到优先对显存也进行划分。这是我之前想偷懒而没去思考的地方,看来我的显存管理器还是要改进的。。
终于到最后的Performance了!
16G Data 700,000 objects 350 M polygons 20+FPS(07 Video)