三维游戏引擎推动电影进一步发展,其中虚拟摄像机技术如何运用?

时间:2023-09-28 11:41:42 来源:电竞网

文|筱晓

编辑|筱晓

在三维游戏引擎的推动下,游戏的画质已经接近于电影的水准。到了现在,游戏和大片之间的差距已经越来越小了。在游戏中,由于有了虚拟摄影机,再加上功能不断增强的游戏引擎,使得游戏与电影的融合变得越来越有可能。

国外已有不少较为成熟的游戏影视作品问世。《远古传说3》是《魔兽世界》的一部非常优秀的电影,受到了很多人的欢迎,被称为《魔兽世界》的一部史诗级电影。《复仇者联盟》是根据动作片改编而成,从视觉效果来看,它同样具有很强的吸引力。

可以说,这部影片无论从画面的颜色,情节的安排,还是从音效到字幕,都是相当出色的。像是《诛仙》,《梦罗浮》,《天堂2-英雄时代》等等,都是国内最火的游戏。

虚拟相机在游戏影片的拍摄中起到了非常关键的作用,因此,如何有效地控制虚拟相机是一个亟待解决的问题。

虚拟摄像机概述

就像电影中的镜头是用来让人看懂剧情的,而游戏中的镜头则是用来让人看懂这个世界的。玩家只需操纵虚拟相机就能在游戏中拍摄到自己喜欢的画面。

游戏引擎拥有创建虚拟世界所需的一切要素,能够模仿地心引力等基础物理学,能够控制对象的移动,能够使对象对周围的环境作出反应。在这款游戏的引擎里,游戏的制片人员可以像操纵一个真正的摄影机那样,随意地移动和变换拍摄角度。

真实的摄像机可以被放置在场景中的任何位置,并且可以很容易地调整参数去获得满意的画面,虚拟摄像机亦是如此。在游戏引擎中,摄像头是一种可以随意摆放在画面中任意位置的特殊对象。您可以设定它的位置,旋转角度,高度,投射以及其他的参数来得到您所需要的镜头。

用虚拟相机拍摄到的影像,可以将影像呈现在电脑显示屏上。使用 CamtasiaStudio, KKCapture等录像软件对监视器上的画面进行记录,并将其存储为相应的影像文件。这个影片档案可以作为一个可编辑的影片资料。所以,在拍摄之前,必须设置适当的画面大小及拍摄模式。

Unity3D游戏引擎概述

以Unity3D为平台,实现了对虚拟相机的半自动控制。游戏引擎是一款游戏的开发平台,而Unity3D就是一款被广泛使用的游戏引擎。Unity3D拥有完善的编辑器、跨平台发布功能、地形编辑器、材料编辑器、脚本、网络、物理、版本控制等功能。

在Unity3D游戏引擎中,所有的对象都是游戏对象。一款游戏对象可以被附在多个部件上,每个部件都具有不同的特性。连接到游戏对象上的部件来自于部件类。编程人员编写的脚本从 MonoBehavior中继承而来, MonoBehavior是组件类中的一种特殊子类。

在Unity3D引擎中,卡梅拉(摄像头)是一个很特别的东西。你可以写一个剧本,然后将他们连接在相机上。

几乎每一款游戏引擎,包括Unity3D在内,都能为电影制作提供支持。除此之外,我们还可以为相机增加一个统一的脚本,也可以在运行时删除,这样操作起来就更容易了。Unity的摄像头有很多特性,在设计阶段可以用游戏编辑器来设定,在运行阶段可以用脚本来调整。

Unity相机最主要的特性是视场、剪裁、透视以及隐形遮蔽。在游戏动画中,相机的一些特性会随着剧本的变化而发生变化。

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

通常情况下,为了让虚拟摄像机以某种方式自动移动,首先要为虚拟摄像机编写一个控制脚本。但在制作游戏视频的时候,摄像头的移动轨迹是非常复杂的。所以,降低编码的工作量就成了一项非常重要的任务。

对多台相机的控制算法进行了研究,结果表明,它们之间存在着一定的差异,即相机的移动和变化规律。这样,就有可能从相机控制脚本中分离出属性,提取出一个公共脚本。有了这一通用的视频控制剧本,游戏制作人就不用再为每一个场景编写剧本了。他们只需要为每个剧本设定相机的移动参数就可以了。

通过使用一种通用的相机控制脚本,我们可以把一部游戏影片的半自动拍摄过程总结成如下几个步骤:

(1)为虚拟相机做准备:向相机对象添加一个通用相机脚本。

(2)为相机制定“相机移动路线”(CMP):要让相机自动移动,我们必须要给相机设定一条移动路线。也就是在设计的时候,我们必须要在游戏中设置一系列的节点,才能设定好这条路线。

(3)为相机准备“目标移动路径”(LTMP):我们还需要为相机的目标对象确定移动路径,从而使相机能够以合适的视角进行拍摄。在设计过程中,这些节点也需要在游戏场景中手工加入。

(4)为相机预备“属性变化路径”(CPCP):相机的位置和视角将根据预定的路径变化,相机的属性也将随之变化。因此,一组属性值必须根据在拍摄时由通用相机控制脚本所引起的相机属性的变化来配置。照相机的两个特性经常在运行时发生变化:视场和剪裁平面。

(5)为照相机预备触发器:照相机触发器的功能是决定某些条件,在这些条件被满足时,虚拟照相机启动自动摄像。碰撞机制一般用于触发自动摄像机:将一个会对碰撞事件产生反应的特定物体置于游戏场景中,当摄像机与该物体接触时,通用摄像机控制脚本将附着到被触发的摄像机上。带着某些一般相机控制剧本的特性,例如 CMP, LTMP, CPCP,这是另外一种被触发对象。当相机与触发器接触时,触发器所携带的属性将被传输至一般相机控制脚本。

其中,第(1)步、第(5)步步较为简单。在此基础上,根据所设计的一般相机控制剧本,需要对不同镜头进行相应的调整,即(2)、(3)、(4)步。为一个普通的相机控制脚本准备参数是一件非常困难的事情,因为它需要手工地一条一条地计算。在这种情况下,降低了为一般剧本中的参数设定所需的努力就成了一个重要的工作。

在电影中,镜头是构成电影的基本要素,是从开始到结束,从开始到结束的连续图像。影片是按顺序排列的镜头构成的。相机语言(camera language, CL)是一组由特定的固定动作构成的镜头序列。

其实,导演使用的镜头语言数量是有限制的,比如推拉,摇移,俯仰,跟拍等等。所以,摄影机的无限移动可以归结为一组,而这组中的每一种元素都可以用电影语言来表达。这样一来,相机的运动就从无穷大变成了有限大。

由于相机语言可以用 CMP、 LTMP、 CPCP来描述,在Unity3D中。我们可以把上述三个部分的信息放入一个特定的游戏对象,并把该对象放入“预制件”(Unity3D的一种机制)中,以便进行储存、共享、重用。

“照相机语言”、“照相机移动路径”、“视场对象移动路径”以及“路径结点”均为通用三维中游戏对象的例子。在此图中,尾端为菱形的线条代表了 UML中的聚集关系,这意味着“相机语言”包括了“相机”与“视场目标”两条轨迹,并且这两条轨迹都有其各自的子体“路径结点”。“相机属性变更路径”是以特定的形式储存在设定档中。

在Unity3D中。复用一块预制构件非常简单。你可以将其拖曳到游戏中,或者在游戏中使用。将对每个相机语言分别进行预处理,并将预处理后的图像数据进行预处理,从而得到一个可供影片制作人员重复利用的预制件集合。

有了这套系统,游戏的导演在想要使用一种相机语言时,只需要从这套系统中选择一个合适的 CLP就可以了,而不需要从头来过。导演在运用 CLP的时候,为了保留自己的风格,或是为了更好地适应更复杂的场景,可能需要做出更多的调整。

技术应用

近期,以Unity3D为引擎,研发出一款三维游戏并为这个三维游戏拍了一部游戏影片,以作推广。

在这部影片中,使用了一台虚拟摄影机,使用了推拉式摄影机对所有场景进行了拍摄,使用了俯视式摄影机,可以看到游戏的全貌。

同时,也利用这两种技术来拍摄其它运动对象,如飞行器等。在这款游戏的影片中,所有的画面都是以一种通用的照相机语言剧本为基础,以及一个 CLP库。

结语

如何实现对虚拟相机的精确、高效和随心所欲的操控,是本论文所要探讨的问题。因此,本论文就是针对这一要求而设计的。

其核心思路为:(1)将相机控制算法中的各参数进行分离,形成普适的相机控制算法。(2)可以将无穷多个照相机运动参数划分为一组照相机语言的有限组;(3)为每个照相机语言配置可重用的预制体,该预制体可以由摄制者重复地使用。

第一个问题就是,不需要导演为每个场景都写剧本。第二个和第三个特点为游戏制作人提供了一种方便有效的方法来描绘相机是如何移动的。

1/1页