《光与硅的艺术》连载——3.2 CG技术知识
Note:《光与硅的艺术》写作于2015年,发表于2017年,书中部分内容可能与当前软硬件实际状况有出入,请注意区分。
本节将介绍一些基本的技术知识,帮助你拓展知识面、强化知识储备,从而更有效地学习软件。这些知识对于了解软件的工作原理十分有用,但可能稍显生涩和枯燥。同时,它们对于单纯地提高表现技能没有太大用处,所以如果你真的不感兴趣,也可以跳过本节。但是我仍然强烈建议你对本部分的知识有所了解,因为它们对今后的学习会很有帮助!
3.2.1 HDR与HDRI
首先来思考一个问题,有一张普通的图片:图片中的天空有一轮烈日,地面上放着一张白纸。请问在显示器上太阳和白纸分别是什么颜色的?
相信大家会毫不犹豫地回答:它们都是白色的。然而,虽然看起来都是一样的白色,但是事实上太阳和白纸一样亮吗?
显然,太阳比白纸亮得多,只是图像(如.jpg格式)不能记录比白色更亮的颜色,同时显示器也没有办法真正显示太阳的亮度。可是,我们仍然有强烈的需求去记录“太阳比白纸亮”这一事实。这时,HDR应运而生了。
HDR是High Dynamic Range的缩写,含义为高动态范围,它是一个技术概念。Dynamic Range(动态范围)也叫反差比,是指一张图像中最亮和最暗处的比值。描述一张图像的动态范围常用EV(Exposure Value)表示,这是一个摄影术语,中文名为“曝光值”。一张图片覆盖的EV越多,则动态范围越大;更大的动态范围代表着更多的亮度与色彩信息,而更多的亮度和色彩信息意味着更出色的图像细节。
HDRI是一种特殊的、可以存储极大动态范围的图像的统称。HDRI是High Dynamic Range Image(高动态范围图像)的缩写;相对地,普通图像被称为LDRI,是Low Dynamic Range Image(低动态范围图像)的缩写。
当直接查看缩略图时,HDRI的动态范围优势通常并不明显;但当把它们用于照明与反射环境时,HDRI与普通图像的差别将会非常巨大。图3-1所示是在Photoshop中直接查看高低动态范围图像的对比效果:左边是原始HDRI,右边是转制过的“低动态范围”HDRI——将它转换成低动态图像(JPG)以后,再转回高动态,从而清除了它的动态范围,本质上,它和一张普通JPG图片没有什么区别。

TIPS 之所以将HDRI转为JPG,而后再转回HDRI,是因为VRED无法将JPG作为环境贴图——开发者已经考虑到了低动态图像无法满足渲染需求的事实。在下文中,有时也将“高动态范围”简称为“高动态”,将“低动态范围”简称为“低动态”。
TIPS 本演示HDRI来自Maground(美观图像,www.Maground.cn),这张优秀的HDRI还将出现在项目教学05中。感谢美观图像为本书提供的素材支持!
虽然在Photoshop中直接查看两张图片时不会看到明显的区别,但是当图像被用于渲染后,其中的差别将会十分明显。图3-2所示是在VRED中使用原始HDRI渲染的效果;图3-3所示是在VRED中使用处理后的HDRI渲染的效果。对比两张效果图,注意观察车身光照、材质质感与地面阴影部分,你会看到极其显著的差异——显然使用原始HDRI渲染的图像品质更好。请注意,除了更换环境贴图外,对这两张图没有做过任何参数修改。
通过这个对比,可以理解我们通常一定要使用HDRI作为Environment(环境)的原因。


TIPS 虽然严格意义上来说HDR是指一种技术,而HDRI是指使用了这种技术的图像,但是在大多数场合中,人们都混用了这两个概念。所以,请不要为此纠结。有许多文件格式都能达到高动态范围的技术要求,其中最常用的两种格式是.hdr与.exr。后者也叫OpenEXR,是ILM(工业光魔)主导开发的高动态格式,在影视后期行业有着广泛的应用。
3.2.2 位深度(Bit Depth)
Bit Depth(位深度)是一个与HDR和图像细节息息相关的概念,也叫Color Depth(颜色深度)。计算机的运算是二进制的,它只认识0和1。当我们要表示颜色的时候,这有什么含义呢?
如果只有一对0和1,0代表黑色,1代表白色,这非常好理解。但是,黑色与白色之间的灰色怎么办?黑白灰之外的红绿蓝又怎么办?
为了表示更多的颜色,我们需要增加0和1的数量。延续上一个例子,以术语来说,一对0和1叫作一个Bit(位),一个位可以用来表示两种状态,如纯黑色和纯白色。假如图像是单色的,那么增加一个位,就多了一对状态来表示黑色和白色中间的颜色,也就是深浅不同的两种灰色。增加的位越多,能描述的灰色就越多;我们能描述的灰色越多,那么颜色的渐变就越平滑,图像的细节也就越丰富——这就是位深度的概念。
计算机使用红绿蓝(RGB)三个通道来混合出各种颜色。将刚才所说的黑白灰概念应用到每一个单独的颜色通道,即红色通道的一个位包含两个状态,用来表示纯黑色与纯红色;在红色通道中加入更多的位,就能描述纯黑色与纯红色之间更多不同明度的红色。同理,在绿色和蓝色通道中添加更多的位,就能描述更加准确的绿色和蓝色。
每个通道内包含的位越多,颜色的渐变就越平滑,图像的细节也就越丰富。
有一个专有的名词被用来描述每个色彩通道所包含的0和1的数量——每通道位深度。我们所说的图像色彩深度,指的都是每通道位深度。如8位图像、16位图像和HDRI中常见的32位图像,这些“×位图像”指的都是在这些文件中,每一个色彩通道包含多少位。
普通的图像,如.jpg格式就是一种典型的8位文件,每个通道可以存储28=256种颜色,这也是拾色器用0~255共256个级别来表示颜色值的原因。
在任何时候都应聚焦于每通道位深度这个概念,否则会造成严重的混淆。有时你会看到48位图像,事实上它是指每通道16位,RGB三个通道总共16+16+16=48位的图像。同理,我们有时会遇到“32位真彩色”这样的说法,它是指RGB三个通道加透明的Alpha通道,总共8+8+8+8=32位的图像,事实上,这是标准的8位图像,和每通道32位图像有着本质的区别。
图3-4所示是3ds Max提供的PNG图像保存选项,这是通常所谓的48位PNG图片。注意,事实上每通道位深度是16位的。

TIPS 8位图像每通道可以表示28=256种颜色,32位图像每通道可以表示232=4294967296种颜色。但是,多数显示器都只能显示8位图像的颜色。(我们将在下一小节讲解这个知识点。)
在学习位深度时,千万不要用数字0和1来理解每个位内部的0和1这个概念,0和1只是用来表述两种状态的代号,即A状态和B状态,与数学中的加减乘除无关。
高动态范围图像几乎都是32位的,但并不是所有32位图像都是高动态范围的。HDRI的判断标准取决于图像的具体动态范围,而非位深度或者文件格式。
3.2.3 色调映射
Tonemapping(色调映射,又叫影调映射),是一道HDRI的“可视化”工序。我们已知HDRI的动态范围远超过显示器的可显示范围,那么我们必然需要一种手段,将HDRI处理成可被显示器良好显示的状态。即使用某种程序处理原始的HDRI亮度数据,根据一定的规则削减其过高的动态范围至低动态,使之可以被显示器正确显示,这就是色调映射的工作。
要实现色调映射的目标有许多方法,有的极其简单,有的十分复杂,下面以Photoshop和VRED为例。
在Photoshop中,执行“图像>调整>HDR色调”菜单命令,打开“HDR色调”对话框,在其中可以选择控制的“方法”,如图3-5所示。另外,该对话框还提供了大量的“预设”模板,以优化色调映射结果,如图3-6所示。


相对于Photoshop中“HDR色调”对话框内容的多样化,VRED要简单许多:在Render Settings(渲染设置)对话框的File Output(文件输出)选项卡中,有专门的Tonemap HDR选项,如图3-7所示。

虽然VRED相对Photoshop而言只提供了一个选项,但是请不要认为VRED功能弱。事实上,VRED的Render Window(渲染窗口)本身就是一个强大的色调映射程序,在VRED进行内部计算时,光照与材质等数据均是高动态范围的。只是当显示到渲染窗口时,高动态图像数据已经被映射到了低动态范围,所以无需再进行复杂的处理。这个Tonemap HDR(色调映射HDR)选项的作用仅是在最终渲染输出时清除过高的动态范围,以免常规图像格式对高动态内容支持不佳。
3.2.4 全景图
许多时候,我们将全景图称为HDRI,事实上这并不严谨。
Panorama(全景图)是指一种视野超级宽广的图像。在CG领域,常见的全景图像往往呈水平360°、垂直180°覆盖整个场景,画幅(长∶宽)呈现出2∶1的特征。由于这与世界地图依照经纬度将球面展开的方式相同,所以又称为Latitude-Longitude(“纬度-经度”)模式。
只要符合视野超级宽广这一特性即可被称为全景图,所以,即使是手机扫描的全景图片也是Panorama,如图3-8所示。

事 实 上 , 我 们 在 渲 染 时 使 用 的 全 景 图 是 一 种 特 殊 图 像——H D RPanorama(HDR全景图,也称全景HDRI)。从名字可知,这是全景图的高动态版,相对普通版本来说,它们具有HDR特性,这就是业界长久以来一直用HDR指代这类图片的原因。
全景HDRI有多种表现形式,除了“纬度-经度”,还有Cubic Map(“立方体”)模式和Light Probe(“光探头”)模式。对于这些不同的表现形式,有一个专用术语叫作Image Projection(“图形投射”)。“纬度-经度”“立方体”和“光探头”都是典型但不同的图形投射方式。
“纬度-经度”模式的HDRI也被称为Spherical Map(“球形映射”),是最常见的类型,如图3-9所示。

TIPS 本书有时会将“全景HDRI”简称为HDRI。
图3-10所示是来自VRED默认的Orange_Seaview环境中的“立方体”HDRI,十字架是它最典型的特征之一。

图3-11所示是一张“光探头”HDRI,是极度扭曲的球形影像,主要用于为某些3D软件提供光照信息,如Mental Ray就有一个专门的Light Probe Shader。

TIPS VRED不依赖于任何文件名特 征 来识 别图像模式,只要HDRI画幅为2∶1,即被当作“纬度-经 度 ”模式。在 教学中,将一直使用这种HDRI作为Environment Map(环境贴图),建议大家在日常工作中也这样做。
3.2.5 基于图像的照明
IBL(Image-Based Lighting,基于图像的照明)是一个重要的概念,它与最终渲染的效果息息相关。
Lighting(照明)是一项重要的工作,它是作品能够被看见且变得好看的主要原因之一。在传统的CG流程中,这一工作主要通过操作Light(灯光)来进行。回想一下你用过的3D软件,无论是3ds Max还是Maya,那些Omni(泛光灯)、Spot Light(聚光灯)和Directional Light(平行光)等无一不令你印象深刻。
IBL是一种特殊的照明方法,它并不直接依赖于灯光的颜色或强度,而是将图像本身视作光源,由图像本身的颜色和亮度信息来确定照明的颜色和强度。
图3-12所示是在3ds Max中用VRay模拟的一个简单的IBL范例。它是一个由普通的VRayLight-Plane(VRay面光源)与一个普通的亮灰色地面构成的场景。

第1步:直接渲染场景,效果如图3-13所示。此时场景被照亮,照明的强度和颜色都由灯光自身的参数(白色,亮度为1)来决定。

第2步:在Photoshop中制作一个色谱渐变,如图3-14所示,然后将此图保存到硬盘中。

第3步:将保存好的色谱图片指定给VRay面光源,作为灯光贴图,参数面板如图3-15所示。这时,一个最简单的IBL案例就完成了。渲染的结果如图3-16所示。此时,照明的颜色改由色谱贴图控制,亮度不变。


第4步:为了说明贴图亮度对照明结果的影响,为色谱加入了一个亮度渐变,如图3-17所示。重新指定贴图并再次查看渲染结果,此时的照明颜色和强度都随贴图的变化而变化,如图3-18所示。


TIPS 注意照明强度的变化。在以上所有测试中,没有修改过任何灯光参数。
看完上面的简单示范,让我们回到正题。如果使用一张全景HDRI包裹住整个场景,并直接使用HDRI的亮度和颜色信息参与IBL(照明计算),就能在很大程度上复制出现实世界的光照。这就是使用HDRI渲染的图像看起来如此真实的原因之一,也是环境的动态范围对渲染结果影响如此巨大的原因之一。
VRED的渲染方式极度依赖IBL,因为这个特性,在VRED中几乎从不使用实体灯光,这与普通三维软件的工作流程有着极大的差异。但是,你会喜欢这个差异的,因为这可以节约很多精力;不过作为补偿,需要为VRED准备十分优质的HDRI,这样才能渲染出漂亮的图像。
3.2.6 环境光阻光
AO(Ambient Occlusion,环境光阻光)也叫环境光遮蔽或环境光吸收,是一种三维软件模拟真实世界的技巧(Trick),在整个计算机图形领域均有广泛应用。如同AO有多个中文名一样,在英文中它也常被称为Occlusion或Occ。
简单来说,AO是一种依据几何体结构来人为增加阴影的方法。它会为距离相近的两个结构增加暗部软阴影,使图像更有体积感和细节感,类似于实体军事模型制作中的“渍洗” 工序。
下面用一个稍显极端的例子来说明AO对图像细节的影响。图3-19是一个典型的写实渲染结果。图3-20是图3-19清除了AO信息的效果,其体积感和接地感均明显减弱。其中,AO信息的单独显示效果如图3-21所示,请注意它的软阴影特征。



VRED提供了两种不同的AO模式,分别对应实时预览与最终输出,这将在具体的教学章节详细讲解。
3.2.7 运动模糊
MB(Motion Blur,运动模糊)是一个十分简单的概念:如果物体运动得太快,那么就会看不清它,而且运动得越快越看不清。
运动模糊对于汽车表现十分重要。在很多时候,我们都需要表现汽车运动的速度感,运动模糊恰恰就是表现速度感的最佳方式。试想一下那些飞驰的车辆吧!
图3-22所示是在城市夜晚中飞驰的迈凯轮P1,注意车轮、背景和车身反射的运动模糊效果。

3.2.8 菲涅耳反射与折射率
Fresnel Reflection(菲涅耳反射)和IOR(Index of Refraction,折射率)是与反射和折射质感表现紧紧相关的概念,它们都是真正的物理概念,其中Fresnel(菲涅耳)是一位伟大的法国物理学家的名字。在CG表现中,我们只需要了解它们对最终效果的影响即可。
1.菲涅耳反射
菲涅耳反射是一种常见的反射特征。简单来说,它是指对象的表面反射强度与观察者的视线角度之间所存在的一种对应关系:如果你的视线与被观察对象的表面垂直,那么所看到的反射结果会比较弱;而如果你的视线与被观察对象的表面接近平行,那么所观察到的反射结果会比较强。
除了镜子和某些金属,一般的反射材料都具有菲涅耳反射特性,如玻璃、水、抛光塑料及车漆。下面使用VRED做了一个简单的模拟效果来说明菲涅耳反射特征。观察图3-23所示的效果,这是一个典型的不透明黑色玻璃球(也可以叫作“钢琴漆”),可以明显地观察到中心区域和边缘区域的反射强度的差别,其材质参数如图3-24所示。


前面的玻璃球效果或许不够明显,为了更好地进行说明,使用HDR Light Studio制作了一张纯白色HDRI,如图3-25所示。然后将VRED环境换成这张纯白色的HDRI,并将视口背景改为黑色,这样就可以更清晰地看见菲涅耳反射效果了,如图3-26所示。请特别注意球体边缘的反射强度变化。


作为对比,接下来是镜面材质的演示。如图3-27所示,镜面球体的各个方向均表现出相同的反射强度。另外,请特别注意蓝框标注区域,这是球体与地面的接触部分,几乎无法分辨出反射图像和原始图像的区别。这时球体的反射强度高达100%,即反射图像与原始图像完全相同——这种完美反射只存在于计算机的世界中,现实世界的高反射物体无论如何都做不到这一点。

TIPS 镜子不具有菲涅耳反射特性的主要原因仍然是金属——镜子背后镀有一层银。
2.折射率
折射率同样是一个重要的物理概念,不过,这里我们只关注它的视觉效果。一般来说,以反射论,折射率越高的对象,从垂直角度观察其表面时,反射强度越高;以折射论,折射率越高的对象,折射产生的变形效果越明显。折射率通常以1.0作为参照,折射率为1.0的对象不产生折射变形。
折射率影响的不仅是折射效果,从理论上来说,它还影响反射效果。不过,三维软件通常没有这么严格,如VRED,其玻璃材质的折射率就只影响折射特性,而不影响反射;而VRay材质的反射和折射参数中,各自有一个独立的折射率控制选项。
下表所示为对象的折射率数值,它们是重要的参考数据。在实际创作中,我们往往依照物体的真实折射率来设定基本参数,然后根据创作需要进行微调。

下面以图3-28所示的纯透明球体对象为例,这是一个折射率为1.0的对象。由于折射率为1.0的对象不产生折射变形,所以它看起来像一个气泡。接下来仅修改Index of Refraction(折射率)参数,如图3-29所示。请注意观察后续图像中的折射变形对比。


将Index of Refraction(折射率)修改为1.5,此时球体对象的效果如图3-30所示,这是一个典型的玻璃球变形效果;将Index of Refraction(折射率)修改为2.5,此时球体对象的效果如图3-31所示,现在的折射率与钻石接近,球体的折射变形变得更加明显了。


3.2.9 视场
FOV(Field of View,视场)是一个术语,是指眼睛所能看到的范围,即视野的大小。
在三维软件中,FOV通常是指摄影机的视野,常用角度来表示,如30°FOV。由于我们的视场是长方形的,所以对于FOV的测量也有两种常用方式:Horizonal(水平)测量和Vertical(垂直)测量,如图3-32所示。VRED默认使用垂直测量得出的FOV角度。

TIPS 还有一些软件对FOV使用Diagonal(对角线)测量方式。大多数软件的FOV测量方式都可手动在几种测量类型间修改。
3.2.10 间接照明与全局照明
Direct Illumination(直接照明)是指光源发出的光直接照亮物体的效果。与之相对的Indirect Illumination(间接照明)是指光源发出的光照射到物体之后,发生反弹,从而照明其他物体的效果。Global Illumination(全局照明)是上述两种照明的混合,既包括灯光直接照明的效果,也包括间接照明的光线反弹效果。
下面用VRay来模拟十分经典的直接照明和全局照明效果。
首先,使用VRay模拟直接照明,如图3-33所示。请注意没有被灯光照射到的物体,其阴影部分呈现出百分之百的黑色。
然后,启动VRay的GI(全局照明)模块,为场景提供间接照明计算,如图3-34所示。注意之前纯黑色的阴影部分,它们此时变亮了。另外,整张图像的细节都变得更加丰富了。


3.2.11 光线追踪
RT(Ray Tracing/Raytracing,光线追踪,也叫光线跟踪,简称光追)是一种重要的算法。在各种渲染器中都能看到它的身影,它最显著的特性在于能够非常正确地计算Reflection(反射)和Refraction(折射)。
“光线追踪”这四个字容易让人产生误会,以为计算机在追踪光源发出的光线,进而根据这些光线来计算显示结果。然而,事实恰恰相反,计算机的计算方向是逆向的——Ray是指从屏幕发出的“射线”,而非光源发出的光线。下面简单介绍光线追踪的计算过程,其原理如图3-35所示。

光线追踪的计算过程
(1) 渲染器从屏幕像素开始,向场景发出Ray(射线)。
(2)射线碰到对象以后,根据入射角度、曲面法线和对象参数等信息发生反弹。
(3)反弹产生的新射线如果碰到光源,就根据光源参数和对象属性等信息计算结果,使对象被照亮。
(4) 如果反弹产生的新射线碰到了其他的对象,则根据它们双方的参数、光源及其他场景特性来计算结果,生成遮挡阴影、相互反射等效果。
(5) 反复执行射线反弹操作,以获得更精确的计算结果。
(6)如果射线什么都没有碰到,那么像素得到的默认返回结果就是黑色。
上述计算过程仅仅是从思路上解释了光线追踪的过程,而实际的光线追踪计算要比上面的说明复杂得多。计算一个完整场景通常需要上亿条射线,这对任何计算机来说都是极大的计算量。因此,光线追踪渲染器通常都需要花费非常多的时间才能得到令人满意的图像。即便如此,光线追踪算法的优点目前仍无可取代,那就是极高的真实度。
TIPS RT除了作为Ray Tracing(光线追踪)的缩写,还可以作为Real Time(实时)的缩写,而Real-Time Ray Tracing(实时光线追踪)的缩写是RTRT。请注意根据场合区分,避免混淆。
真正从光源开始追踪光线以计算结果的是一种GI算法——Photon Mapping(光子图),也叫光子映射。VRED、Mental Ray、VRay都支持这种GI算法。不过它过于老旧,所以现在已经很少被使用了。
另外,普通用户没有必要完全理解光线追踪的知识,只需记住如下结论:效果很好,计算很慢。
3.2.12 推荐阅读
以上都是较为简单的技术概述,如果你有更深入的学习计划,那么建议你学习以下资料。
1.《HDRI手册——高动态范围影像处理技术》(Christian Bloch/李京 人民邮电出版社)
这是一本优秀读物,中英文我各看了一遍,它深入地讲解了大量关于HDR技术的细节,这些细节非常复杂而有趣。如果你对HDR感兴趣,想深入了解它的技术原理、素材采集和软件应用等信息,推荐你阅读它。如果你英文够好,推荐你阅读原版著作The HDRI Handbook: High Dynamic Range Imaging for Photographers and CG Artists(Christian Bloch),相比中文版,它包含了更多的CG知识(因为中文版删除了最后的CG章节)。
此外,关于色调映射、位深度、IBL和Gamma校正的相关知识,都能从这本书中获得更深入的了解。
2.《数字绘图的光照与渲染技术》 (Jeremy Birn/杜静芬 清华大学出版社)
这本书的原版英文名为Digital Lighting and Rendering,也是我强力推荐的一本优秀读物。相对于《HDRI手册——高动态范围影像处理技术》,它具有更广泛的视野和更完整的流程性,适合渲染师用来构建完整的知识体系。建议专职渲染师花一些精力来阅读这本书。
3.Practical Colors And Lights (Gnomon Workshop)
这是Gnomon出品的视频教程,中文名可以翻译为《实用色彩与灯光》。
这是一部与软件技术无关的教程,主要讲解色彩与光照理论。与CG技术相比,它更偏向于纯艺术领域。建议花几个小时观看这部视频,它能帮助你更有效地观察现实世界,以及调整软件中的光照效果。顺便你还能从中知道AO模拟的到底是一种什么样的自然现象。

