我可以使用WebGL 2着色器有效地构建边界体积层次结构吗?

时间:2017-04-28 07:53:25

标签: algorithm glsl shader gpgpu webgl2

是否可以将this paper中的方法从CUDA调整为WebGL 2着色器并且仍然有效?

  • (1)根据每个图元的质心为其分配Morton代码。
    • 应该很简单,因为在WebGL 2着色器中可以使用按位运算(AND,OR等)。
  • (2)对莫顿码进行排序。
    • 你认为基于Histopyramids的桶/基数排序能做到这一点,最重要的是先行吗?这将取代纸上的平行基数排序。 WebGL 2还有其他适用的排序方法吗? Bitonic merge sort(实现起来似乎更复杂)?
  • (3)构造二进制基数树。
    • 第2步中的Histopyramid桶/基数排序是否也能隐式构建树?还是需要另一步?例如。对于遍历指针(孩子?父母?命中和未命中指针?)。
  • (4)为每个内部节点分配一个边界框。
    • Haven对这个问题的想法太多了。我希望每个级别的一个着色器调用自下而上做得足够快。

以前做过吗?我找不到。任何相关链接表示赞赏。我找到的最接近的是Space Partitioning - Kd-tree - Using WebGL。它在JavaScript中构造树,但它确实显示了如何在WebGL着色器中进行无堆栈树遍历。如果使用着色器构建BVH太困难了,我可能会在JavaScript中构建它,因为KD-tree演示只使用""在我的机器上4096个元素上2ms。虽然扩大规模会很酷。

我的目标是在GPU上进行RTS游戏的碰撞检测,尽可能扩展到尽可能多的单位和射弹。假设所有元素都是球形的。 BVH将在每帧实时重建(在60FPS下离开16ms,不考虑其他任务)。目前我可以想到三个任务:

  • 单位重叠分散。
  • 目标选择(最近邻,作为具有长攻击范围的单位可能有太多匹配)。
  • 弹丸损坏应用。

也许有比使用BVH更聪明的技巧或简化。建议欢迎。

0 个答案:

没有答案