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

问题描述 投票:0回答:1

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

具体来说,我正在寻找有关实施以下优化的指导:

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

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

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

python performance optimization raytracing
1个回答
0
投票

致1:

视锥体剔除在光线追踪中没有意义。视锥体剔除对于光栅化有意义。

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

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

我觉得你说的不是Frustum Culling,而是BVH。实施 BVH 的方法有多种。例如,您可以使用八叉树:https://book.vertexwahn.de/docs/rendering/octree/

致2:

也来自光栅化领域。光线追踪的翻译是对远离观察者的物体进行采样

© www.soinside.com 2019 - 2024. All rights reserved.