代码之家  ›  专栏  ›  技术社区  ›  I have a Bunny

光线追踪中的高效渲染优化——避免全场景渲染

  •  2
  • I have a Bunny  · 技术社区  · 1 年前

    我目前正在使用Python进行光线跟踪项目,每次渲染整个场景时都会遇到性能问题。我想实现一种更高效的渲染方法,类似于虚幻引擎处理它的方式。

    具体而言,我正在寻求有关实施以下优化的指导:

    1. 截头体消隐:我想避免渲染相机截头体之外的对象。在我的光线跟踪代码中实现截头体剔除的最佳方法是什么?

    2. 动态分辨率缩放:我感兴趣的是根据每个对象与相机的距离以特定的分辨率渲染它。如何实现动态分辨率缩放以优化渲染性能?

    我在上发现了一个射线追踪代码 GitHub ,虽然它提供了坚实的基础,但我正在努力将这些优化技术集成到我现有的代码中。有人能为在光线跟踪环境中实现这些优化提供指导或代码片段吗?

    1 回复  |  直到 1 年前
        1
  •  2
  •   Vertexwahn    1 年前

    至1:

    果实剔除在光线追踪中没有意义。水果剔除对于光栅化是有意义的。

    光栅化是一种自上而下的方法:例如,您想要渲染立方体。在光栅化中,你说的是自上而下的方法——要渲染立方体,我只需要渲染它的面。若要渲染立方体的面(四边形),只需要渲染2个三角形。若要渲染三角形,您必须通过投影矩阵将其投影到顶点,然后进行一些剪裁。在投影和剪裁以渲染二维三角形之后,必须绘制其片段。要绘制片段,您需要一个Z-Buffer和Z-Buffer测试,也许需要一些alpha混合。您可以在光栅化中从顶部(立方体)向下到片段/像素级别进行渲染。当谈到截头体剔除时,你只需说,如果立方体(其8个顶点)不在视锥体内,如果投影单个三角形、剪裁等,我可以跳过整个自上而下的方法。通常,你会对更复杂的对象使用边界框来快速拒绝视锥体外的对象。

    光线追踪是自下而上的。你从像素级别开始——你问一个像素你的颜色贡献来自哪里。从场景中的像素追踪光线。通常,您有一个边界体积层次(BVH)。您会发现光线击中了场景的边界框。你顺着层次往下看,发现光线与一个三角形相交。你会发现三角形属于一个具有特定BRDF的对象(例如立方体)。您对BRDF进行采样并获得颜色贡献。截头体剔除在这里没有意义,因为光线可以在整个场景中反弹(转到反射立方体-反射光线反射截头体之外的对象)。

    我想你的意思不是弗鲁斯图姆·库林,而是BVH。有不同的方法来实现BVH。例如,您可以使用八叉树: https://book.vertexwahn.de/docs/rendering/octree/

    收件人2:

    也来自光栅化领域。光线跟踪的转换是对距离远的对象进行采样,而不是对距离观察者较近的对象进行取样