【问题标题】:VKRay/DXR: What information do you store in your "Payload" structure?VKRay/DXR:你的“有效载荷”结构中存储了哪些信息?
【发布时间】:2020-11-01 15:01:46
【问题描述】:

这将是我下一个光线追踪项目中的一个重要设计决策。

我们知道“有效负载”结构用于将数据从最近命中着色器传递到 raygen 着色器。对于递归 PBRT 系统,基本上,我有 2 个选项:

  1. 用它来存储命中点的射线表面交互信息(无论是 BRDF 还是 BSDF)
  2. 用它来存储下一条要追踪的光线的信息

第一个选项很直观。射线-表面相互作用有一个通用的表示。最近的着色器将该信息返回给 raygen 着色器,该信息在 raygen 着色器中被统一处理以修改集成颜色并生成下一条光线。这种设计的一个问题是 BSDF 表示在 PBRT 系统中可能很大而且很复杂。对于 VKRay/DXR,我们希望 Payload 尽可能小。

第二个选项将光线-表面交互的评估留给最近命中的着色器。每个最近命中着色器都可以有自己的光线-表面交互表示,这可以非常简单(取决于几何表示)。在这种情况下,Payload 存储评估结果,例如要跟踪的下一条射线的信息。一个可能的问题是,最近命中的着色器是执行流程中的分歧部分,它们的效率会低于 raygen 着色器吗?

你更喜欢哪一个,为什么?

【问题讨论】:

    标签: graphics shader vulkan raytracing


    【解决方案1】:

    简短的回答是,这取决于您运行的硬件,值得尝试。我们可以说,方法 1 肯定会占用更少的内存,并且可能具有更好的光线收集和更好的缓存,但由于有效载荷大小的增加,也可能具有更高的带宽。方法一的另一个好处是你不会受到递归深度的限制。

    当然,从设​​计的角度来看,方法 2 更灵活。添加新的材质/对象将涉及添加新的着色器而不修改 raygen 着色器/有效负载定义。

    如果您要使用方法 1,那么您可能还想考虑使用“光线查询”,这将完全绕过对最近命中着色器的需求。您将使用非常庞大的 raygen 着色器有效地结束操作。它可能不太灵活,但应该更快。

    【讨论】:

    • 谢谢!非常有用的答案。由于声誉不足,我无法评价。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 2020-01-11
    • 2012-03-16
    • 2018-06-22
    相关资源
    最近更新 更多