Sphere spheres[] = {//Scene: radius, position, emission, color, material
/ ...
Sphere(16.5,Vec(27,16.5,47), Vec(),Vec(1,1,1)*.999, SPEC),//Mirr
/ ...
};
其中
f
是Vec(.999,.999,.999)
的对象颜色。我很惊讶在这里看到颜色乘法。理想的镜子不是没有颜色吗?我猜因为
f
是Vec(.999,.999,.999)
,实际上它经过的颜色几乎没有变化?关于为什么使用.999而不是1的任何想法?我猜想这是对微小的能量损失进行建模的方法吗?#1 楼
在此上下文中,“理想”的意思是在光反射矢量的方向上没有发散(即没有粗糙度),但是它们都被认为是来自光学平面的完美反射。但是,即使对于光学平面,仍会在BRDF评估中应用菲涅耳方程,该方程会改变镜面反射并可能取决于波长,这是金属的共同特征。但是,在smallPt中,没有菲涅耳近似值(例如Schlick近似值),但是表面反射率只是乘以常数项,这是错误的。对于任何真实材料,0.999镜面反射率也很高。下表是垂直入射时各种金属和电介质的镜面反射角的表,以供参考:
#2 楼
金属的镜面反射是浅色与材料的反照率的乘积。仅对于非金属,镜面反射的颜色独立于反照率,但它也相当暗。因此,理想的镜子将是反射率为1的完美光滑的金属表面。因此,您可以说这样的镜子将是白色的,而不是没有颜色。例如用于涂层的银,其反射率(0.972,0.960,0.915)。此颜色代表由银反射的每个频率的光的百分比,因此需要乘以反射光的颜色。#3 楼
在本文中,“完美的镜子”是指具有0%(纯黑色)漫射色的完美平坦表面。虽然仍然可以具有镜面反射的颜色:例如,圣诞树球的行为就像是一面完美的镜子,但仍可以使反射着色。如果将99%的白色替换为红色,则会得到红色的圣诞球外观。在SmallPT中,球体有两种颜色:
e
发光色和c
。诀窍在于c
具有两种不同的含义,具体取决于材料类型refl
:当
refl
为DIFF
时,c
被解释为漫反射颜色。当
refl
为SPEC
时,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无法解释的高强度深橙色。因此很难说,因为我们将两件独立的事情混为一谈。但是是的,可能由于该代码中未知的原因而去除了一些能量。
评论
当前的答案避免了您为什么使用0.999而不是1的问题。除了不产生实际的视觉差异外,我怀疑选择该数字是为了避免可能导致能量获取的浮点误差。谁能更熟悉IEEE 754,对此有何评论?