Questions tagged «microfacet»

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的可逆性的情况下就无法获得完美的节能材料(例如,完美的白色毛玻璃)。

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.