带有折射的物体的后期景深制作
当我们在制作一些有着透明杯子之类的静物场景,并且想要在后期软件中制作景深效果的时候。头疼的问题就来了。如图所示,当我把焦点设置在杯子上的时候,杯子本身是清晰的,通知透过杯子看到的背景也是清晰的。在真实世界中却不是这样。
产生这种效果的原因和之前的类似,因为我们使用的zdepth计算的是模型,也就是把杯子当成一个实心的物体,透过杯子看到的背景被当做是在杯子的表面。所以杯子实的时候,透过杯子看到的背景也实,杯子虚的时候透过杯子看到的背景也虚。
那么我们要怎么解决这个问题呢?
首先我们要明确产生问题的原因在于,使用的z通道,把透过杯子的背景也理解为在杯子上。看图,杯子本身是透明可以看到后面的东西和地面的,但是z通道因为只计算模型本身,所以会把这些像素都理解是长在杯壁上的。于是计算景深的模糊效果以后,会得到不正确的结果,尤其是红色区域。
可以看到,当我们把焦对准杯子本身的时候,背景已经模糊了,然后透过杯子看到的背后的东西依然是清晰的,原因就是这些地方的像素计算的是上图的z通道,会把它们都理解成在杯子上,于是也是清晰的。这当然是我们不希望看到的结果。
那如何解决呢。非常的简单:在渲染z通道的渲染层里,把杯子本身的材质,改成我们场景里的玻璃材质,于是在计算z通道的时候,杯子也会发生折射,也会看到背后物体的深度。就可以得到我们想要的z通道。
这样的z通道上的黑白信息,就可以比较好地反映像素在场景中真正的深度了。
我们给两个不同的z通道重新命一下名。原来的z通道叫做normalZdepth,后来做的带折射的z通道叫做refractiveZdepth。
我们使用refractiveZdepth对我们的图片进行一个景深模糊,情况比之前好了很多,但依然有新的问题:
当我们把焦点对准杯子最靠近相机的高光处时(图片红圈处),杯口处是清晰的,但同时,杯子背后的牙膏居然也是清晰的。明明杯口离我们相机的距离要比牙膏离我们相机的距离近很多,却被理解成同样一个深度,都是同样的清晰。这样的结果当然也是不正确的。
产生这样的偏差的原因是,我们杯子的反射、高光和污渍,并不像折射那样,反映的是背后的物体,而是说它们本身就附在杯壁上的。所以对于反射、高光和污渍,我们要使用normalZdepth作为它们的深度信息,而折射则要使用refractiveZdepth作为它的深度信息。
那么怎么分别对不同的通道使用不同的景深呢?首先你要在渲染的时候把我们一张完整的渲染图拆分成几个渲染通道,可以再后期中重新合成最终渲染效果的。在vray里的设置方法如图:
然后我们将所有渲染出来的通道(vray里叫element),放到AE的时间条上。因为我们使用的是标准的线性工作流,所以图层的叠加模式只要全部选择ADD模式就可以完美地复原我们的beauty pass了。
这个时候,我们对除了refraction以外的通道,全部使用normalZdepth进行景深模糊,而对于refraction通道,我们单独使用refractiveZdepth进行模糊。这样,我们就解决了刚才面临的问题了。
(当我们的牙膏清晰的时候,我们的杯口是模糊的)
(当我们的杯口是清晰的时候,牙膏是模糊的)
但是观察最后这一张图片,你会发现杯子周围有一圈亮边。产生的原因是由于折射通道在被模糊以后,范围扩散了,散到杯子的外面去了。所以我们用一个杯子的alpha通道来遮挡一下。
杯子周围的白边消失了,但是感觉alpha切的太生硬了。我们将对杯子进行模糊的效果复制一份到alpha图层上面去。让alpha也有一定程度的模糊。
得到一个折中的结果。当然还可以通过更多的手段对这个alpha通道进行更细微的调整,来达到更接近我们心理预期的效果。
最终呢,我们得到一个类似这样的效果: