2015年10月1日

模板中更新了光照

作者 Wyeth Johnson

现在4.9版本已经推出,我想谈一下在我们模板内容中您可能注意到的几个修改。 我们所做的最大修改是“太阳”(定向光源)的亮度值已经总体调低,我们还向每个模板添加了一个天空光源,来考虑天空中环境光照的影响,以获得更加真实的效果。这些修改并不是随便进行的,而是因为它们是很多复杂问题的根源: “那是什么颜色?”。 正如我们所了解的,答案并不像您想象的那么简单。

当我们谈论渲染时, 我们使用的很多术语的根源都来源于摄影概念。 如果我们想再现一个特定真实世界物体的颜色,或者匹配一张真实世界中的参考照片,那么这有许多因素起作用。 物体的实际亮度或暗度及射到该物体上的光源的亮度是主要因素。 在室外环境中,漫反射光照几乎来自任何方向,所以我们要考虑这个因素。 我们还需要了解我们正在处理的曝光值,在摄影术中,它是指照相机快门的打开长度、捕获照片的胶卷的敏感度。

所有这些变量都意味着知道特定物体的实际亮度并不像“给它拍照及采样颜色值”那么简单。 任何特定值都同所有其他值相关联,“物体颜色”的基准标记远不像一次扣篮那么简单。 我们看一个可视化的示例。 假设我照一张篮球照片。

最左侧图片中的篮球,我让相机尽量计算出适当的曝光度。 中间的图片也是同一个篮球,但是曝光值为-2,最右侧的曝光值为+2,哪一个值是正确的哪? 好吧,事实上就其自身来说所有值都是正确的,但与此同时也可以说全都是错误的。 如果我们知道生成该图片的设置(相机的快门速度、相机镜头光圈大小),我们可以采用反向工程的方式处理该照片,接近我们真正看到颜色的真正值。 问题是我们没有基准线。 比如,拍摄一张篮球的孤立照片,它的颜色比在光照亮度是其二倍的情况下拍摄的正常篮球照片暗两倍,这将导致产生一张在很多方面看上去都“像一个篮球”的照片,但这并没有告知我们关于该物体真实颜色的任何信息。 简单地说,一切都是相对的。 我们所需要的是一个通用的基准线,我们可以将其他对象同该基准线比较来找到它们的实际颜色、亮度及它们的反射率。

插入一个美国摄影师Ansel Adams。 Adams (协同摄影师Fred Archer)开发了一个系统,称为“Zone System(区域系统)”,该系统尝试编纂真实世界对象的反射率值的标准范围,并将它们放到11个类别中,这些类别是非常有用的基准线,可供摄影师根据它们来校正其图像制作。

区域系统是一个深奥的主题,超出了本博文的范围。然而,他们的研究有一个基本的发现对于我们来说是有意义的。 除了人造物体,几乎所有东西从本质上都落入两个大致的、近似值之间: 漆黑煤烟的暗度及雪的亮度。 黑煤烟反映了反射大约3%入射光线给观察者的事物。 新下的雪反映了反射大约95%入射光线的情形。 如果我们假设这些是各种表面的可能反射率的基准线,我们可以获得这些值的平均值(称为“几何平均值”)来给出一个一般材质反射的平均光线量。 该值是18%的反射比,也称为“中灰色”。 这样,我们有了基准线。

18%在摄影术及计算机图形学中已经变成一个标准,用作为校正图形制作的基准线。 基本思想是如果我们拍摄一张正好是18%灰度的漫反射物体(比如一个球体或卡片),并使用它来校正我们的曝光及白均衡,那么通过同那个已知质量相比较,我们便知道场景中所有其它对象的亮度或暗度了。

这个理论很好,但为什么这个新基准意味着我们示例地图的太阳光变得暗淡哪? 好吧,对于这个问题,我们再回到引擎本身。

首先,我们需要自己制作一个虚拟的18%灰度的球体。 它几乎可以满足我们的目的,将让我们非常接近于描画真实世界球体。 这是虚幻引擎中的一张照片。

下一个目标是设置一个场景,该场景允许该球体最亮点的颜色反映资源的实际亮度值,也就是我们所知的18% (或0.18)。 为了完成该处理,我们在一个带光照场景中放置该资源,并让一个定向光源射向他来模拟太阳。 然后我们从光照方向看该资源,调整光源,直到球体上最亮点的实际颜色的测量值读取为0.18, 我们通过使用称为“Visualize HDR(可视化高动态渲染)”的内置引擎功能实现该处理(视口->显示->可视化->HDR(人眼适应)),该功能在进行伽马矫正之前在场景中显示了该对象的实际颜色,找出它的“真正”颜色值,而不仅是屏幕上显示的值。

现在,通过同渲染团队交流,我们知道导致产生“真正的”物体颜色的光照亮度的期望值应该近似等于pi(约等于3.1415),这是离线渲染中很多高端渲染器及虚幻引擎中我们的光照算法及通用值的负面效果。 然而,这假设表面上的任何点仅接收来自一个源头的光照,而现实世界中这是不可能的情形。 您必须将空间中的一个点想象成它正在从它自己能看到的其他东西处接收光照。 我们从天空散射的光线,从地面弹回,再散射穿过到处浮动的小粒子等。要想模拟该效果,我们也向场景中添加了一个天空光源,设置为自然太阳光日光设置。 因为我们通过这种方法添加环境光线强度到场景中,所以我们后续略微降低了太阳光的强度,以抵消它的影响,但仍然获得我们想让初始值接近pi(3.1415)的漫反射光照作为我们总体光照影响。

现在,这里是指出我们没有寻求完美的好时候。 为什么精确的值要比一组很好的、直观的、有用的、让我们接近的值,更令我们感到无趣,这有很多原因,就像在 ¼ 或½接近暴露真相的程度处。 其中一个原因是想更轻松地记住数值,在我们的事例中,太阳亮度为2.75 ,天空光亮度为1。您会发现二者加起来不等于3.14。 一个适当的基准值有很多解释,比如有些相机厂商在内部根据0.18基准反射比矫正它们的曝光,而有些则根据 0.16矫正,有些根据 0.12矫正。 我们的设置代表了所以这些变量的中间折衷值。 同时,太阳光强度可以根据它是阴天还是阳光强烈明亮的午后而产生大范围变化。

简而言之,一切都是相对的。 我们认为这些新值反映了很多不同选择之间的一个很好的折衷,让我们在很多方面更接近真正的事实,允许正在创建照片级真实内容的人们有更好的基准线,以矫正他们的资源。