《影视特效镜头跟踪技术精粹(第2版)》——1.3 运动匹配的工作体系
本节书摘来自异步社区《影视特效镜头跟踪技术精粹(第2版)》一书中的第1章,第1.3节,作者 李伟,更多章节内容可以访问云栖社区“异步社区”公众号查看。1.3 运动匹配的工作体系在介绍运动匹配工作的流程之前,我想先简单讨论一下现实中的摄影机是如何工作的,因为摄影机是三维世界和二维图像的桥梁,它也是运动匹配工作的核心。现实中,当摄影机开拍之后,它基本上就...
本节书摘来自异步社区《影视特效镜头跟踪技术精粹(第2版)》一书中的第1章,第1.3节,作者 李伟,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.3 运动匹配的工作体系
在介绍运动匹配工作的流程之前,我想先简单讨论一下现实中的摄影机是如何工作的,因为摄影机是三维世界和二维图像的桥梁,它也是运动匹配工作的核心。现实中,当摄影机开拍之后,它基本上就只做一件事:捕捉三维世界的视觉信息并记录到二维的图像上。不妨想象一下那一瞬间究竟发生了什么。
来自场景的光线通过摄影机镜头被聚焦到胶片上,胶片曝光记录下光照信息,然后快门关闭,曝光后的胶片被更换、重置,然后快门再次打开,整个过程重复进行。对数码摄影机而言,胶片被CCD(Charge-Coupled Device)所替代,它电子化地捕捉光线信息,然后以数字形式存储到各种存储设备中。
3D动画程序中的摄影机都是基于真实摄影机的,它是真实摄影机在光学和结构方面完美的数学化模型。跟真实的摄影机一样,它们有焦距和压片背(film back——胶片摄影机中用于限制胶片上感光范围的装置)。但是它们只是简单地获取它们所在的、人造的、计算机生成的环境信息,而不是获取真实世界的光线。
无论你如何处理曝光的胶片或是进行3D渲染,最终的图像都是一个投影。这就是说,三维的场景被变平为此场景的二维表现中。我们是如此习惯于这些变平的图像,以至于我们很难注意到它们,但是每次我们看电视或电影的时候,我们实际上都是在观看一个三维场景的平面记录(如图1.3.1所示)。
如果说摄影机的作用是采集三维的世界,制作二维的图像,那么一名运动匹配师的工作则恰恰相反。运动匹配师必须采集一系列二维的图像,并创建一个三维的世界。这两者之间的桥梁就是摄影机。如果关于摄影机的信息能被重建,那么就有可能指出在拍摄时的3D环境是怎样的。这些有关3D环境和摄影机的信息就是运动匹配师最终要提交给动画师进行工作的东西。
尽管有很多不同的方法来完成每项任务,但对每个镜头而言,一名运动匹配师的工作流程几乎都是相同的(如图1.3.2所示)。这张图展示了一个完整的运动匹配工作体系。
一般来说,运动匹配工作是从分析素材开始的。这是整个流程中最重要的一步,虽然并不会花费多少时间,但分析的结果会直接影响你采用何种工具来完成这项工作。对镜头进行仔细的观察能帮你做出正确的决定,避免意想不到的问题,并估计花费的时间。尤其最后一项,考虑到运动匹配工作对整个生产线的影响,控制合理的耗费时间对于保证整个项目的进度有重要意义。
对素材的分析过程并没有很明确的约束步骤,因为确定运动匹配的难度涉及多方面的因素,往往只能依靠经验来判断。虽然经验并不总是正确的,但有些共性的问题是需要被考虑的,这包括:
- 摄影机是否运动了?如果是,那么它是如何运动的?运动得有多快?时长多少?
- 素材是什么格式?是电影镜头、高清、标清?画面是否被压缩?颗粒和噪点的程度怎样?
- 需要在镜头中放置什么元素?对匹配的精确性要求如何?
- 使用运动匹配结果的是谁?他们将如何使用?
当然,这些仅仅是一些皮毛,但是你考虑的问题越多,你就越清楚自己需要做什么。当你对接手的镜头做出了大致的评估之后,接下来需要汇总所收集到的数据,为接下来的解算摄影机做准备。
解算摄影机的过程几乎就是从摄影机无数种可能的运动中挑选可能符合画面要求的那一种。显然,拥有的信息越多,越容易确定哪种运动趋势是你想要的。实际操作中你能收集到的数据并不总是齐全,有时除了手头上的镜头画面什么都没有,也有可能某人参与了现场拍摄,并详细地记录了所有摄影机的信息,实地测量场景的概况,从而提供给你丰富的参考资料,而大多数时候都介于这两者之间。不过,庆幸的是现在运动匹配技术已经相当完善了,即便数据很少,也能支持你进行解算,并且解算的结果至少是可用的。下面列出了一些最有用的数据:
- 摄影机信息,例如焦距、孔径和胶片类型。
- 现场环境信息,包括摄影机高度,物体离摄影机中心的距离,以及镜头中出现的场景中各种不同物体的测量数据。
当一切准备就绪之后,运动匹配师要开始解算摄影机的所有内部和外部属性。虽然有很多方法来做这件事,但是不断的尝试、反复的校正是贯穿始终的。总的来说,解算摄影机有两种方式:人工模拟和运动匹配程序自动解算。
在运动匹配程序出现之前,所有的运动匹配工作都是需要人工模拟的。用这种方式来跟踪一个序列帧需要对摄影机的位置进行推测,然后反复修正直到完成匹配。人工模拟来解算一个摄影机不是一件容易的事,极其耗时,并且整个过程枯燥无比,无非是进行熟练地猜想摄影机的信息,然后依据画面调整摄影机系统,直到完成跟踪。虽然运动匹配程序出现之后,大多数时候都不需要进行人工模拟,但对那些运动匹配程序无法解算的镜头,人工模拟依旧是唯一的选择。例如:静帧或者说静止镜头,强烈运动模糊的镜头,严重不规则抖动的镜头,以及物体间运动关系复杂的镜头,等等。
随着计算机技术的发展,跟踪软件出现了,这使得运动匹配师通过使用一种被称为照相测量法(photogrammetry)的尖端技术,在某种程度上能自动地跟踪摄影机。这些软件基本上都有一个相似的流程。首先,图像中诸如场景的边角,或是十字标记(一般在蓝屏素材中被用来标明墙壁上的点)这样的特征在2D的图像中运动时被“追踪”。然后程序通过在数学上分析这些2D追踪的标记的运动,对摄影机进行解算。这些软件包通常会生成一个动画的摄影机和3D标记,它们反映了那些在2D中被追踪的特征点在三维空间中的位置。通常运动匹配师使用这种方式最多,因为它是完成运动匹配的最容易的方法。
还有一些方法来自人工模拟和自动跟踪技术的衍生。有时根据工作流程的不同,还有一些个性化的解决方案。例如,从运动匹配软件解算出来的2D跟踪信息可以通过使用自定义的脚本,被运动匹配师用来解算镜头的平移。
尽管摄影机是运动匹配工作里最主要的考虑因素,但是解算出摄影机只是完成了运动匹配流程的一半。运动匹配师不仅要考虑关于摄影机的所有因素,他们还必须重建实拍素材中环境的三维特征,匹配环境,以便为接下来动画师或技术导演等人员的工作提供位置参考。
图1.3.3所示的4张图展示了这个工作的意义,运动匹配不仅仅是解算摄影机,也不仅仅是重建环境,还需要给出这两者间的关系。
在实际工作中最容易犯的毛病是第二种,如果你把第二张匹配图和第四张比较,可能看不出什么大区别,但是在摄影机参数错误的时候,要强行在摄影机视图中匹配,往往需要破坏模型应有的形态。如图1.3.4所示,你可以看到在摄影机视图中看上去完美匹配的建筑,在三维空间中的样子。左图与图1.3.3中的第二张图片对应,因为摄影机错误,所以破坏了房子的结构来匹配画面。右图与图1.3.3中的第四张图片对应,显示的是正确匹配后建筑的形态,你可以看出,它是一个完美的立方体。
运动匹配师具体要重建多少环境,这取决于镜头的需要。如果只是一个简单的角色走路,动画师也许仅仅需要一个简单的地平面,另外一些场景也许需要粗略的几何体来投射阴影。而在有些时候,例如对环境进行数字扩展,运动匹配师可能需要解算出一个非常精确的摄影机,构造细节化的几何体,并摆放好位置。因此在开始一次运动匹配之前,最好先确定什么类型的3D物体将被放入场景,以及它需要被正确地放置于何处(如图1.3.5所示)。
3D环境有多种来源。通常运动匹配师自己创建粗略的几何体,或者被提供一个布景来匹配镜头中的环境。有时运动匹配师也会先提供一个粗略的环境模型,然后由专门的模型师在此基础上创建细节化的东西。运动匹配师使用他们在进行运动匹配过程中解算出来的3D标记来获得关于场景立体空间关系的信息。但是,不管这些信息来自哪里,建立大致的环境并设置场景匹配通常是运动匹配师的职责,这样在生产线流程下游的艺术家就不必为此而担心。
一旦运动匹配解算完成,我们需要对其精准性进行测试。一个糟糕的运动匹配通常会导致实拍素材与CG元素之间出现明显的分离。例如,CG元素看上去是在跟着实拍场景一起移动和旋转,但是它突然朝其他的位置移动了,或是缓慢偏移了所期望的位置。测试运动匹配需要将3D物体合成到图片序列中,然后随着序列的播放来检查是否有异常的运动趋势或抖动。
大多数时候,运动匹配师会将一个低模物体,或者说代理物体放置到场景中,帮助他们检测运动匹配的质量。检查一个物体是否有滑动的一种最好的方法是给这个物体指定一个棋盘格纹理,并将其不透明度降到一般,然后将其渲染出来,这将有助于显现3D空间的滑动(如图1.3.6所示)。
由于运动匹配的结果会对生产线下游的艺术家的工作产生直接影响,因此在提交场景前必须进行彻底的检测,确保匹配的结果正确无误。否则,一个糟糕的运动匹配进入下游的工作流程,最终会导致整个流程的失败,在项目时间紧凑的影视行业,这种错误会带来极大的工作压力。
当测试通过,匹配好的场景就可以交付给生产线下游的艺术家了。当然有些细节问题还需要处理,例如:
- 场景的轴向,单位,比例(3ds Max的坐标系是z轴向上,Maya是y轴向上)。
- 场景中需要包含哪些物体,如环境、角色等。进行场景匹配时,往往会导入解算出来的参考点,这些数量巨大的参考点在匹配完场景后,一般都需要删掉,或保留关键的一小部分。用于测试匹配的物体和纹理,也需要合理处理。
- 物体的命名习惯,保存格式。
一个有着良好组织结构和清晰的层次关系的场景会使其他人的工作更容易,这也让你不大需要向其他人去解释场景的构成。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)