这一讲我们用一个范例来讲讲使用Arnold渲染的时的基本布光原则及操作规范。
准备场景
我们的使用的场景是一个破败的办公室场景,这个场景模型本身其实有很多值得吐槽的地方,但本文只是那它过来做白模打光测试,就不管那么多了。
场景模型下载链接:https://pan.baidu.com/s/11hx3R-EqXTv4C7xobOe3Gg
提取码:wdtd
首先要做的,是确定场景比例。
我假定这个房间净空高3.5米,所以创建了一个350×350×350的方盒子来做参考。
在场景中添加渲染用摄影机,调整到合适的机位,锁定移动和旋转属性以避免不小心改变了机位。
请大家改掉直接使用persp摄影机当渲染摄影机的习惯!
如果预想的机位其实是在墙壁的另一边,可以提高摄影机的Near Clip Plane
值将遮挡的墙壁给“裁掉”。
如果因为场景的尺寸很大导致在摄影机中出现这种显示错误的问题,也可以通过适当增加摄影机的
Near Clip Plane
值来解决。
给整个场景添加一个aiStandardSurface
材质,设置其为灰色纯漫反射材质(无高光、无透明),然后删除掉场景中的多余材质节点。
最典型最简单的白天室内照明
典型的白天室内照明由两大光源:天光(用以提供整体全局光照亮度)和阳光(用以塑造阴影形状,产生明暗对比),那么在Arnold中就是一个Skydome Light
加一个Directional Light
。
因为使用Skydome Light
通过窗口照亮室内场景,所以需要为每个窗口创建一个Light Portal
。
这样照明质量会明显好一些,同时还不会增加渲染时间。
因为是最早的白模打光测试,所以我们保持场景的简单统一,先不使用HDRI天空贴图,直接用纯白色天光和纯白色阳光来建立最基本的亮度分布。
我们可以使用Light Editor(灯光编辑器)来快速“关闭”或“单独显示”某个灯光的照明效果。每个灯光单独调节有利于我们准确判断各个灯光的实际效果,避免互相影响。
在Light Editor的面板中我们可以直接调节灯光的一些关键参数,比如颜色、亮度、曝光度、取样值等等。
由于我们现在这个场景主要是被间接光照照亮的,所以Diffuse Ray Depth
就很重要了。增加Diffuse Ray Depth
对于渲染时间的影响还是很大的,要注意在渲染效果及渲染效率两边的平衡。
场景照明亮度分布调整好之后,再针对噪点问题进行测试。增加Sample的顺序一般为:
- 增加天光、面积光、物体光之类会产生模糊阴影的灯光Sample,一般不超过4
- 增加
Camera (AA)
采样值到2或者3,然后再逐步增加Diffuse Sample,消除间接漫反射带来的阴影(建议在diffuse_indirect
分层通道里查看间接漫反射照明效果)
这张图我最后的参数是4/6/0/0/0
,也就是Camera (AA)
= 4,Diffuse
= 6,并没有完全消除干净间接漫反射噪点,但整体效果是满意的。
关闭IPR渲染的“渐进式渲染(Progressive Rendering)”可以稍稍加快渲染速度,或者将所有CPU进程都分配给渲染器,但这样会导致我们在渲染过程中基本上不能操作Maya了。
添加光色
我们可以将Skydome Light
上贴一张HDRI天空图,然后修改直接光照的光色来匹配一个不一样的照明环境。
还可以将地板材质换成一个略有反光的材质。
因为场景中有一个疑似“镜子”的物体,所以我决定做一个镜面反射的效果。
将这个物体的“镜面”提取出来成为一个独立的几何体,单独指定一个aiStandardSurface
材质。
漫反射颜色改为黑色,高光Roughness改为0,最重要的是需要大幅度提高IOR
值才能获得比较“明亮”的反射图像。
将白天室内照明修改为夜晚
可以简单地对Skydome Light
的HDRI天空贴图的Color Balance
栏中的参数进行调整,将其修改成夜晚的光照效果,当然其照明亮度也需要大幅度降低。这里我修改了Color Gain
为比较暗的灰蓝色。
Directional Light
的亮度和色温也要相应进行修改。这里我还增加了Angle
值以增加阴影的模糊程度。
可以看到,低分辨率(50%)和低取样值(2/3/2)下,渲染速度还是非常快的,这样我们在调试的时候不至于需要浪费很多时间等待渲染。这是我对Arnold渲染器最满意的地方。
添加人造光源
在这个场景中,我想要使用3盏吊灯来作为人造光源。我们可以有很多种选择:1. 将灯泡物体转换成Mesh Light
;2. 用点光源替换灯泡物体来模拟;3. 用聚光灯替换灯泡物体来模拟。方案2可以通过调节点光源的高度来调整其照亮范围,方案3可以让我们精确控制灯光的照明范围(完全不被灯罩模型所限制),但我们这个范例中使用最简单的方案1。
Mesh Light
默认不显示灯的外观,只显示其照明效果。因为场景很大,且Normalize
被勾选,所以需要较高的亮度(Exposure
= 13)才能照亮场景。
为了控制这盏灯直接照明的范围(比如我们需要灯泡很亮很显眼但不想它过份照亮整个场景),我们可以给这盏灯添加一个Light Decay
。
双击添加进Light Filter
里的Light Decay
,我们可以修改Far Start
和Far End
来设定这个灯光的亮度从什么距离(Start)开始强制性衰减,以及达到什么距离(End)时完全没有照明效果。
最好根据
diffuse_direct
通道来修改Light Decay
,因为它影响的是直接光照,而直接光照是反映在diffuse_direct
中的。也就是说,在Far End
距离以外的场景其实也会受到这盏灯的照明影响,但不是被直接照亮,而是被间接照亮(比如地面的反弹光线)。
同理设置好另外两盏吊灯:
最终照明效果如下:
添加灯光雾
在渲染设置的Environment
栏中,给Atmosphere属性添加一个aiAtmosphereVolume
节点,并设置aiAtmosphereVolume的参数。
Density
这个参数非常敏感,稍大点数值就可能产生非常强烈的灯光雾效,而且会影响我们对于灯光亮度的判断。所以,我建议在没有灯光雾效的时候先把灯光颜色测试好,然后再添加灯光雾,调节Density
值以匹配我们想要的效果。另外要注意的是,
Environment
中设置的不论是aiAtmosphereVolume
灯光雾也好,还是aiFog
场景雾也好,都不算做Arnold的“Volume”,不会出现在“Volume”相关AOVs通道中,也不受Volume Sample的数值影响!
最终渲染的结果如下:
我个人对于这个渲染时间和渲染质量并不是特别满意,真的是太久了。而且这3盏人造灯源在间接漫反射中产生的噪点几乎遍布整个场景。
我们可以使用一些办法来改善这种问题。一方面,我们可以用分通道渲染再合成的方式将diffuse_indirect
单独提取出来做降噪处理,但这需要保证不会出现“漏光”的区域;另一方面,我们锁定Sample Pattern,将噪点当做场景贴图纹理的一部分,有噪点没关系,只要动画时噪点不会出现闪烁就好。
我个人电脑的基本配置是AMD R5 2600 + 16G DDR4 3000内存,并不是一个特别有利于渲染的配置。目前Arnold渲染器主要还是依赖CPU在做计算,所以CPU越快渲染速度就越快。
从单帧渲染时间上来讲,Arnold并不比Mental Ray慢,但Mental Ray可以保存GI光子图、FG灯光图等缓存数据,在渲染动画序列帧的时候,Arnold的渲染时间就慢很多了(因为不能取巧了……)。算是牺牲最终渲染速度来换取制作时的便捷性吧。