我一直在寻找射线追踪,从一个最简单的“我的世界”克隆开始(为初学者制作一些更类似于洞穴游戏的东西)。
我想我应该把体素定义为原语,然后使用普通的体素网格来追踪射线。我不需要测试(看)这里的交叉点,我可以精确地计算它们,用体素追踪射线体素。
然而,我确实有一个RTX卡,它用专用硬件加速射线跟踪,如果我利用它,我可能会得到更快的结果。
据我所收集的,RTX系统的一个组件(或任何射线追踪器,真的)是一个加速结构,它加速了交叉口的测试过程。
您给卡一个八叉树或一个BVH (或类似的东西),它使用它来快速找到最近的命中(或任何其他的命中,就这一点而言)。
如果我没有弄错的话,硬件加速部分就是命中测试。它的力量在于能够在很短的时间内针对一条或多条射线测试多个原语。
考虑到用于射线跟踪的方法,这是我真正不需要的部分,因为我不需要搜索光线相交的原语(我显式地计算它们),我只需要检查它们上的交集在哪里。
我说错了吗?这个架构能被用来加速我正在做的事情吗?如果是这样的话,是因为我误解了它的工作方式,还是我可以调整我的计划,使其对体系结构更加友好,从而使生成的计划比原来的更快?
发布于 2019-07-26 14:36:58
如前所述,RTX图灵体系结构带有有线原始射线交集(更具体地说,是三角形射线交集)。BVH是通过将边界框程序指定为OptiX来生成的,其签名是:
RT_PROGRAM void my_boundingbox_build_program( int, float result[6] )您可以猜到,结果必须包含边界框的最小(3个第一个组件)和最大(3个最后一个组件)边界。即使没有几何学(例如,16x16x16体素块),也可以使用它构建虚拟包围盒。
当您执行rtTrace时,OptiX API将通过BVH检测冲突,BVH是它在边界框程序的帮助下构建的。在这种情况下,它将调用交叉程序,您可以指定该程序并指定哪个签名:
RT_PROGRAM void my_intersection_program( int prim_index )在其中,您将报告16x16x16块体素内的任何可能的交集(显然,您可以忽略prim_index,这仅在使用几何学原语时才有用)。
现在,如果您使用它们的特殊结构RTgeometrytriangles,图灵RTX体系结构将能够使用有线原始交叉口,这是性能提升的地方,您不需要实现自己的交叉程序。
sumarize:由于您没有使用特定的RTgeometrytriangles,所以您将无法从图灵体系结构访问交叉性能提升。
https://computergraphics.stackexchange.com/questions/9025
复制相似问题