2

我对调度计算着色器任务以进行分层剔除的最佳方式感兴趣。这适用于任何类型的 BVH,例如 Quad-tree、Oct-tree 或 Kd-tree,它们存储节点的层次结构,其中子节点在空间上包含在其父节点中。

我对如何做到这一点有一些想法,但我对其中任何一个都不是特别满意:

1)为节点总数生成一些作业,然后在其父节点最终不可见的节点上提前返回。但是,这并不能保证子节点在父节点计算其可见性之前不会执行,我不确定如何正确同步。

2) 仅调度根节点,然后如果可见,将其子节点添加到 UAV。只要 UAV 中仍有节点,该着色器就会重复(并扩展到更多线程)。不过,我不确定如何实际执行此操作,或者即使使用 DX11 计算可以做到这一点。

3) 为每一层节点调用调度,该层中的最大节点数(在八叉树中,这将是 1、8、64、512、4096 等)。这似乎很浪费,但它允许可见性通信,以便各个节点可以根据其父节点的可见性(或者如果它们实际上不存在)提前退出。

4) 完全放弃分层剔除,只为每个单独的对象分派一个作业。这对我多年来的剔除似乎有悖常理,但它肯定是最直接和可并行的。

我是否正确地考虑了这一点?任何有关执行此操作的好方法的见解都会非常有帮助!

4

0 回答 0