理想的镜面反射就像是一面完美的镜子。我正在查看SmallPt的代码,并发现其中一个球体具有理想的镜面材质: >
Sphere spheres[] = {//Scene: radius, position, emission, color, material 
   / ...
   Sphere(16.5,Vec(27,16.5,47),       Vec(),Vec(1,1,1)*.999, SPEC),//Mirr
   / ...
 };


其中fVec(.999,.999,.999)的对象颜色。

我很惊讶在这里看到颜色乘法。理想的镜子不是没有颜色吗?我猜因为fVec(.999,.999,.999),实际上它经过的颜色几乎没有变化?关于为什么使用.999而不是1的任何想法?我猜想这是对微小的能量损失进行建模的方法吗?

评论

当前的答案避免了您为什么使用0.999而不是1的问题。除了不产生实际的视觉差异外,我怀疑选择该数字是为了避免可能导致能量获取的浮点误差。谁能更熟悉IEEE 754,对此有何评论?

#1 楼

在此上下文中,“理想”的意思是在光反射矢量的方向上没有发散(即没有粗糙度),但是它们都被认为是来自光学平面的完美反射。但是,即使对于光学平面,仍会在BRDF评估中应用菲涅耳方程,该方程会改变镜面反射并可能取决于波长,这是金属的共同特征。

但是,在smallPt中,没有菲涅耳近似值(例如Schlick近似值),但是表面反射率只是乘以常数项,这是错误的。对于任何真实材料,0.999镜面反射率也很高。下表是垂直入射时各种金属和电介质的镜面反射角的表,以供参考:



#2 楼

金属的镜面反射是浅色与材料的反照率的乘积。仅对于非金属,镜面反射的颜色独立于反照率,但它也相当暗。因此,理想的镜子将是反射率为1的完美光滑的金属表面。因此,您可以说这样的镜子将是白色的,而不是没有颜色。例如用于涂层的银,其反射率(0.972,0.960,0.915)。此颜色代表由银反射的每个频率的光的百分比,因此需要乘以反射光的颜色。

#3 楼

在本文中,“完美的镜子”是指具有0%(纯黑色)漫射色的完美平坦表面。虽然仍然可以具有镜面反射的颜色:例如,圣诞树球的行为就像是一面完美的镜子,但仍可以使反射着色。如果将99%的白色替换为红色,则会得到红色的圣诞球外观。

在SmallPT中,球体有两种颜色:e发光色和c。诀窍在于c具有两种不同的含义,具体取决于材料类型refl


reflDIFF时,c被解释为漫反射颜色。
reflSPEC时,c会被解释为镜面反射颜色。因此,在情况2中,漫反射被忽略了,相当于0%的纯黑色漫反射颜色。

如果您尚未检查它,则此演示文稿是SmallPT的出色代码说明,密集而透彻:smallpt:99行C ++中的全局照明。

评论


$ \ begingroup $
我在考虑镜面色彩的概念在谈论完美镜子时如何有意义?您是说所有入射光都可能在界面处反射并改变颜色(频率)吗?入射角等于反射角吗?什么物理过程会引起颜色变化?抱歉,如果我听起来像个小孩,在得到答案后会问更多问题。
$ \ endgroup $
– PeteUK
16-10-11在15:14

$ \ begingroup $
有点复杂。为了尝试符合此注释中的解释:当光线撞击表面时,有些光线会进入该表面(折射),有些光线不会反射并反射(反射)。它是否进入取决于光的波长(因此@JarkkoL的答案中的图表),这就是使金呈现黄色的原因。
$ \ endgroup $
–朱利安·古托(Julien Guertault)
16-10-11在15:27

$ \ begingroup $
如果不清楚,我指的是铜和铝三重图:它们表示红色,绿色和蓝色波长的反射率。
$ \ endgroup $
–朱利安·古托(Julien Guertault)
16-10-11在15:34

$ \ begingroup $
感谢您的答复。关于撞击不会反弹并折射的表面的光:我们不再在谈论完美的镜面(或理想的镜面表面),对吗?这种折射和重新发射称为镜面高光(即亮点)吗?回到所有光都会反射的理想镜面:入射光和反射光是否有可能具有不同的颜色?
$ \ endgroup $
– PeteUK
16-10-11在18:52

#4 楼

理想的镜子就是那样,理想。它是否具有颜色的问题永远不会出现,它的理想体现了一切。就像被零除一样,它是不确定的。但是,这并不意味着您不能将结果乘以它仍然是相同的结果。

问题是我们已经成功地将强度和颜色的概念混合在一起。我们简单地假设在RGB中颜色是3个独立的强度。这根本不是真的,它是对现实工作方式的简化。确实存在诸如RGB无法解释的高强度深橙色。因此很难说,因为我们将两件独立的事情混为一谈。但是是的,可能由于该代码中未知的原因而去除了一些能量。