Questions tagged «brdf»

2
漫反射和镜面反射的区别是基于物理的?
实时计算机图形中对表面进行着色的经典方法是将(朗伯(Lambertian))扩散项和镜面项组合在一起,最有可能是Phong或Blinn-Phong。 现在,随着基于物理渲染的趋势以及诸如Frostbite,Unreal Engine或Unity 3D之类的引擎中的材质模型的趋势,这些BRDF已经发生了变化。例如(当时相当通用),最新的虚幻引擎仍使用Lambertian漫反射,但结合了Cook-Torrance微面模型进行镜面反射(特别是使用GGX / Trowbridge-Reitz和菲涅耳术语的修正的Slick近似) )。此外,“金属”值用于区分导体和电介质。 对于电介质,漫反射使用材料的反照率进行着色,而镜面反射始终是无色的。对于金属,不使用漫反射,镜面项与材料的反照率相乘。 关于现实世界的物理材料,是否存在漫反射和镜面反射之间的严格分隔,如果存在,分隔分隔是从何而来的?为什么一个是彩色的而另一个却没有呢?为什么导体表现不同?

2
什么是重要性抽样?
什么是重要性抽样?我读到的每篇文章都提到“ PDF”,那又是什么? 据我所知,重要性采样是一种仅对半球比其他区域更重要的区域进行采样的技术。因此,理想情况下,我应该向光源采样光线以减少噪声并提高速度。而且,某些BRDF在掠射角上的计算几乎没有差异,因此使用重要性抽样来避免这种情况是好的吗? 如果要对Cook-Torrance BRDF进行重要性抽样,该怎么做?

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

2
如何正确组合漫反射和镜面反射项?
据我了解,在BRDF中,菲涅耳术语告诉我们光子撞击表面时被反射或折射的可能性。 反射光子将有助于镜面项,而折射光子将有助于散射项。因此,当以基于物理的方式确定光对材料颜色的贡献时,我很想写: // Assuming for example: // diffuse = dot(L, N); // specular = pow(dot(H, N), alpha) * (alpha + 2.0) / 8.0; // fresnel = f0 + (1.0 - f0) * pow(1.0 - dot(E, H), 5.0); color = lightIntensity * Lerp(diffuse * albedo, specular, fresnel); 但是,我认为我从未见过这样写过。我已经看到镜面反射项是根据菲涅耳项进行加权的,而不是弥散项。塞巴斯蒂安·拉加德 SébastienLagarde)在其关于PBR的大量引用文章中甚至指出,使用加权扩散项是不正确的。(1 − F)(1个-F)(1 …

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 …

2
菲涅尔金反射率:红色通道大于1?
最近,我一直在尝试理解光与物质相互作用背后的一些物理原理。内蒂·霍夫曼(Naty Hoffman)在他的《阴影的物理和数学》一书中解释了菲涅耳反射率,并将材料的特征镜面反射色F 0定义为入射角为0°时的菲涅耳反射率。 在幻灯片65上,金的F 0为1.022、0.782、0.344(线性)。霍夫曼补充说: 其红色通道值大于1(在sRGB色域之外) 所有这些对我来说都没有太大意义。大于1的值将意味着在贡献红色通道的波长中,反射的能量多于接收的能量。这真的发生了吗?如果是这样,怎么以及为什么呢? 此外,这是维基百科对某些材料(包括金(Au))的反射曲线。对于约600nm的红色波长,曲线肯定很高,但似乎不会超过100%。
13 physics  brdf 

1
将光泽度转换为粗糙度,反之亦然的公认方法是什么?
大多数现代渲染器使用基于物理的材料,其模型通常会根据粗糙度进行参数化。由于渲染器并非总是如此,因此常规资产通常没有粗糙感。相反,我们将“光泽度”或“镜面反射力”视为常见的材料参数。 我知道两者之间没有精确的转换,但是对于已知镜面反射能力或光泽度的材料,是否有经验法则/近似方法获得粗糙度?
12 specular  brdf  pbr 

1
单散射微面BSDF模型中的能量损失补偿
Walter等人针对粗糙介电表面的单散射基于微面的表面模型(例如原始的Torrance-Sparrow BRDF)或派生模型(例如BSDF)。忽略了微面之间的光的相互反射,这导致能量损失,导致变暗,尤其是在较高的粗糙度值下。 使用炉子测试可以很容易地证明这个问题。下图显示了我使用Smith模型和GGX分布对粗糙度参数从0.2到1.0进行导电微刻面BRDF的实现的行为(此处故意将菲涅耳系数设置为1,以使问题更容易看到): 使用Smith模型和GGX微面分布对粗糙度参数从0.2到1.0的粗糙电介质(IoR 1.51)BSDF进行炉试验: 埃里克·海茨(Eric Heitz)等。Heitz最近在LuxRender论坛上提出了一种多重散射模型,该模型可以通过完全解决光相互作用来解决变暗问题,但是由于其评估程序的随机性,因此存在性能问题。 是否存在已知的补偿方法来恢复单散射模型的能量损失?不一定在物理上是正确的,但至少不会破坏物理上的合理性(亥姆霍兹互惠性和能量守恒),并且理想情况下无需手动调整参数。 在迪士尼BSDF中,有一个称为“光泽”(基本上是基于菲涅耳的光泽叶)的参数化成分,可用于补偿边缘变暗,但是正如他们在Siggraph 2015课程中提到的,这是非常特殊的方法: “ ...这非常近似,对于其他粗糙度值效果不佳...” 在上述意见从埃里克·海茨中的LuxRender论坛还建议使用一些补偿黑客,但不幸的是,不会进入任何细节: 据我所知,您可以使用一些更简单的技巧来改善单个散射模型中的能量节省(例如调整反照率)。但是,如果这样做,则在不破坏BSDF的可逆性的情况下就无法获得完美的节能材料(例如,完美的白色毛玻璃)。

2
在基于物理的BRDF中,应使用哪个矢量来计算菲涅耳系数?
众所周知的菲涅耳系数的Schlick近似公式为: F= F0+ (1 − F0)(1 − c o s (θ ))5F=F0+(1−F0)(1−cos(θ))5F=F_0+(1 - F_0)(1 - cos(\theta))^5 并且等于表面法线向量和视图向量的点积。c o s (θ )cos(θ)cos(\theta) 现在还不清楚我但如果我们应该用实际的表面法线或半矢量^ h。在基于物理的BRDF中应使用哪个?为什么?ñNNHHH 而且,据我所知,菲涅耳系数给出了给定射线被反射或折射的概率。因此,我很难理解为什么我们仍然可以在BRDF中使用该公式,该公式应该近似于整个半球的积分。 这种观察倾向于使我认为这将是,但是对我而言,并不明显的是代表性法线的菲涅耳等于将所有实际法线的菲涅耳积分。HHH
11 brdf  pbr  integral  fresnel 

1
BRDF为什么不是辐射率的比例?
我正在学习BRDF,并想知道为什么将BRDF定义为给定方向的输出辐射与另一个方向的入射辐射之比。为什么不将BRDF定义为辐射比?
10 brdf 

1
假设微面分布函数的原因?
文章《通过粗糙表面折射的微面模型》(以及其他内容)提醒我们有关微面分布函数D的以下假设: 微面密度为正值 总微表面积至少与相应的宏观表面积一样大 在任何方向v上,微表面的(有符号)投影面积与宏观表面的投影面积相同 我可以理解为什么1)分布密度为正值,并凭直觉认为2)表示倾斜的微面的总面积不能小于其投影。 但是,我不确定3)的理由。第三条件是什么意思?

1
GGX几何术语的正确形式
我正在尝试在raytracer中实现微面BRDF,但是遇到了一些问题。我读过的许多论文和文章都将局部几何术语定义为视图和半矢量的函数:G1(v,h)。但是,实现此目标时,我得到以下结果: (最下面一行是粗糙度为1.0-0.0的电介质,最上面一行是粗糙度为1.0-0.0的金属电介质) 边缘周围有一个怪异的高光,nl == 0附近有一个截止。我使用Unity作为参考来检查我的渲染,因此我检查了它们的着色器源,以查看它们的用途,并从中可以看出它们的几何项根本没有被半向量参数化!因此,我尝试了相同的代码,但使用了宏观表面法线而不是半向量,并得到以下结果: 在我未经训练的眼睛看来,这似乎更接近预期的结果。但是我有感觉这是不正确的?我阅读的大多数文章都使用半向量,但不是全部。是否有这种差异的原因? 我将以下代码用作几何术语: float RayTracer::GeometryGGX(const Vector3& v, const Vector3& l, const Vector3& n, const Vector3& h, float a) { return G1GGX(v, h, a) * G1GGX(l, h, a); } float RayTracer::G1GGX(const Vector3& v, const Vector3& h, float a) { float NoV = Util::Clamp01(cml::dot(v, h)); float a2 = …
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.