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

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

  1. 果体剔除:我想避免渲染相机的锥体之外的物体.在我的光线跟踪代码中实现截锥剔除的最好方法是什么?

  2. 动态分辨率zoom :我感兴趣的是以特定分辨率渲染每个对象,该分辨率基于对象与相机的距离.如何实现动态分辨率zoom 以优化渲染性能?

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

推荐答案

至1:

Frustum剔除在光线跟踪中没有意义.果核剔除对于光栅化是有意义的.

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

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

我想你指的不是FrustumFlutter 杀,而是BVH.有不同的方法来实现BVH.例如,您可以使用八叉树:https://book.vertexwahn.de/docs/rendering/octree/

至2:

也来自光栅化领域.光线跟踪的转换是对距离远小于距离观察者近的对象进行采样

Python相关问答推荐

Python:MultiIndex Dataframe到类似json的字典列表

将词典写入Excel

使用图片生成PDF Django rest框架

请从Python访问kivy子部件的功能需要帮助

不允许AMBIMA API请求方法

NumPy中的右矩阵划分,还有比NP.linalg.inv()更好的方法吗?

在Python中为变量的缺失值创建虚拟值

Pandas 填充条件是另一列

如何使用symy打印方程?

计算组中唯一值的数量

如何在python polars中停止otherate(),当使用when()表达式时?

在Python中动态计算范围

Pandas:将多级列名改为一级

改进大型数据集的框架性能

解决调用嵌入式函数的XSLT中表达式的语法移位/归约冲突

如何在BeautifulSoup/CSS Select 器中处理regex?

如何找出Pandas 图中的连续空值(NaN)?

通过追加列表以极向聚合

如何使用正则表达式修改toml文件中指定字段中的参数值

以异步方式填充Pandas 数据帧