原理教程:影视动画渲染中的运动模糊(下)
[2010-11-19 9:23:17]
浏览次数:[3261]
分享到:
字号
打印|
导言:
大家好!我们继续来学习影视动画渲染中的运动模糊的下半部分知识。
 
计算机动画中的运动模糊
计算机动画中生成运动模糊图像的方法基本可以分为两类:传统的三维渲染运动模糊(3D Motionblur)以及后期处理的2D矢量运动模糊(Post-Processing 2D Motionblur)。在传统的三维渲染运动模糊中,基于光线跟踪的运动模糊算法是最接近物理真实的方法之一,以最经典的光线跟踪渲染器Mental Ray为例,其在光线跟踪模式下计算运动模糊的原理简单的说是首先根据快门时间(Shutter Open—Shutter Close)(shutter 0 1用于表示正常曝光值,shutter 0 0.5用于表示曝光时间为正常值的一半)决定运动模糊的强度。(图13)

然后根据时点采样(temporal sample)决定在一次快门闭合时间内采样的精度。(图14)

最后通过插值、抗锯齿与像素过滤处理生成最终的图像。(图15)

在一次项目渲染中,经过笔者测试,Mental Ray在光线跟踪模式下为了得到高质量的运动模糊渲染结果需要付出大量的渲染时间作为代价,特别在开启渲染器高级光效比如Final Gathering的情况下,开启运动模糊渲染所消耗的时间为不开时的五倍以上,并且内存占用量明显增加,在机器配置不变的情况下已经无法按照既定时间完成渲染任务,因此不得不另想方法来实现运动模糊效果,最终借助后期软件完成了运动模糊的添加工作,也就是计算机动画中生成运动模糊图像的第二类方法——后期处理的2D矢量运动模糊(Post-Processing 2D Motionblur)。
后期处理的矢量运动模糊的基本工作原理是通过提取屏幕像素的运动趋势并记录为运动矢量信息(Motion Vector),来对原始无运动模糊的图像在后期软件中添加二维的运动模糊效果(图16、17、18)

Motion Vector是什么?
通常有两种Motion Vector信息,一种叫做Normalized Motion Vector,其经过归一化处理(normalized)将数值映射到0~1的范围内;一种叫Raw Motion Vector,所记录的数值代表像素的实际运动距离。本文所提到的Motion Vector一律指的是Raw Motion Vector。
 
一张包含Raw Motion Vector信息的图片通过使用两张灰度图并将这两张灰度图合并到一张图像上来记录场景中所发生的运动方向及强度。
 
其中一张灰度图通过记录物体像素在给定快门时间内在X轴向上的位移(水平运动)强度(单位为像素,负值代表沿着X轴向左运动,正值代表沿着X轴向右运动,绝对值大小代表运动幅度)并将这张灰度图写入图像的红色通道。
 
另外一张灰度图则通过记录物体像素在给定快门时间内在Y轴向上的位移(垂直运动)强度(单位为像素,负值代表沿着Y轴向下运动,正值代表沿着Y轴向上运动,绝对值大小代表运动幅度)并将这张灰度图写入图像的绿色通道;一般蓝色通道不记录任何信息。
 
这样形成的一张Motion Vecotr图像类似图20,我们看到的是一张带颜色的图片,实际上图片里存储的是每个像素在XY轴的运动强度和方向。这里的X、Y轴指的是在后期软件屏幕坐标下的X和Y轴。
 
在了解后期处理的矢量运动模糊的基本工作原理后,我们得知该方法的实现必须基于三个主要环节:
 
1.是必须生成不带运动模糊的图像;
2.是必须要有某种方法去获取运动矢量信息;
3.是必须能让后期软件正确地识别渲染器输出的运动矢量信息并进行运动模糊的图像处理操作。
 
第一个环节不是问题,任何一款主流的三维软件都能够胜任不带运动模糊的渲染工作;第二个环节需要了解所使用的渲染器是否支持运动矢量信息的计算及输出,据笔者了解,输出矢量信息基本上是每一个主流渲染器都拥有的功能,只是计算方式有所不同而已;在第三个环节上,据笔者所知,AE、Fusion、Shake、Nuke、Combustion、Toxik这几款后期软件可以原生识别或者通过安装商业插件来识别三维软件渲染的矢量信息。
 
实际的项目制作中通常会遇到的问题是:本项目适合用什么样的方法去实现运动模糊效果?要回答这个问题,我们首先要了解三维渲染的运动模糊(下文均简称为“三维运动模糊”)和后期处理的2D矢量运动模糊(下文均简称为“后期运动模糊”)各自的优缺点才能够根据项目具体情况来做决定,以下是优缺点分析。
1.三维运动模糊能够计算曲线运动模糊,后期运动模糊不能,而这在类似直升飞机螺旋桨的处理上至关重要。在处理剧烈曲线运动的情况下后期运动模糊问题显著。(图19、20、21)

2.三维运动模糊理论上可以通过无线提高采样精度来达到完美的模糊效果,但通常情况下时间不允许,因此三维运动模糊往往带有瑕疵(颗粒感),即使在好莱坞主流影片中也能看出采样次数不足而形成的瑕疵(图22、23、24、25)。

而后期运动模糊进行的是2D平面图像处理操作,因此只要花费很少的时间就可以达到完美无瑕的模糊效果。(图26、27)

3.后期运动模糊计算非常快,几乎是实时生成,在三维软件中渲染矢量信息序列速度也相当快,而三维运动模糊相当慢,需要消耗大量的渲染时间。
 
4.后期运动模糊不能处理运动物体的阴影,不能处理运动物体的折射反射,而三维运动模糊均可以渲染出运动模糊物体折反射及阴影的真实效果。
 
5.三维运动模糊的分层(通道)渲染及合成相对更麻烦一些,因为每一层(通道)都得带有运动模糊效果,且运动模糊图像的透明边缘在合成校色时容易变黑或变白。
总结为如下表格。(图28)
根据以上的分析我们可以得出如下结论:在综合物理真实性方面考虑,三维运动模糊要优于后期运动模糊,因此追求极端质量的项目(如电影《变形金刚》系列、《阿凡达》、《Wall-E》)往往会花费大量的时间和硬件成本去渲染三维运动模糊;在速度上后期运动模糊要远胜于三维运动模糊。
 
因此在大多数的情况下,可以采用后期运动模糊+三维运动模糊结合使用的方案,常规镜头用后期运动模糊解决,部分特写及大动态的镜头用三维渲染运动模糊来搞定。
 
有一点需要特别指出的是:本文所指的“后期运动模糊”特指的是在三维中渲染矢量通道再到后期软件中根据矢量通道进行模糊处理的情况,而在实际生产中有一种类型的“后期运动模糊”指的是后期软件中使用图像跟踪分析方法,根据前后帧的像素信息自动计算出运动趋势再进行模糊处理的情况(例如:Nuke中的Oflow、F_motionblur这两个节点实现的功能),这种生成运动模糊的方法完全不依赖三维软件,但是对于复杂运动的分析能力有限,因此在缓慢或简单运动的场合效果不错,在复杂像素运动情况下会出现运动模糊失真的情况。这种类型的“后期运动模糊”本文不再赘述。
地址:烟台市芝罘区通世南路1861文化创意产业园B3-401 影视专线:0535-6695586/400 0506 216 ▲Top置顶