首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >菲涅耳效应的正确思考

菲涅耳效应的正确思考
EN

Computer Graphics用户
提问于 2020-04-22 00:34:41
回答 3查看 723关注 0票数 0

我使用Schlick近似来计算菲涅耳效应的数值,我发现了这里

当我试图找到公式的角情形时,当法向和观察方向的夹角为90°和0,02为0°时,得到1的值(我使用IOR 1和1.33)。这意味着,例如,当观察一个球体时,它的边缘会反射几乎所有的光,而它的中心只反射2%的光。

但当我试图在BRDF的microfacet模型中使用它时,他对我来说是没有意义的。

这意味着,当直接从上面看到表面反射率将只有2%,这是不切实际的低。98%的能量会被表面吸收。因此,在3次反弹后,光线的传输将不到光的0,0008%。这将使图像变暗,我将不得不大量地增加它发出的光。

我是不是在想这件事?

我的第二个想法是,它意味着多少光作为一个完美的反射被直接反射,而不被分散到其他方向上。其余的用于漫反射/光滑反射。但我在任何地方都找不到证据。

或者,在处理非透明材料时,我不需要简单地使用菲涅耳。

更新:

这是我现在的密码。

代码语言:javascript
复制
//Position of intersection is world space
float3 hitpoint = ray.origin + ray.direction * ray.distance;

//Direction towards camera
float3 wo = -ray.direction;

//Geometry normal
float3 N = ray.worldNormal;

//Microfacet normal
float3 H = SampleMicrofacetNormal(roughness, &N, &ray);

//New direction of ray
float3 wi;      

// Add light emitted from surface
ray.color += ray.mask * emission;

float F = Fresnel(&H, &wi);

float r1 = new_random(&ray.seed1);

if (r1 <= F) {
    //Specular

    //Reflected direction
    float3 wi = reflect(&H, &wo);    

    float D = D_ggx(roughness, &N, &H);
    float G = G_CookTorrance(roughness, &N, &H, &wo, &wi);

    float weight = fabs(dot(wo, H)) / fabs(dot(N, wo) * dot(N, H));

    //Not using F because it is already taken into a count by 
    //the probability of this IF/ELSE statement
    float reflectance = G * weight;

    ray.mask *= reflectance;

    //Check - new direction cannot point towards surface
    if (dot(wi, N) < 0) ray.mask = (float3)(0.0, 0.0, 0.0);
}
else {
    //Diffuse
    //Ray change color because light to through the material
    ray.mask *= color;

    //New random direction of diffuse ray
    wi = SampleDiffuseCosineWeighted(&N, &ray);

    //Importance sampling weight    
    ray.mask *= dot(wi, N);
}

//Set new direction and position for next tracing
ray.direction = wi;
ray.origin = hitpoint + N * EPSILON;
EN

回答 3

Computer Graphics用户

回答已采纳

发布于 2020-04-23 20:49:20

如果你只执行菲涅耳,你就会发现,你在最初的问题中的想法主要是对介电材料正确的。

然而,不要事先计算菲涅耳,然后随机决定是评估你的镜面成分还是你的漫射成分。作为BRDF的一部分,你必须在评估BRDF的同时积累菲涅耳项,最后才能为漫射部分做1-Facc。如果你是在一个纯粹的随机路径,那么你直接这样做,同时评估你的微面。这被称为“粗糙菲涅尔”,这是所有现代渲染引擎使用的模型。

为了获得更好的菲涅耳公式,得到了完整的菲涅耳公式(金属复菲涅耳公式)。对于更友好的Fresnel,您可以实现“菲涅耳按颜色”(现在我不记得确切的名称了,稍后我会添加它),所以输入数字,您可以输入F0和F1的颜色。这就是最新的Renderman的做法。最后,在菲涅耳和ComplexFresnel之间添加一个“金属度”参数。

例如,一些用于检查的代码(BRDF示例fnc):

票数 1
EN

Computer Graphics用户

发布于 2020-04-22 21:37:51

我将根据我对菲涅耳模型的经验来回答。由于基尔霍夫热辐射定律,在不透明材料中,发射率加反射率加吸收系数在热平衡的各个方向等于1。如果您使用的BRDF模型是基于物理的,那么它应该保持节能。这意味着,对于给定的视角,整个半球的方程积分应该等于1。可能在正常值附近的反射率值很低,但这意味着它的大部分贡献在其他地方。例如,对于接近正常的观看方向,你可以有一个非常低的镜面反射率,但一个更高的漫射成分。这可能是你的模型的情况。

票数 1
EN

Computer Graphics用户

发布于 2020-04-23 00:41:17

模型的大更新和解释

当我清理我的浏览器并关闭大约100个标签时,我发现了这个很棒的网站 (它在那里3天了,所以我已经找到了一个答案……)终于让我明白了一切。

问题根本不在菲涅尔。事实上,在大多数时间里,您使用的IOR并不重要。菲涅尔说有多少光作为镜面砖的一部分被反射。这里重要的是“镜面”这个词。这意味着当光线击中表面时,光线就会反射出来,而不会穿过。其余的光线没有被折射,做这些事情之一:被吸收或折射(就像在玻璃中),或者分散在周围,然后作为漫射光返回到表面。扩散成分在我的路径追踪器中丢失了。我以为镜面BRDF会把漫射光带入计数,但它没有。

在这里,我将总结如何使用微面反射BRDF和漫反射BRDF作为递归路径跟踪器,在这里,一次只能容纳一个像素的一条射线。

  1. 与几何相交
  2. 计算菲涅耳
  3. 在0到1范围内生成随机数
  4. 如果菲涅耳数较小或等于菲涅耳,则根据微面法线分布函数,利用镜面BRDF计算新方向,并进行计算。
  5. 如果数字大于菲涅耳,那么使用简单的余弦加权漫反射或做折射,这取决于你。

使用BRDF的两个组件是很重要的。不幸的是,当您搜索microfacet时,他们通常希望您知道它只是用于镜面部分。

我希望这对一些初学者有帮助,因为对我来说这是一场很大的斗争。

最初的答案--其中的一部分是错误的。有关解释,请参阅上面的更新.

好的,经过一些搜索,我可能找到了一个原因,为什么在微面模型中使用菲涅耳是完全可以的。

我的问题是,当从0°的角度看时,反射率很低,正如我说的,我用IOR 1作为空气,用1.33表示物体。这是个大错误。

当您创建IOR = 1.33的Schlick近似图时,下限为0.02。但这只适用于IOR为1.33的材料,如玻璃。当我看这个页面,它显示不同材料的IOR,你找到一个3D艺术家的部分,你可以看到金属的IOR是3.17。把它插入方程中,你的下限是0.27。那是十倍多!

更有趣的是,当你向下滚动时,你可以找到“反射计算”。这输出反射率的函数(使用非偏振光),我需要.这是相当奇怪的,Schlick近似结果几乎完全相同的功能,在网站上的玻璃,但当我使用IOR = 3.17的铁,它是很遥远的。网站的最小反射率应该是0.7688。

这意味着,我唯一要做的就是为F分量找到一个更精确的函数(停止使用Schick近似),并使用材料的实IOR。简单地说,“墙大部分时间都不是水”

如果我错了请告诉我..。再来一次。

更新:

我找到了这个页面。它解释了你需要知道的关于菲涅耳效应的一切。最重要的是,它同时关心电介质和金属。

以下是一个简化的版本:

每次使用Schlick近似,但不要计算F0 = (n1-n2)/(n1+n2)^2,而是使用自己的值。如果你想要精确的反射,那么看看网站,对于F0,选择0°的反射率。这是一种基线。这对介电(IOR高达1.5)并不重要,因为基态Schlick近似是有效的,所以请自由使用上面的方程。

小心金属材料。菲涅耳效应取决于光的波长,因此R,G的值不同。

票数 1
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/9749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档