Questions tagged «pathtracing»

有关物理精确的全局照明的路径跟踪蒙特卡洛算法或其变体的问题。

2
追踪Cook-Torrance BRDF的路径
-对不起,很长的帖子,但是我更喜欢这样做,因为“ 细节中有Devil。 ” :) 我正在从头开始编写路径跟踪器,它对于完美扩散的(朗伯型)表面效果很好(即,炉测试至少在视觉上表明它是节能的,并且渲染的图像与使用Mitsuba渲染器生成的图像相同)参数)。现在,我正在实现对原始Cook-Torrance微面模型的镜面反射项的支持,以渲染一些金属表面。但是,似乎该BRDF反射的能量多于所接收的能量。请参阅下面的示例图像: 上图:Mitsuba参考(假设是正确的)。图:直接光采样,重要半球采样,最大路径长度= 5、32分层spp,盒式滤波器,表面粗糙度= 0.2,RGB的路径跟踪。 上图:实际渲染的图像:蛮力朴素的路径跟踪,均匀的半球采样,最大路径长度= 5、4096分层spp,盒式滤波器,表面粗糙度= 0.2,RGB。尽管在渲染设置方面存在一些差异,但很明显,渲染的图像不会收敛到之前显示的参考。 我倾向于认为这不是实现问题,而是有关在渲染方程框架内正确使用Cook-Torrance模型的问题。下面,我解释了我如何评估镜面反射BRDF,我想知道我是否做得正确,否则,为什么。 在深入了解细节之前,请注意渲染器非常简单:1)仅实现暴力天真的路径跟踪算法-不进行直接光采样,不进行双向路径跟踪,不进行MLT;2)在交点以上的半球上所有采样都是均匀的-根本没有重要性采样,对于扩散表面也没有采样;3)射线路径的最大最大长度固定为5-无俄罗斯轮盘;4)辐射/反射率是通过RGB元组通知的-没有光谱渲染。 Cook Torrance微面模型 现在,我将尝试构建实现镜面BRDF评估表达式所遵循的路径。一切开始与渲染方程 ,其中p是交点在表面处,w o是观看向量,w i大号Ø(p,w ^Ø)= LË+∫ΩLi(p,wi)fr(wo,wi)cosθdωLo(p,wo)=Le+∫ΩLi(p,wi)fr(wo,wi)cos⁡θdω L_o(\textbf{p}, \mathbf{w_o}) = L_e + \int_{\Omega} L_i(\textbf{p}, \mathbf{w_i}) fr(\mathbf{w_o}, \mathbf{w_i}) \cos \theta d\omega pp\textbf{p}wowo\mathbf{w_o}wiwi\mathbf{w_i}是光矢量,是沿着w o的输出辐射,是沿着和入射在的辐射。LoLoL_owowo\mathbf{w_o}p 瓦特我 COS θ = Ñ ⋅ 瓦特我LiLiL_ipp\textbf{p}wiwi\mathbf{w_i}cosθ=n⋅wicos⁡θ=n⋅wi\cos \theta = \mathbf{n} \cdot \mathbf{w_i} 上面的积分(即渲染方程的反射项)可以使用以下蒙特卡洛估计器 其中是描述采样分布的概率密度函数(PDF)向量。 …

3
俄罗斯轮盘真的是答案吗?
我已经看到,在“路径跟踪”的某些实现中,一种名为“俄罗斯轮盘赌”的方法用于剔除某些路径并在其他路径之间共享它们的作用。 我知道,与其遵循一条路径直到其下降到某个贡献阈值以下,然后放弃它,而是使用一个不同的阈值,并且贡献小于该阈值的路径仅以很小的概率终止。其他路径的贡献增加了相应于共享来自终止路径的损耗能量的量。我不清楚这是否是为了纠正该技术带来的偏差,还是整个技术本身是否需要避免偏差。 俄罗斯轮盘赌给出公正的结果吗? 是否需要俄罗斯轮盘才能获得公正的结果? 也就是说,使用很小的阈值并在路径下降到该阈值以下时立即终止路径会产生更大的偏差还是更少的偏差? 给定任意数量的样本,两种方法都将收敛于无偏的结果图像上吗? 我想了解使用俄罗斯轮盘赌方法的根本原因。速度或质量上有明显差异吗? 我知道能量会在其他射线中重新分配,以保持总能量。但是,如果光线在下降到固定阈值以下时终止,而不是在达到该阈值后具有随机确定的寿命,则是否仍不能进行这种重新分配? 相反,如果最终由于终止光线而不重新分配能量而损失的能量最终仍然丢失了(因为最终将重新分配光线的能量也终止了),这如何改善这种情况?

1
射线追踪中的抗锯齿/过滤
在光线跟踪/路径跟踪中,最简单的抗锯齿图像方法之一是对像素值进行超采样并取平均结果。IE浏览器 而不是通过像素中心拍摄每个样本,而是使样本偏移一定量。 在互联网上搜索时,我发现了两种略有不同的方法: 根据需要生成样本,并使用过滤器权衡结果 PBRT就是一个例子 生成具有等于过滤器形状分布的样本 两个例子是smallpt和Benedikt Bitterli的Tungsten Renderer 产生并称重 基本过程是: 根据需要创建样本(随机,分层,低差异序列等) 使用两个样本(x和y)偏移相机光线 用射线渲染场景 使用过滤器功能和参考像素中心的样本距离计算权重。例如Box过滤器,Tent过滤器,Gaussian过滤器等) 将权重应用于渲染中的颜色 生成过滤器形状 基本前提是使用逆变换采样来创建根据滤波器形状分布的采样。例如,以高斯形状分布的样本的直方图将是: 可以完全完成此操作,也可以将功能合并到离散的pdf / cdf中。smallpt使用帐篷过滤器的确切逆cdf。装箱方法的示例可以在这里找到 问题 每种方法的优缺点是什么?为什么要在另一个上使用一个?我可以想到几件事: 生成和加权似乎是最可靠的,它允许将任何采样方法与任何过滤器进行任意组合。但是,它要求您跟踪ImageBuffer中的权重,然后进行最终确定。 由于您不能使用负pdf,因此“以过滤器形状生成”只能支持正过滤器形状(即,不支持Mitchell,Catmull Rom或Lanczos)。但是,如上所述,由于您无需跟踪任何权重,因此实现起来更容易。 但是,最后,我想您可以将方法2视为方法1的简化,因为它本质上是使用隐式Box Filter权重。

1
在路径跟踪中选择反射或折射
我正在尝试在路径跟踪器中实现折射和传输,但是我不确定如何实现它。首先,一些背景: 当光射到表面上时,其中一部分会反射,一部分会折射: 菲涅耳方程式给出了多少光反射与折射的关系 在递归光线跟踪器中,简单的实现方式是拍摄光线进行反射和折射,然后使用菲涅耳进行加权求和。 [RŤ大号Ø= Fř Ë 小号Ñ ë 升()= 1 - R= - [R ⋅ 大号我,反射+ T⋅ 大号我,折射R=Fresnel()T=1−RLo=R⋅Li,reflection+T⋅Li,refraction\begin{align*} R &= Fresnel()\\ T &= 1 - R\\ L_{\text{o}} &= R \cdot L_{\text{i,reflection}} + T \cdot L_{\text{i,refraction}} \end{align*} 但是,在路径跟踪中,我们仅选择一条路径。这是我的问题: 如何选择以无偏见的方式进行反射或折射 我的第一个猜测是根据菲涅耳随机选择。又名: float p = randf(); float fresnel = Fresnel(); if (p …

3
环境图的重要性抽样
在基于MIS的单向路径跟踪器和类似类型的渲染器中,对环境地图(EM)进行采样的最佳方法是目前已知的最佳方法,并且也是经过生产验证的理想方法?与那些以超复杂且难以理解的实现为代价提供完美采样的解决方案相比,我宁愿选择相对复杂且功能合理的解决方案。 到目前为止我所知道的 有一些简单的EM采样方法。可以以余弦加权的方式采样所需的半球,而忽略了BSDF和EM函数形状。结果,它不适用于动态EM: 为了将采样提高到可用水平,可以对整个球体上的EM亮度进行采样。它相对容易实现,并且效果很好。但是,采样策略仍然忽略了半球可见性信息和余弦因子(以及BSDF),从而导致表面上的高噪声,而这些噪声并未被EM的高强度区域直接照亮: 文件 我找到了一些有关该主题的论文,但尚未阅读。其中任何一个值得在前向单向路径跟踪器中阅读和实现,还是有更好的选择? Agarwal等人(2003年)对环境图进行结构化重要性抽样。 Kartic Subr和Jim Arvo撰写的Steerable Importance Sampling(2007)。他们声称提出了“ ...一种用于环境图的有效分层重要性抽样的算法,该算法在考虑到余弦加权的情况下,在由任意表面的局部方向定义的正半球中生成样本。“论文《重要采样球谐函数》对此发表了评论:“他们创建了环境图的三角表示,并在每个顶点处存储了照明度并乘以前九个球谐基函数中的每一个。这形成了一个可操纵的基础,在该基础上可以将夹紧的余弦有效地旋转到任何方向。” Petrik Clarberg和TomasAkenine-Möller的直接照明实用产品重要性采样(2008)。一种对环境地图光照和表面反射率乘积进行采样的算法。使用基于小波的重要性抽样。 Jarosz,Carr和Jensenn撰写的《重要采样球形谐波》(2009年)。摘要说:“ ...我们提出了第一种实用的重要采样函数,表示为球谐(SH)...” Feng et al。(2015)的基于色调映射的均值漂移环境地图采样。这是很新的东西,我既没有找到它的参考,也没有找到论文本身。

1
具有显式光采样的渐进路径跟踪
我了解了BRDF部分重要性抽样背后的逻辑。但是,当涉及对光源进行显式采样时,一切都会变得混乱。例如,如果我的场景中有一个点光源,并且如果我不断地在每个帧中直接对其进行采样,那么我是否应该将其算作蒙特卡洛积分的另一个采样?也就是说,我从余弦加权分布中获取一个样本,从点光源中获取另一个样本。是总共两个样本还是一个样本?另外,我应该将直接采样的辐射光除以任何项吗?

1
路径追踪器-多层材料和重要性采样
我目前正在尝试实现Monte Carlo路径跟踪器。我已经进行了一些研究,似乎一种常见的材料处理方法是使用分层模型。像这样: 当光入射到表面时,菲涅尔告诉我们第一层反射了多少光,第二层反射了多少,依此类推。 所以我做了类似但更简单的事情:只有一层高光和一层漫反射。尚无透射率。到目前为止,到目前为止,我对漫反射使用了一个简单的余弦加权brdf,对我的镜面反射使用了Cook-Torrance微面模型。 现在是最困难的部分:一旦射线击中表面该怎么办?通常,我会选择与表面材质相对应的brdf,对入射光方向进行采样,评估brdf,然后除以正确的概率分布函数。 但是在这里,表面撞击实际上对应于多种材料。天真的处理方法是为每个图层命中采样一次。但这显然是造成巨大性能损失的根源,这使我的道路实际上变成了树。 有更好的解决方案吗?

2
为什么在路径跟踪中使用帐篷过滤器?
C路径跟踪器Smallpt的99行会为其打算渲染的每个像素渲染一个2x2的子像素网格,然后执行一个帐篷过滤器将它们合并。 有一个有趣的演示解释代码在这里,它提到了帐篷过滤器,但没有解释为什么它的存在。 谁能解释为什么在这种情况下,帐篷过滤器比盒子模糊(仅对样本取平均值)更合适? 使用比帐篷过滤器更好的东西(例如双三次Hermite插值)会更高质量吗?

2
散射区光的总发射功率
我正在读《基于物理的渲染》一书(Pharr,Humphreys)。在“光”一章中,他们讨论了近似估算各种光的总发射功率。例如,点光源的总功率为intensity * 4 * pi。在此4pi表示整个球体的立体角。这对我来说很有意义,因为强度*立体角=功率(或辐射通量)。您也可以按单位查看。强度为W / sr,立体角为sr,因此W/sr * sr = W功率以瓦特为单位。它签出。 但是,我不了解的相应计算DiffuseAreaLight。根据我对这本书的理解,他们计算出散射区域光发出的总功率为emitted radiance * area * pi。因为辐射的单位是W /(sr * m ^ 2),所以乘以面积就得到W / sr。这使我认为pi因子代表立体角-但是为什么只有1pi?我会猜到2pi,因为区域光的每个点都会在一个完整的半球内辐射(相当于2pi球面度)。 您可以在此处找到本书中提到的实际代码。 我有什么误会?为什么total emitted power = emitted radiance * area * pi对于漫射区域灯有意义?

1
完全蒙特卡洛体积散射
我想将完整的蒙特卡罗体积散射添加到我的路径追踪器中,但是我在研究如何做到这一点上很难。让我解释一下我想做的事情: 射线进入材料,然后应用BTDF,然后经过一定距离,发生体积散射事件,此后(在各向同性的情况下),射线沿散射方向向任意方向散射。球。重复此过程,直到射线与另一个BTDF一起离开材料为止。 我的问题如下: 如何选择分散事件之间的距离?直觉告诉我应该有某种散布pdf,它给出一定距离后散布的可能性吗? 这是正确的吗? pdf是各向同性材料的线性函数吗? 此功能是否有名称或我可以使用Google的名称? Beer-Lambert还会在分散事件之间应用吗? 我不会。由于Beer-Lambert是实际散射计算的简化。 再说一次,也许Beer-Lambert是一个微观尺度的计算,而路径追踪则是一个宏观尺度。 相当于BSDF的体积是多少?看起来我可以使用诸如Henyey-Greenstein之类的相位函数来确定新方向,但是如何使用衰减呢? 最后,对于蒙特卡洛体积散射,有哪些更好的Google短语? 搜索体积散射或SSS,最终会给出有关完整蒙特卡罗模拟(偶极子,散射,入散射,出散射,扩散等)的简化的论文,方法和博客文章。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.