0

我正在研究的OptixTriangle例子OptiX 7.3。但是,参数的含义optixTrace并不清楚:

optixTrace(
        params.handle,
        ray_origin,
        ray_direction,
        0.0f,                       // --- Min intersection distance (tmin)
        1e16f,                      // --- Max intersection distance (tmax)
        0.0f,                       // --- rayTime -- used for motion blur
        OptixVisibilityMask( 255 ), // --- Specify always visible
        OPTIX_RAY_FLAG_NONE,        // --- OPTIX_RAY_FLAG_DISABLE_ANYHIT
        0,                          // --- SBT offset   -- See SBT discussion
        1,                          // --- SBT stride   -- See SBT discussion
        0,                          // --- missSBTIndex -- See SBT discussion
        p0, p1, p2 );
float3 result;
result.x = int_as_float( p0 );
result.y = int_as_float( p1 );
result.z = int_as_float( p2 );

// Record results in our output raster
params.image[idx.y * params.image_width + idx.x] = make_color( result );

尤其是:

  1. 参数p0和代表什么p1p2
  2. 如何计算命中点的表面法线,以便我可以使用该信息为三角形着色?
4

2 回答 2

3
  1. OptixTriangle变量p0中,p1并将p2最近命中程序计算的颜色带回射线生成程序。OptiX 称之为概念射线有效载荷。这是一种将多达 8 个值附加到一条射线并将它们沿程序管道传递的机制,其中每个被调用的程序都可以读取和写入有效负载值。OptiX 编程指南中有更多关于这方面的内容。

  2. 如果三角形基元被击中(如 中OptixTriangle),您必须从加速结构中获取三角形坐标,并在它们上应用一些矢量代数来计算其中一个顶点的法线。命中点的法线与任何三角形顶点的法线相同:它们都共享同一个平面。无论如何,为了获得命中点坐标,OptiX API 通过原始属性向命中程序提供交点的重心坐标

要将其转换为代码,您将无法更深入地了解 OptiX 7。一个很好的起点是如何开始使用 OptiX 7,因为它实际上会逐步引导您完成OptixTriangle示例。后续访问 GitHub repo Siggraph 2019/2020 OptiX 7/7.3 课程教程代码。浏览这些示例会产生陡峭的学习曲线。其中的第五个例子显示了正常的计算。

于 2021-05-19T08:33:47.913 回答
0

有点劫持这个问题,有人可以解释一下以下三个参数是什么:

0,                          // --- SBT offset   -- See SBT discussion
1,                          // --- SBT stride   -- See SBT discussion
0,                          // --- missSBTIndex -- See SBT discussion
于 2021-06-20T02:05:29.420 回答