APP下载

游戏电影制作中虚拟摄像机的半自动控制技术

2013-09-20刘鑫张昕

关键词:脚本引擎摄像机

刘鑫,张昕

(中国传媒大学计算机学院,北京100024)

1 引言

随着3D游戏引擎的发展,游戏的画面质量几乎可以和电影相媲美。现如今,游戏制作和电影大片的界限也逐渐模糊。游戏中的虚拟摄像机和日益强大的游戏引擎使游戏和电影的结合成为了可能[1],游戏电影[2]的前景十分可观。

国外已经生产出许多成熟的游戏电影作品。由《魔兽世界》衍生的《远古传说3》就是十分出色的游戏电影之一,它在玩家中掀起了很大反响并被誉为《魔兽世界》游戏电影的史诗般作品。由动作剧本改编的《复仇者联盟》在视觉上也有一定的冲击力。可以这么说,该电影无论是在荧幕色彩,剧情设计还是配音和字幕等方面都做得非常好。在国内也已经涌现出比如由石头熊游戏视频工作室出品的《诛仙》系列游戏电影,梦罗浮的《天堂2-英雄时代》和其他热门的游戏电影[3]。

虚拟摄像机在游戏电影的制作中扮演着十分重要的角色,如何对虚拟摄像机进行控制是有待解决的首要问题。有三种方式去控制一个虚拟摄像机:手动控制、全自动控制和半自动控制。

人工控制是最方便的一种控制方式,利用这种方式使用者只需要利用鼠标或者键盘就可以轻松控制他的虚拟摄像机。然而,手动控制虚拟摄像机也有许多的缺点:摄像机可能会颤动或摇摆,摄像机的视角可能变化的不均匀,或者摄像机可能会沿着一个不准确的路线移动等等。例如,在《远古传说3》和《复仇者联盟》中偶尔会出现屏幕抖动,《天堂2-英雄时代》和《诛仙》的画面看起来略生硬、有时会抖动并且摄像机缺乏速度控制等。

在游戏引擎中,电影工作者可以通过编写脚本来确定一个虚拟摄像机的移动,然后让这些脚本自动控制摄像机。全自动控制方式避免了上述手动控制的缺点,并能让摄像机拍摄稳定准确和高效。但是这种控制方式通常利用人工智能算法[4-6]去设计摄像机的移动轨迹[7],因此它拍摄出来的镜头可能并不是游戏电影导演所期望的。

第三种方式半自动控制方式既能保留全自动控制的优点,同时又能给予游戏电影导演更多的创作自由。它的主要原理是:让摄像机控制算法参数化,让游戏电影导演可以设定并调整这些参数来实现摄像机的运动。然而,编写一系列的控制脚本并为每个镜头逐个调整参数的工作量巨大。

本篇论文从参数角度把摄像机的控制算法进行分离,抽象出一个通用的摄像机控制脚本(GCCS)。有了这个通用的控制脚本,游戏电影制作者不再需要为不同的镜头逐个编写脚本了。除此之外,论文还介绍了电影视听语言的理论知识来确定摄像机的运动模式,它也是GCCS的参数之一。因此,无限的摄像机运动方式被归纳为一个有限的摄像机语言集合,它可以被电影导演反复的使用。论文在最后总结了在Unity3D游戏引擎中的数据物体集,其中的每一个都代表着一种通用的摄像机语言(在后面也被称作“电影语言预置件”或“CLP”)。利用这套技术,工程师只需要复用一个CLP并把它作为参数传给GCCS就可以完成一个游戏电影的镜头,这样大大减少了半自动游戏电影拍摄的工作量。

2 虚拟摄像机概述

正如电影利用摄像机引导观众去了解故事一样,游戏引擎里的虚拟摄像机用来给玩家展现游戏中的世界。人们可以通过控制虚拟摄像机来拍摄他们想要的游戏场景。

2.1 利用游戏引擎制作游戏电影的技术支持

通用的游戏引擎具备创造一个虚拟世界的全部条件,它可以模拟重力和其他基本的物理原理,可以决定物体的运动方式并能让智能物体对环境做出响应。在游戏引擎中,游戏电影导演可以像操作真实摄像机一样操作虚拟摄像机进行自由运动并改变视角。

2.2 游戏引擎里的虚拟摄像机

真实的摄像机可以被安放在场景中的任何位置并可以轻松调整参数去获得满意的画面,虚拟摄像机亦如此[8]。在游戏引擎里,虚拟摄像机是一个特殊的物体,它可以被放置在场景中的任何角落。你可以设置它的位置、旋转角度、景别、投影和其他参数去获得你想要的镜头。

2.3 游戏电影拍摄输出

由虚拟摄像机拍摄出来的视频可以在计算机显示器上渲染。利用视频录制软件,如 Camtasia Studio、KKCapture等来录下显示器上的视频,然后把它保存成合适的视频格式。这些视频文件可以被用作可编辑的游戏电影素材的一部分。因此,在录制前需要设定好合适的屏幕尺寸和视频录制方式。

3 Unity3D游戏引擎概述

半自动虚拟摄像机控制技术是基于Unity3D引擎实现的。游戏引擎是游戏的开发平台,Unity3D是现在广泛利用的一个游戏引擎。Unity3D有许多显著的特点,包括完整的编辑器、跨平台发布功能、地形编辑器、材质编辑器、脚本模块、网络模块、物理模块、版本控制和其他特点等。

3.1 Unity3D游戏引擎脚本编写

在Unity3D游戏引擎中,游戏场景中的所有物体都是GameObject(游戏物体)的实例。一个游戏物体上可以附加许多组件,这些组件描述了游戏物体的不同属性。被附加到游戏物体的组件继承于Component Class(组件类)。程序员写的脚本继承于MonoBehavior类,它是组件类的一个特殊的子类。图1用UML语言描述了在Unity3D游戏引擎中GameObject、Component和 MonoBehavior的关系。

图1 在Unity3D游戏引擎中GameObject、Component和MonoBehavior的关系

在Unity3D游戏引擎里,Camera(摄像机)是个特殊的游戏物体。可以通过编写脚本并把它们作为组件附加到摄像机上来进行控制。

3.2 Unity3D游戏引擎里虚拟摄像机的技术支持

几乎所有的游戏引擎都可以为游戏电影制作提供支持,Unity3D也不例外。最重要的是,我们可以在运行时给摄像机添加Unity脚本或是去掉它,这使得操控摄像机变得更加灵活方便。Unity摄像机的属性繁多,这些属性可以在在设计期通过游戏编辑器去进行设置,并且可以在运行期通过脚本去调整和改变。图2展示了Unity3D游戏编辑器中的摄像机属性。

Unity摄像机最重要的属性是视野,裁剪平面,透视和消隐遮罩。在游戏电影制作过程中,摄像机的某些属性会在运行时因为脚本的控制而发生相应改变。

图2 在Unity3D游戏编辑器中摄像机的属性

4 游戏电影虚拟摄像机的半自动控制技术

4.1 摄像机控制脚本

一般来说,要使虚拟摄像机按照一定的方式自动运动进行拍摄的话,首先需要为这个虚拟摄像机写一个控制脚本。然而在游戏电影制作时,有大量的摄像机运动方式需要具体确定,显然为每一个镜头单独编写脚本是如此冗繁的工作。因此减少编写代码的工作量是游戏电影制作的关键任务。

通过对大量摄像机控制算法的观察,发现这些算法的不同之处在于一些参数数据,也就是摄像机运动和改变方式。因此可以把属性从摄像机控制脚本中分离出来并抽象出一个通用的脚本。有了这个通用摄像机控制脚本,游戏电影制作者不再需要为镜头逐个写脚本。他们所要做的就是为每一个脚本确定不同的摄像机运动参数。

4.2 游戏电影的半自动拍摄步骤

利用通用摄像机控制脚本,可以将游戏电影的半自动镜头拍摄归纳为以下步骤:

1.准备虚拟摄像机:把通用摄像机脚本附加到摄像机物体上。

2.为摄像机准备“摄像机运动路径”(CMP):为了使摄像机自动运动,我们需要为它确定一个运动路径,也就是说在设计时,我们需要在游戏场景里手动放置一系列的结点来确定这条路径。

3.为摄像机准备“目标运动路径”(LTMP):为了让摄像机可以在正确的视角拍摄,我们也需要为摄像机的目标物体确定一个运动路径。路径上的结点也是需要在设计时在游戏场景中手动添加。

4.为摄像机准备“属性改变路径”(CPCP):摄像机的位置和视线会随着已定义好的路径改变,摄像机的属性也会同时相应地发生改变。因此,需要依照拍摄时通用摄像机控制脚本对摄像机属性的改变而配置一组属性值。通常在运行时刻摄像机的两个属性会改变:视野和裁剪平面。

5.为摄像机准备触发器:镜头触发器的作用是确定一些条件,当条件满足时,虚拟摄像机开始自动拍摄。碰撞机制通常被用来触发自动摄像机:把一个会对碰撞事件发生响应的特殊物体放置到游戏场景中,当摄像机碰到这个物体,通用摄像机控制脚本便会附加到被触发的摄像机上。携带通用摄像机控制脚本的一些属性,如上面提到的 CMP、LTMP和CPCP,是触发物体的另一个职责。当摄像机碰到触发器时,触发器所携带的属性便会传送到通用摄像机控制脚本中。

在上述过程中,步骤(1)和(5)比较简单。为了完成不同的镜头,必须为通用摄像机控制脚本准备不同的参数,这个过程就是步骤(2)、(3)和(4)。为通用摄像机控制脚本准备参数是十分繁重的工作,因为这需要仔细地用手动去一一确定这些路径。这样的话,减少为通用脚本准备参数的工作量是游戏电影制作的关键任务。

4.3 视听语言介绍

在电影艺术里,镜头是组成电影的元素,它是由摄像机从开机到关机所拍摄下来的一段连续画面。电影是由镜头按照次序排列组成的[9]。摄像机语言(CL)是以一种特殊固定的运动模式来定义的镜头序列,它可以用CMP、LTMP和CPCP进行描述。事实上,电影导演常用的镜头语言数目是有限的,例如推拉镜头、摇移镜头、俯仰镜头、跟镜头等等[10]。因此无限的摄像机运动可以被分类成一个有限的集合,集合里的元素都可以被电影语言所描述。因此摄像机运动的参数集合便从无限减变成为有限。

4.4 在Unity3D中虚拟摄像机语言集合

因为摄像机语言可以被CMP、LTMP和CPCP所描述,那么便可以抽象出一个三元组来表示一个摄像机语言:

{CMP,LTMP,CPCP}

在Unity3D里,可以用一个特殊的游戏物体来装载上面描述的三元组信息,然后将这个游戏物体装载到一个“预制件”中(Unity3D的一种机制),它可以被存储,分享和复用。电影语言在预制品中的结构可以如图3表示。

如图3,“摄像机语言”,“摄像机运动路径”,“视野目标运动路径”和“路径结点”都是Unity3D中GameObject的实例。在这个图示中,尾部带有菱形形状的线在UML语言中表示聚合关系,这表示“摄像机语言”包含“摄像机运动路径”和“视野目标运动路径”,而“摄像机运动路径”和“视野目标运动路径”也拥有它们自己的子物体“路径结点”。“摄像机属性改变路径”以特殊的格式保存在配置文件里。

图3 摄像机语言的三元组机构

在Unity3D里,复用一个预制件是十分容易的。你可以在设计时把它拖到游戏场景中或在运行时提到它。为了简化准备参数的工作,我们为每一个摄像机语言都配置一个预制件,这些预制件可以被电影制作者反复使用然后构建出一个电影语言预制件集(CLP)。有了这个集合,当游戏电影导演想到实现一个摄像机语言的时候,他仅仅只要从这个集合中挑选相应的CLP而无须再从零开始地准备摄像机运动参数了。导演在使用CLP时,他可能会做一些细微调整来保持个性或者去适应复杂的拍摄环境等等。

5 技术应用

最近我们开发了一个基于Unity3D引擎的3D游戏“中国航母瓦良格”。为了宣传,我们为这款3D游戏制作了游戏电影。在这个游戏电影里,我们用虚拟摄像机摇摄整个画面(图4),用推拉镜头来拍摄瓦良格甲板上的武器(图5),用俯视镜头鸟瞰瓦良格全景。我们还使用这些技术对其他移动的物体拍摄了镜头,例如飞机和导弹等。该游戏电影中的所有镜头都是基于通用摄像机语言脚本和CLP库来完成的。

6 总结

在制作游戏电影时如何准确、高效又自由地控制虚拟摄像机是本文讨论的重点。为此本文提出了一种新的技术来满足这个需求。这项技术的核心思想包括三点:(1)把参数从摄像机控制算法中分离出来并得到一个通用的算法;(2)无限的摄像机运动参数可以被分类成一系列有限的摄像机语言集合;(3)为每一个摄像机语言配置一个可以被电影制作者反复使用的可复用的预制件。第一点避免了电影制作者为每一个镜头逐个编写脚本。第二和第三点为游戏电影制作者想要描述摄像机的运动方式时提供了一个自由且高效的方式。

图7 跟镜头

[1]曹渊杰,李亦中.现代电影与电子游戏的交互趋势[J].当代电影,2008:122-126.

[2]Christian J,Callum M.Using Machinima to Promote Computer Science Study[J].In Proc Tenth Australasian User Interface Conference,Wellington,New Zealand,2009.

[3]李晋林.游戏电影给电影行业带来新的挑战和机遇[J].当代电影,2009:126-128.

[4]R E Korf.Depth-First Iterative Deepening:An Optimal Admissible Tree Search[J].Artificial Intelligence,vol 27,97-109,1985.

[5]P Burelli,G N Yannakakis.Global Search for Occlusion Minimisation in Virtual Camera Control[J].IEEE Congress on Evolutionary Computation,Barcelona,2010.

[6]史红兵,张毅彬,童若锋,董金祥.虚拟场景自动漫游的路径规划算法[J].计算机辅助设计与图形学学报,2006:592-597.

[7]J Blinn.Where Am I?What Am I Looking At?[J].Computer Graphics and Applications,IEEE,vol 8,76-81,1988.

[8]JR Silva,T T Santos,C H Morimoto.Virtual Reality in Brazil:Automatic camera control in virtual environments augmented using multiple sparse videos[J].Compuetr and Graphics,vol 35,April,2011.

[9]Wang Daiming.Machinima,the Fusion of Computer Game and Movie[J].Film Art Contents,vol 314,123-125,2007.

[10]SD Katz.Film Directing Shot by Shot:Visualizing from Concept to Screen[J].Studio City,CA:Michael Weise Productions,1991.

猜你喜欢

脚本引擎摄像机
酒驾
新海珠,新引擎,新活力!
安奇奇与小cool 龙(第二回)
车坛往事4:引擎进化之屡次失败的蒸汽机车
自动推送与网站匹配的脚本
蓝谷: “涉蓝”新引擎
新安讯士Q6155-E PTZ摄像机
安讯士新AXIS M31网络摄像机
如何消除和缓解“摄像机恐惧症”
高清新阵营