|
原文出处知乎 https://zhuanlan.zhihu.com/p/470530908
写在前面
近年来,随着国内游戏市场的发展,越来越多的厂商将目光放在更复杂的游戏类型上,各种FPS/TPS、ACT/ARPG等类型也重新登上了舞台。与此同时,也产生了更多的对设计者的需求,尤其是核心战斗部分,在各大招聘网站上都可以看到战斗策划的需求,而其中无一例外,都要求设计者们拥有3C能力(Character / Camera / Control)。在中文内容中,除了刘祎老师翻译的《实时相机处理技术》(英文原名'Real-TimeCameras')与《游戏设计的236个技巧》外,很少有较为系统的且贴合设计者需求的游戏相机相关的资料,我自己在搜寻资料的过程中也饱受困扰。
因此,我将把《实时相机处理技术》中部分常用的内容与我实际在项目中遇到的问题结合,并附上近年来制作精良的游戏,分享一下我个人对于游戏相机的理解,由于个人经验所限,不可避免地会出现部分疏漏,也欢迎大家进行指正。想要更深入的了解游戏相机系统,也十分推荐仔细阅读《实时相机处理技术》。我将按照书中的章节分布,分享游戏相机中的概念、设计与实现方案,本篇为第一篇,将会介绍游戏相机中较为常用的基本概念,后续两篇会在随后进行更新。关于游戏相机中实际遇到的问题预期会在第三篇中进行分享。
(注:本文的写作角度是从策划角度出发,且重点在3D游戏相机方向,部分内容可能与实际的程序实现或实际中的相机操作有所出入)
一. 相机基本概念
本章节将会介绍游戏相机相关的一些基本概念 ,包括相机自身的组成部分、相机的基本属性、显示时的部分参数等。
后续内容中涉及到相关概念将不再进行介绍。
1.1 相机组成部分
本部分将介绍相机系统中常见的组成部分,包括相机管理器、相机、相机臂等等。此外,根据引擎中的操作习惯,本节中会将视口也作为组成部分之一进行介绍。
1.1.1 相机主体Camera
概念:游戏中的相机可以理解为与现实中的相机类似,可以捕获对应的游戏画面。Camera在游戏引擎中一般也会展示为现实中相机的模型,使用时有两种实现方式,一种以组件形式挂载在Character上,一种则是单独存在。通常来讲,我们会对相机主体的位置和角度进行操作,以达到不同的设计目的。
数量:在一个相机系统中,可以同时存在多个相机,通常游戏画面中只会将一个相机所观察到的内容作为画面主体,根据实际的设计需求,会在适当的时间切换相机,常见情况包括绝招/处决的释放、剧情动画的播放等等。
脚本:玩家可以在游戏运行时间接操作相机,并实时地观测到游戏画面的改变。Camera也可以由游戏中的脚本进行操作,如帮助玩家调整视角、按照脚本设置的固定轨道进行移动等等。
1.1.2 相机视口Viewprot
一般来讲,我们讨论的视口和相机处于对应状态。
显示设备的部分区域,用于渲染游戏场景的视见画面。
视口的形状和尺寸通常会发生变化,且在游戏运行时呈现为动态变化。在某些情况下,当前视口可能会与其他视口或图形元素发生重叠,且视口也可使用其它形状,而非总是矩形。
视口通常涵盖与相机、关联控制器输入、表面位置及尺寸、渲染模式等内容的信息
1.1.3 相机管理器Manager
在游戏中,一般存在不止一个相机,需要一个相机管理器全局的维护当前可用的相机列表,根据玩家的操作决定当前应该使用哪个相机的画面。此外,部分游戏的画面中同时存在多个相机的视野,也需要相机管理器进行管理。
相机管理器处理的内容包括相机的开关与切换、不同相机切换时的插值处理、控制器的输入管理、基于网络的角色切换与画面处理、与音频相关的处理、视口渲染等等。
针对相机管理器中的Update(),下列内容对其主要步骤进行了简单的总结:
- 根据脚本需求条件开启/移除游戏相机
- 更新活动相机
- 将控制器输入内容传递至活动相机中
- 更新音频系统的位置和速度数据(即多普勒效应)
- 针对当前视口构建渲染环境
1.1.4 相机臂/弹簧臂Arm
在第三人称游戏中,相机如果使用固定距离跟随玩家,会出现很多问题,包括被障碍物阻挡、运动时如何跟随等等。很多游戏使用相机臂作为这个问题的解决方案,通过相机臂连接相机主体与玩家角色,让摄像机与拍摄对象保持固定距离,并且在遇到遮挡时动态调整。
相机臂的长度可以根据实际关卡情况动态调整,相机臂的碰撞属性也可以自行设置,在大部分第三人称游戏中,相机臂已经成为相机系统的默认组成部分之一。
1.2 相机基本属性
本部分将会介绍相机中的基本属性,包括相机的方向、相机的表现风格、视锥体、FOV等等。
1.2.1 位置
讨论相机的位置时,一般会区分相对坐标与绝对坐标,在游戏中,绝对坐标一般指基于关卡/地图的世界坐标系的坐标,本篇中的绝对坐标的概念等价于世界坐标,不再进行额外转换。
相对坐标
相对坐标即子对象相对于其父对象的相对位置,常见于Character上的第三人称相机。
需要注意的是,相机的父对象不一定直接是Character,可能是Character上已经存在相对关系的某个对象,此时的相对坐标就会多层嵌套。
如在UE4引擎中,打开示例项目的Character蓝图,可以看到FollowCamera是CameraBoom的子对象,而CameraBoom与Character本身还有一层相对关系。
在改变相机坐标的过程中,要时刻确认当前操作的相对坐标是位于哪个相对坐标系。
绝对坐标
绝对坐标即相机在世界坐标系中所处的位置,不受相机目标的影响。绝对坐标可用于判断相机与场景内物件是否可能发生交互,或用于预测相机的移动轨迹
插槽(Socket)与相机臂
在引擎中,相机常常作为子对象进行使用。当相机被添加至角色中时,有时需要确定相机的插槽,插槽处即为相对坐标的0点。
插槽不一定是相对于角色位置的静态点,也可能位于角色骨骼或基于骨骼的直线上,随着角色的动画进行更复杂的移动。
上述情况基于直接添加相机本身,实际的引擎操作过程中,更多的会使用SpringArm组件(或类似的带有相机臂的组件),SpringArm组件可以理解为一根弹簧臂,其子项与父项存在一段距离,弹簧臂会尝试维持父子之间的固定距离,当出现碰撞时,会尝试收回子项。
当使用这类组件时,插槽一般对应的是相机臂的起点,而相机被放置在相机臂的终点上。
此处的内容可以参考对应引擎或插件的具体文档进行学习。
目标偏移(TargetOffset)与插槽偏移(SocketOffset)
在UE4中使用SpringArm组件时,一般不再直接操作相对坐标,而是通过操作相机臂来间接改变相机的位置,防止某些基于相机臂的检测出现问题。
插槽偏移用来替代相机自身的相对坐标,对应弹簧臂结束处的偏移。
目标偏移用来替代相机臂自身的相对坐标,对应弹簧臂起点处的偏移。
1.2.2 方向
相机的方向包括相机的朝向,以及相机自身的旋转方向。
偏航角Yaw
偏航角指相机的水平方向,在世界坐标系中,偏航角可通过围绕Up(Z)轴的旋转角度加以定义。可以理解为在大多数可操作镜头的游戏中左右移动时旋转的角度。
仰角/俯仰角/倾角Pitch
俯仰角为相机的垂直定位方向,相机围绕其右相轴旋转。
可以理解为大多数可操作镜头的游戏中上下移动镜头或低头抬头时旋转的角度。
俯仰角的快速大幅度变化比较容易导致玩家晕眩。
旋转角Roll
相机围绕其前向轴旋转的角度为旋转角。
大部分RPG游戏中较为少见,一般常见于飞行模拟的游戏中。
相对方向与绝对方向
在实际配置的过程中,需要区分当前的值是相对值还是绝对值。在部分引擎中,在角色上挂载Camera组件后,需要自行确定相机前向轴的方位与继承设置,防止出现角度叠加或覆盖的问题,使得配置混乱。
1.2.3 相机速度
相机运动或旋转到目标位置时,有时需要做出一定的滞后性来模拟现实中的某些效果,如移动时的缓冲效果,此外,有时也需要处理相机位置与目标快速切换的情况(会与插值一起作用)。一种方案是限制相机从当前状态到达目标状态的速度,包括移动速度和旋转速度。配置此类速度时,通常会配置以下几个指标:最小速度、最大速度、速度的变化曲线、加速度、延迟时间、延迟距离等等等。
相机的移动速度和旋转速度也会极大地影响画面的眩晕程度。
1.2.4 视锥体
视锥体可视为一种金字塔结构,其顶端被平行于底面的平面加以切除,如图所示。当然,其他形状的视锥体也并无不可,它们常用于模拟不同种类的相机镜头。此外,若将视锥体视为一种金字塔结构,则相机定位于金字塔的顶端,视锥体的中心线则表示为相机的视见方向。其中,视锥体的矩形平面亦将随相机的转动围绕当前轴加以旋转。
在视锥体的两个矩形平面中,距离相机位置最近的平面称作近剪裁面,而远端平面则称作远剪裁面。这里,位于远、近剪裁面之外的对象均不渲染。
通常,可以通过视野角度、纵横比,以及近平面和远平面到摄像机的距离来描述一个视锥体。
关于视锥体内外渲染的相关设计内容,如物件隐藏、LOD、FPS摄像机渲染,在后续会详细介绍。
1.2.5 宽高比
宽高比定义为水平视口尺寸与垂直视口尺寸之间的比值。
游戏中较为常见的值包括4:3、16:9、21:9,通常用于适配不同的终端设备。开发时,会选择一个基本设备的值进行适配,其他的值的适配视项目情况。
在游戏中,实时改变宽高比将会影响实际的视野范围,具体的影响将在FOV中介绍。
1.2.6 视场角FOV
通常情况下,视域(FOV)是指视锥体内顶部与下方界限之间的角度值,进而定义了游戏场景垂直方向上的投影可视范围。除此之外,FOV还可定义为水平角度(常见于美工师所使用的渲染软件中)。水平FOV和垂直FOV一般会涉及设备的宽高比。
游戏中使用的FOV通常为水平FOV(不同游戏根据具体的实际情况进行判断)。
PC游戏中常见的FOV值为90-105。
关于游戏中改变宽高比对视野范围的影响,在维基百科中有详细介绍:
以下将列举Wiki中现代游戏比较常用的缩放方式:
Hor+(水平+缩放)
比较常见的缩放方式,垂直FOV固定,水平FOV根据渲染分辨率的宽高比进行扩展,更大的宽高比带来更大的FOV。在实际游戏中,当玩家使用三屏时,可以在左右看到更多的视野。
Anamorphic(银幕黑边)
分辨率改变时,会加黑边。使用这种方式的游戏,通常基于更大的宽高比,回到更低的宽高比时,可以直接在上下加入黑边调整画面
Vert-(垂直-缩放)
随着宽高比的扩大,垂直FOV会变小,上下的可见范围会变小,左右的可见范围保持不变。
上述的改变也有可能影响视锥体的大小,进而对游戏中的渲染设置等产生影响,常见于射击游戏瞄准镜开镜后的情况。
FOV的作用
由于FOV可以影响视野范围,会对玩家的空间感产生明显的影响。但FOV并不会影响角色与目标之间的实际距离,只会影响目标在屏幕中的占比大小。在射击游戏与竞速游戏中,物体占比的改变会带来完全不同的体验。
眩晕感
人类肉眼的视场角大概在90-110度左右,通过屏幕表现出来的画面与人眼平时看到的画面越接近,玩家越不容易产生眩晕感。更接近这个范围的视场角更适合玩家长时间游戏。
视野
在上文中可以知道,FOV越大,视野范围越大,可以看到的场景越多。在不同类型的游戏中,可以通过调整FOV的大小,改变玩家可以获得的信息量。在合适的范围内,FOV越大,信息量越多,根据战斗发生的距离和想要给玩家的信息量,确定FOV的值,如恐怖游戏很少设置较大的FOV。
最大FOV
最小FOV
物体在屏幕中的大小
同理,FOV也会影响物体在画面中的占比,FOV越大,物体在屏幕中占比越小,视角效果越远
不同FOV下物体大小的对比
在射击游戏中,物体在画面中的占比将很大程度地影响玩家射击的精准度。
不同FOV下物体大小的对比
移动速度
指玩家感知到的速度,实际上FOV的改变并不会影响角色实际的游戏速度。FOV越大,同样距离的物体视觉效果更远,移动到相同位置时会感觉自己移动了更远的距离,导致角色看起来移动更快。
55FOV
105FOV
这个效果也可以运用在高速移动(如机甲、竞速)中,当移动速度变快时,增加FOV的值,在原有的速度增加上更加强化这种感觉,通过画面失真来营造速度感。同时结合动态模糊,可以直接做出速度线的效果。
另外一个会影响速度感的原因为地面与摄像机的距离,当VFOV改变时,视野中地面与相机的距离也会发生改变。当参照物(地面)与相机更近时,也会让速度看起来更快,类似火车近处的景物看起来移动得更快。
转动速度
同理,FOV并不会改变角色实际的转动速度和鼠标灵敏度,但区别在于,FOV确实会改变视野实际所占的角度。转动相同的角度,对于不同FOV下的视野,可能就是转动半个屏幕和转动两个屏幕的区别。因此,也需要从游戏是否会出现频繁的横向转动相机的情况的角度,来选择FOV的值。
55FOV
105FOV
后坐力和枪械手感
根据上述总结,FOV也会影响枪械在屏幕中的运动距离。FOV越低,枪械占比越大,当播放枪口上抬的后坐力动画时,会感觉上抬更明显,后坐力更大。
因此,在调试枪械手感时,也需要在统一的FOV下进行调试。
1.3 视角
根据相机的位置和展示的内容可以区分相机的视角,不同的视角大致遵循类似的相机基本概念和运动方式,但侧重点会有所不同,参数也需要重新调整。同一个游戏可能同时存在多种视角相互切换,视角之间的切换也是相机的重点之一。
1.3.1 第一人称视角
传统的第一人称(FP)相机模拟人眼的观察方式向玩家展现游戏场景画面,因此,这一类相机也称作视点(POV)相机。
针对游戏场景中的玩家角色人物,第一人称相机提供了强大的临场感以及真实感。实际上,该类游戏的划分方式亦与相机类型紧密相关,即第一人称射击游戏,简称FPS。甚至,某些采用POV相机的不同风格的游戏也可划分为同一类型。
玩家角色通常隐匿于FP相机中,这在某种程度上可降低游戏的临场感,当然,可添加相关视觉元素对此加以改善。
另外,FP相机还可置于飞机的驾驶员座舱内并添加相关视觉元素,以进一步强调玩家在游戏场景中的位置。该方案常出现于赛车游戏以及飞行模拟器中
1.3.2 第三人称视角
大多数3D游戏相机的置点通常与玩家角色分离,一般位于其后方或上方,这一类相机称作第三人称(TP)相机。此时,场景画面的渲染位置将位于游戏角色人物的外部。
与FP相机相比,第三人称相机的临场感则稍显逊色(部分原因在于:玩家角色模型可见)。但这丝毫无法掩盖其诸多优点。与玩家角色人物相比,尽管相机的相对位置以及方向较为灵活,但TP相机可清晰地反映出玩家角色与环境之间的关系且兼具交互性。
基于上述方案,玩家可针对灵活多变的位置数据以及方向数据实施动态选择,根据游戏体验需求,玩家还可自行选择场景视角。相机视野内容可实现即时改变抑或是根据设计者的期望要求实施插值计算。除此之外,相对于玩家角色人物的运动方向,相机还可动态地调整其距离以及角位,而非在预定义组合数据间实施简单的切换差值。
然而,在某些游戏环境下,相机会移出当前场景范围,抑或特意展现某些应被隐藏的游戏元素,因而需禁用上述控制操作。偶尔,玩家还会察看场景中的某些特定游戏对象,因而对相机实施限制还是十分必要的。
除了基于玩家角色人物的位置和方向定义相机之外,还存在其他方案用以确定第三人称相机的位置,如静态相机或某些受限于固定路径上的相机。在某些情况下,建议采用一致的相机解决方案,并采用有别于常规相机表现方式的某种特定处理方案体现相关游戏场景(如游戏中的关键人物Boss或其他特定场景)。考虑到敌方角色的物理特征以及需要充分展示的某些游戏对象,该方案是十分必要的。另外,根据特定的环境以及基于相机对象的潜在碰撞问题,对相机进行某种限定依然不可或缺。
如前所述,实现TP相机并非易事,其中涉及两个主要问题,即场景漫游以及碰撞检测。亦即,相机应能够在复杂(或动态变化)的场景环境中自由地穿越,并有效地解决与游戏对象或场景几何体之间的碰撞问题。除此之外,相机还可能被置于某一特殊位置并以一种特定方式显示当前场景。在很大程度上,这将取决于场景环境的物理布局,因而需要对相机的可能位置加以限制。该问题常与玩家人物角色的行为特征相关(如加速运动或跳跃运动),当然,可通过预定义的相机位置或移动方式减少或避免这一类问题。然而,游戏需求中应包含相应的动态解决方案。需要说明的是,上述问题通常较为复杂,在某些情况下,还需要针对具体的环境结构做出适当的调整。
另一个常见的问题是玩家角色人物的遮挡现象。大多数游戏允许玩家移至被当前环境所遮挡的区域。其中,较为常见的是部分遮挡以及临时性遮挡。然而,全部遮挡常会导致玩家失去方向感,这在紧张的战斗场景中将会是一个十分严重的问题。
另外,TP相机内的视线问题也颇具意义。在大多数情况下,玩家并非总是沿其与目标对象之间的视线方向进行观察,某些视线元素(如场景中的2D或3D标线)、火力跟踪装置等内容都将会大大地方便玩家的定位操作。同时,自动瞄准装置(无须玩家输入控制)、辅助瞄准装置(玩家需要输入操控的支持,但其精确度无须达到像素级)以及自动定位装置均可大大提高玩家的精准度。第4章将对玩家与相机操控之间的关系加以进一步的阐述。
无论如何,TP相机值得关注。TP相机不仅可在游戏场景(包含丰富的图形元素,如动画)中充分展示玩家(或该玩家所控制的角色)的存在,还可清晰地显示玩家在场景空间中的位置状态以及相机的定位和移动方式,这一点是真实相机设备无法比拟的。除此之外,如果加以正确的利用,第三人称相机还可向玩家提供信息线索。然而,若相机无法得以正确的实现,或无法完美体现交互式游戏中所蕴含的动态变化特征,则玩家的游戏体验将会大打折扣。
针对于全部潜在动作,TP相机的选择方案应支持玩家角色人物所包含的动画操作。考虑到相机的表现风格,这将会产生另外一个问题,即如何确定相机的方向。角色或动作类冒险游戏通常会将目光集中于游戏角色本身,因而相机的位置往往设置于角色的上方。无论人物角色采取何种动作,相对于显示屏幕,都将保持同一位置。当角色人物呈现为静止状态时,该方案工作良好;一旦角色人物开始移动时(尤其是以较高的速度运动时),该方案对于运动方向上的、基于玩家角色的前视问题将十分有效。同时,这也使得玩家可以更好地对未知环境加以预测,并拥有充分的时间对相关游戏事件(如敌方火力进攻)加以反馈。
第三人称相机的概念十分广泛,大多数游戏运用都是第三人称相机,本篇中大部分问题也基于第三人称相机来进行讨论。在后续分享中,会对第三人称相机在ACT游戏中的运用进行实际讨论,并结合个人的项目开发经验讨论可能存在的问题。
二、相机类型
根据游戏需求,可以在和游戏类型分离的情况下,确定几种相机类型:漫游相机、战斗相机、剧情相机/特写相机。几种相机类型在游戏中可以相互切换,切换过程中也有很多的技术问题。
2.1 漫游相机
我们通常可以将第三人称相机在场景中移动的方案称作漫游相机,大部分RPG游戏在未进入战斗状态时,相机跟随玩家在地图中移动都可以视作漫游相机。
关于漫游相机的设计,一般需要考虑相机与场景间的碰撞与遮挡、相机如何跟随玩家移动、如何确定相机位置,场景中有哪些物件需要被剔除,减轻玩家的眩晕感、减少玩家的操作次数与操作难度等问题,以上问题会在第二篇分享中,根据不同的游戏类型实际举例进行说明。
2.2 战斗相机
此处的战斗相机特指非FPS游戏的战斗相机,当进入战斗状态时,根据设计者的意图,会改变相机的移动逻辑,并更改相机的参数,将视觉重点聚集在战斗信息中。战斗相机使用与漫游相机不同的方案可以更好地将游戏的探索部分与战斗部分解耦,专注于提升战斗体验。
有时,会设计不止一层的战斗相机方案,如使用锁定相机等方案,或对不同的敌人数量使用不同的相机等等。战斗相机也可以不止使用一套配置,方便塑造不同的战斗体验。
2.3 剧情相机/特写相机
此处将剧情相机与特写相机放在一起进行介绍,因为其具有相同的性质,如玩家在播放剧情相机与特写相机时,一般都无法操作,都有一定的触发条件,且触发后会播放固定长度的播片(CG或实时演算等技术)等等。
剧情相机与特写相机一般不局限于相机的视角,在第一人称与第三人称都可以运用。
三、其他相关概念
此部分只会介绍基础概念,具体内容可以自行讨论
3.1 震屏
由于震屏在游戏中应用十分广泛,因此在这里单独介绍。
震屏常用于塑造打击感,包括ACT、射击游戏都有运用。可以根据震动源距离相机的方向、距离、强度设置震屏。
3.2 动态模糊
游戏中的动态模糊是什么概念? - 知乎
https://www.zhihu.com/question/27298616
3.3 景深
模拟相机镜头的不完美聚焦状态可视为另一种向电影摄像机添加真实感的手法,这可通过视域变化并结合景深效果得以实现,最终效果将对处于聚焦状态的对象实施稍许模糊操作。需要注意的是,
模糊状态不应一直出现,当相机的焦点从一个物体移至另一个物体时,视域值应相对于目标值发生短暂的变化,与此同时,聚焦状态也应随之发生改变。另外,该操作还可用于对镜头中的无关对象进行模糊操作,进而将玩家的注意力转移至某一特定位置。
3.4 30°规则
瞬间改变镜头朝向时,转动不超过30度则能意识到是“镜头转了一个角度”,大于则会认为“换了个分镜”(跳跃剪辑)
总结
本篇中大致介绍了部分游戏相机相关的概念,所有带有引用标记的内容为《实时相机处理技术》的原文,部分内容参考在文章末尾附上了链接。文章为策划视角,关于程序实现与部分概念如果有出入,欢迎提出指导意见。
本文主要还是偏向于第三人称3D游戏透视相机的基本概念,附带上了一些个人对于某些参数的理解,具体的设计与实现会在后面的文章中一一分享,如果文章中有疏漏的地方,也欢迎在评论区指出,感激不尽。
PS:关于四元数等内容,由于有很多文章分享,不再赘述。
PPS:关于图形学与渲染相关的内容,由于并不在相关领域,出现错误在所难免,本文中关于渲染的相关内容,都是从策划角度出发,只考虑最终效果,且不涉及渲染的相关专业知识。
参考链接
https://www.cxyzjd.com/article/weixin_30312557/99867051
https://api.xiaoheihe.cn/bbs/app/link/web/view?link_id=75695372
https://en.wikipedia.org/wiki/Field_of_view_in_video_games
https://www.gameres.com/888690.html
https://www.zhihu.com/question/27298616
文/散漫的十七
原文:https://mp.weixin.qq.com/s/7YaGGbMrtRi46K4HbjTSYw
|
|