我正在尝试在 gpu 中实现截锥剔除。在阅读了一些内容并偶然发现了这个非常有用的存储库:https ://github.com/ellioman/Indirect-Rendering-With-Compute-Shaders之后,我注意到 goto 实现似乎是
- 测试所有对象的 bbox 并用 1 标记相机平截头体中的对象,以及不使用 0 的对象
- 将结果保存在缓冲区中。
- 对此缓冲区执行扫描算法
- 使用作为最终缓冲区中的索引计算的索引来存储选定的矩阵,这些矩阵将在绘制过程中使用。
但我想知道:为什么要使用扫描及其所有复杂性,而不仅仅是将通过 bbox 测试的对象的矩阵直接附加到附加缓冲区中?我的猜测是 appendbuffer 访问速度很慢,但它们是否比在 gpu 上运行扫描慢(如果输入数组大于每组的最大线程数,则可能需要 2 个调度调用)。
谢谢 !
编辑:我是团结一致的,但我认为这个问题并不重要。