Questions tagged «raytracing»

光线跟踪(与扫描线渲染相对)所特有的问题,光线跟踪是将相机的光线与场景中的对象相交的3D图形技术。



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)向量。 …

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
为什么在OpenCL中禁止递归?
我想使用OpenCL加速渲染光线跟踪图像,但是我注意到Wikipedia页面声称Open CL中禁止递归。这是真的?由于我在光线跟踪时大量使用递归,因此需要大量的重新设计才能从速度上受益。阻止递归的基本限制是什么?有什么办法解决吗?

4
如何射线追踪贝塞尔曲面?
我在math.SE上尝试了这个问题,令人惊讶的是,答案是“方程式太讨厌了,只需将函数提供给数值根查找器即可”。但是,如果您认为自己像我一样是“图形专家”,并且在设计工作中广泛使用Bezier曲线,那么我必须相信可以做得更好。Kajiya有一个已发布的算法,我没有背景知识(Sylvester矩阵),但是有关数学的建议是SE,其结果是t中的18度多项式,您仍然需要解决该问题。数值上。我有另一个想法,结果也差不多。 因此,希望以代数方式解决Ray / Bezier曲面相交问题,从而使其有可能进行明确的编码并具有超快的超光滑度,这是一个总的梦想吗? 除此以外,执行此计算最快的方法是什么?您是否可以“找到摆动”来获得递归细分的严格界限(和目标)?如果必须使用数字寻根器(叹气),它需要什么属性,并且速度是最佳选择吗? 我最初的想法是准备特定的表面,类似于我对三角形的其他数学问题的答案中所述的拉普拉斯展开。但是我也会对通用方法感兴趣。我只是在考虑一组固定的形状,例如犹他州的茶壶。但是我对优化动画帧之间的时间连贯性的方式非常感兴趣。

2
相关样本如何影响Monte Carlo渲染器的行为?
大多数有关蒙特卡洛渲染方法的描述(例如路径跟踪或双向路径跟踪)都假定样本是独立生成的;也就是说,使用标准随机数生成器来生成独立,均匀分布的数字流。 我们知道,在噪声方面,并非独立选择的样本可能会有所帮助。例如,分层采样和低差异序列是相关采样方案的两个示例,它们几乎总是可以改善渲染时间。 但是,在许多情况下,样本相关性的影响并不那么明确。例如,马尔可夫链蒙特卡罗方法(例如Metropolis Light Transport)使用马尔可夫链生成相关样本流。多光方法将一小束光路重用于许多相机路径,从而创建许多相关的阴影连接;甚至光子贴图也可以通过重用许多像素之间的光路来提高效率,同时还可以提高样本相关性(尽管有偏见)。 所有这些渲染方法在某些场景中都可以证明是有益的,但在其他场景中似乎会使情况变得更糟。除了用不同的渲染算法渲染场景并盯着一个外观是否比另一个外观好外,尚不清楚如何量化这些技术引入的错误质量。 所以问题是:样本相关性如何影响Monte Carlo估计量的方差和收敛性?我们能否以数学方式量化哪种样本相关性比其他样本更好?还有其他考虑因素可能会影响样本相关性是有益还是有害(例如,感知错误,动画闪烁)?

2
光线跟踪器的子像素渲染
在字体渲染中,通常使用subpixel渲染。这里的基本思想是将像素分解为RGB分量,然后分别计算每个像素的值。由于每个分量都小于整个像素,因此可以实现更高质量的抗锯齿。 对于光线跟踪器,显然有类似的方法可以做到这一点。您分别在每个子通道上进行重构过滤。 但是,令我感到惊讶的是,我确实找不到这样做的射线追踪器的参考。特别是如果您已经在进行光谱渲染,这似乎是一件显而易见的事情。有一篇我从未听说过的期刊的论文,似乎与之相关。但是总的来说,亚像素渲染似乎并不是一件常事。我的问题:为什么不呢?

3
光线跟踪高度场的当前最新算法是什么?
多年来,已经有许多论文涉及在光线跟踪器中绘制高度场地形的不同技术。一些算法直接(或通过四叉树)对网格进行光线行进;其他人则将地形转换为多边形网格,并使用标准的射线三角形相交测试。这项研究似乎在过去几年中一直在进行,并且很难找到过去十年中撰写的论文,但是内存和计算(CPU和GPU)之间的平衡仍在变化。 如今,哪种算法可在高端台式机上提供最佳性能?或者,如果没有一个答案,那么当前最佳算法的性能特征有何不同?

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

2
如何建立合适的镜头/相机物镜模型进行路径追踪?
在对smallpt进行学习和试验之后,我写了一个小路径跟踪器。 我自己没有写(也不理解)的唯一一件事就是如何计算初始光线并从相机发射它们。我的原则是正确的,但是我正在寻找一些资源来描述如何: 计算射线的初始方向 模拟一个真实的镜头(与针孔相机相反),据说可以实现像景深这样的效果? 不需要最先进的数学和物理学,但如果进行了详尽的解释,则可以。

3
非实时光线追踪
我已经使用了实时光线追踪(和raymarching等),但是在非实时光线追踪上却没有花太多时间-用于更高质量的图像或用于预渲染视频等。 我知道一种在非实时情况下提高图像质量的常用技术是,每个像素仅投射更多光线并取平均结果。 在非实时情况下,还有其他技术可以作为提高图像质量的好方法吗?

4
射线追踪中如何实现反锯齿?
在在线阅读了几篇文章之后,我可以自信地说我对使用射线追踪时抗锯齿的工作原理一无所知。 我所了解的是,单个像素/射线被分成4个子像素和4条射线,而不是1条。 有人可以解释一下这是怎么做的(最好是用代码)吗?

2
将光线转换为对象空间以进行运动模糊
我的raytracer支持各种各样的对象。为了使它们相交,我使用了将光线转换为对象空间的标准技术。在我添加运动模糊之前,这非常有效。 我将运动模糊建模为一系列转换(为简化讨论,确切地说是两个)而不是一个。我的方法是在两个关键帧处进行射线的逆变换,并控制位置/方向。 对于翻译来说,这似乎工作正常,但对于旋转来说,它却失败了。例如,这是两个分别旋转30度和90度的三角形: (4个样本,MN重建,红色样本来自两个关键帧附近) 在拐角处,我希望弯曲的样本位于两个顶点之间的直线上。相反,它们向外凸出。错了 在具有更多有趣转换的更有趣场景中,它会导致多种故障模式。例如,这是螺旋桨旋转45度: (100个样本,法线可见) 某些问题是由于BVH断裂(假定对象的极值位于关键帧处)造成的,但是即使是强行渲染也不正确。 我只能通过执行正向变换(变换对象,而不是光线)来解决所有问题,但这仅适用于可能的对象(实际上只有三角形)。 如何使我的光线跟踪器通过变换光线而不是对象来产生线性近似值来进行变换(尤其是旋转)?

1
光能传递VS光线追踪
基本上,光能传递是允许这样做的原因: 在康奈尔大学关于辐射的教程中,提到: 图像的光线追踪版本仅显示通过直接反射到达观看者的光-因此错过了色彩效果。 但是在Wikipedia中: 从某种意义上说,光能传递是一种全局照明算法,到达表面的照明不仅直接来自光源,而且还来自反射光的其他表面。 ... 当前计算机图形环境中的光能传递方法源自(并且与热传递中的光能传递方法基本相同)。 并且,如果光线跟踪能够: 模拟各种各样的光学效应,例如反射(漫反射)和散射(即,光线从直线路径偏转,例如由于传播介质,粒子或两种介质之间的界面不规则而引起的偏转) 该教程是否没有考虑这些效果,或者是否可以在射线追踪中使用光能传递方法来启用它们? 如果不是,这些光学效果是否不能完全模拟光能传递性,或者光能传递算法在解决漫反射问题上是否更有效?

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.