实时计算机图形中阴影曲面的经典方法是(兰伯提)漫射项和镜面项的组合,最有可能是Phong或Blinn。

现在,随着以物理为基础的渲染的趋势,以及冻伤、虚幻引擎或统一3D等引擎中的材料模型,这些BRDF已经发生了变化。例如(这是一个相当通用的引擎),最新的“幻影”引擎仍然使用兰伯提漫反射,但结合库克-托伦斯微面模型进行镜面反射(特别是使用GGX/Trowbridge-Reitz和菲涅耳项修正的光滑近似)。此外,“金属”值被用来区分导体和介质。
对于介质,漫射是用材料的反照率来着色的,而镜面总是无色的。对于金属,不使用漫射,镜面项与材料的反照率相乘。
关于真实的物理材料,漫射和镜片之间是否存在严格的分离,如果存在,它是从哪里来的?为什么一种颜色而另一种则不是?为什么导体的行为不同?
发布于 2015-09-17 17:02:42
首先,我强烈建议阅读Naty的Siggraph 介绍性,介绍渲染的物理原理。尽管如此,我会试着回答你的具体问题,借用他的演讲中的图片。
观察单个轻粒子撞击在材料表面的一个点,它可以做两件事:反射,或折射。反射光会从表面反射出去,就像镜子一样。折射光在物质内部反射,并可能在离物质进入的地方有一段距离。最后,每次光与物质的分子相互作用时,它都会失去一些能量。如果它失去足够的能量,我们认为它是完全吸收的。
“光是由电磁波组成的,所以物质的光学性质与其电学性质密切相关。”这就是为什么我们把材料分成金属或非金属。
非金属会同时表现出反射和折射。

金属材料只有反射。所有折射光都被吸收了。

试图模拟光粒子与物质分子的相互作用是非常昂贵的。相反,我们做一些假设和简化。

如果像素大小或阴影面积比入口-出口距离大,则可以假设距离有效为零。为了方便起见,我们把光的相互作用分成两个不同的术语。我们称表面反射项为“镜面”,由折射、吸收、散射和再折射产生的术语我们称之为“漫射”。

然而,这是一个相当大的假设。对于大多数不透明的材料来说,这种假设是可以接受的,并且与现实生活没有太大的不同。然而,对于具有任何透明度的材料,这种假设都失败了。例如牛奶、皮肤、肥皂等。
一种物质所观察到的颜色是没有被吸收的光。这既是反射光的组合,也是存在物质的任何折射光的组合。例如,一种纯绿色的物质会吸收所有不是绿色的光,所以唯一到达我们眼睛的光就是绿光。
因此,艺术家通过赋予材料的衰减函数(即光线如何被材料吸收)来模拟材料的颜色。在我们简化的漫射/镜面模型中,这可以用两种颜色来表示,即漫射色和镜面色。在使用物理材料之前,艺术家会任意选择其中的每一种颜色。然而,这两种颜色应该是相关的,这是显而易见的。这就是反照率颜色的来源。例如,在UE4中,它们计算扩散和镜面颜色如下:
DiffuseColor = AlbedoColor - AlbedoColor * Metallic;
SpecColor = lerp(0.08 * Specular.xxx, AlbedoColor, Metallic)其中非金属为0,金属为1。“光谱”参数控制着一个物体的光谱性(但是对于99%的材料,它通常是一个常数0.5 )
发布于 2015-09-21 04:47:42
几天前我还在想这件事。没有在图形社区中找到任何资源,我实际上走到我大学的物理系,问。
事实证明,有很多谎言,我们图形人相信。
首先,当光线击中一个表面时,菲涅耳方程就适用了。反射/折射光的比例取决于它们。你可能早就知道了。
你可能不知道的是菲涅耳方程因波长而异,因为折射率因波长而异。对于介电介质来说,这种变化相对较小(色散,有人吗?),但对于金属来说却是巨大的(我想这与这些材料的不同的电结构有关)。
因此,菲涅耳反射项随波长的变化而变化,因此优先反射不同的波长。在广谱照明下,这就是导致镜面颜色的原因。但特别是,没有神奇的吸收发生在表面(其他颜色只是折射)。
正如Naty在另一个答案中的对话中所说,这实际上是对超越散射的地下散射的近似。
Naty错了(更准确地说,简化了)。光不会立即被金属吸收。事实上,它会很容易地通过几纳米厚的材料。(例如,对于黄金,需要11.6633nm才能将587.6nm (黄色)光衰减一半。)
吸收,如电介质,是由于啤酒-兰伯特定律.对于金属,吸收系数只是大得多(α=4πκ/λ,其中κ是折射率的虚分量(对于金属为0.5或0.5以上),λ是以米为单位的)。
这种传输(或者更准确地说是它产生的SSS )实际上是金属颜色的很大一部分(尽管金属的外观是由它们的镜面决定的)。
https://computergraphics.stackexchange.com/questions/1513
复制相似问题