※ [本文转录自 GameDesign 看板 #1N2K8JNh ]
作者: cjcat2266 (CJ Cat) 看板: GameDesign
标题: [心得] FFXV Platinum Demo 的摄影机操作
时间: Sun Apr 10 01:55:27 2016
我在过去的几个游戏专案上负责过摄影机操作,算是有些经验
在此我就针对这demo的摄影机操作分享一些技术方面的浅见
至于画面和游戏性,网络上已有充分的讨论,而且我的文笔也不算很好,就略过囉
因为之后可能会转贴到非技术板
我尽量把pseudo-code用中文表示,但仍无法完全避免使用工程用语
我个人很注重的两点
就是游戏的"视觉连续性(visual continuity)"和"视觉流畅性(visual smoothness)"
两个frame之间突然发生的视觉变化,除非刻意,都算是视觉上的不连续
像是摄影机位置突然跳个两公尺、物件突然出现或消失
在业界,这种视觉瑕疵有个专有名词,叫做"突跳(pop)"
就算没有pop,只要让玩家觉得"视觉上卡卡的、不顺畅、不自然",就是缺乏视觉流畅性
我在开发每个大学游戏专案的最后两三个月,都专注在消除pop和加强视觉流畅性
我觉得platinum demo的视觉连续性和流畅性,都有失专业水准
不,更正确地说,我觉得连专业游戏最低该有的水平都没有达到,让我玩起来很不舒服
我非常希望FFXV可以成功,所以期望制作团队可以做出改善
以下列出三点我觉得不合格的项目
(设Y轴指向正上方,XZ平面为水平面)
1. 摄影机Y轴位移紧密锁定角色Y轴位移
这是游戏中摄影机给我的感觉
(摄影机Y轴位移) = (角色Y轴位移) + (固定Y轴差异)
摄影机的Y轴位移与角色的Y轴位移呈100%正相关
这算是犯了游戏摄影机操控的大忌
除非刻意画面切换,不然不应该如此紧密随着单一变量做位移改变
玩家可能会突然踏上一个阶梯、跳起、落下
也有可能因为抓地逻辑没有处理好,造成角色Y轴位移上的pop
这个pop就赤裸裸地被复制到摄影机的Y轴位移,造成视觉不连续
如果摄影机位移没有pop,就算角色位移产生pop,产生的视觉瑕疵相对小很多
一般做法是让摄影机的位移变量"绑上一个弹簧",跟随目标位移滑顺地移动
我之前有写过一系列的"数值弹簧"技术文,有兴趣的人可以参考看看
http://wp.me/p4mzke-LD
2. 摄影机位移并非二次圆滑
为方便解释,我从圆座标的角度来看摄影机XZ轴位移
设R为角色与摄影机之间的距离,T为角色至摄影机的线段与+X轴之间的夹角
这是游戏中摄影机给我的感觉
根据目前情况设定(目标R)
根据玩家R3输入更新(目标T)
(差异R) = (目标R) - (摄影机R)
(差异T) = (目标T) - (摄影机T)
(摄影机R) = (摄影机R) + (弹簧常数) * (差异R)
(摄影机T) = (摄影机T) + (弹簧常数) * (差异T)
让某个数值圆滑地追踪目标数值,这是很常见的作法
用在一般物件上是没什么问题,但是用在摄影机上就还是有些瑕疵
把目标变量vs时间画成图表 y = 目标变量(t)
可以看到一条连续的曲线
把目标变量的变化vs时间画成图表 y' = 目标变量的变化(t)
也就是目标变量的"速度图表(一次微分)"
看到的是一条连续的线段波折图
把上述图表的变化vs时间再画成图表 y'' = 目标变量的变化的变化(t)
也就是目标变量的"加速度图表(二次微分)"
看到的是不连续、一堆断开的线段
对一个变量而言
如果y 图表是连续的,则称此变量有C0连续性
如果y' 图表是连续的,则称此变量有C1连续性
如果y''图表是连续的,则称此变量有C2连续性
上述的摄影机变量更新逻辑,仅达到C1连续性
但是生活中的加速度是连续变动的,不会瞬间变化
就算云霄飞车,加速度仍然是连续变动,位移量至少保持C2连续性
所以如果摄影机的位移没有达到C2连续性,便会让人觉得颠颇、不顺畅
使用至少有C2连续性的摄影机位移
会让玩家看起来比较自然舒畅,亦可改善一些玩家动态晕眩的情况
上一点提到的数值弹簧,也可以提供变量C2连续性
3. 过度剧烈与频繁地改变角色与摄影机之间的距离
游戏中为了避免有物体跑到角色和摄影机之间
造成角色和摄影机间的"视线(line of sight, LOS)"被截断
会缩减角色和摄影机之间的距离(摄影机R)以避免障碍物
这个想法是正确的,但是这demo却过度使用,使得(摄影机R)变化太剧烈与频繁
不但会让耐受度低的玩家感到不适,也会影响游玩上的舒适程度
避免摄影机切入场景是必须的
所以为了避免切入场景而改变(摄影机R)在可接受范围内
至于场景上琐碎的装饰品(灯柱、栅栏、碎石),就没有避开的必要
另外,摄影机也不需要避开敌人
相信不少人有经历过,在战斗中敌人突然跑到主角和摄影机中间
结果为了要让玩家可以清楚看到主角,摄影机就突然pop到敌人和主角之间
不避开障碍物的话,势必会产生摄影机切入物件的视觉瑕疵
有个不是很吃效能的解法,叫做"混色淡出(dither-out)"
https://en.wikipedia.org/wiki/Dither
Uncharted的2014年PSX demo中有秀出混色淡出的应用
请仔细看以下影片,摄影机没有避开草丛
草丛在快要切到摄影机的时候混色淡出
这种处理方式可以有效地消除摄影机切入物体的视觉不连续性
https://youtu.be/Ow2cL-pp6p8?t=12m
以上是我的一些浅见
如果对摄影机操纵的技术层面有兴趣
可以参考来自thatgamecompany(风之旅人的开发团队)的John Nesky的演说
https://www.youtube.com/watch?v=C7307qRmlMI
这是他在GDC(游戏开发者高峰会)的演说
三年前,我有去参加他在西雅图PAX Dev的类似演说,算是这场演说的前身
他当时提到,之所以会花这么多心力研究游戏摄影机操作
是因为他的女友非常容易动态晕眩,很多游戏都不能玩
他下定决心,要让他的女友能够很投入地玩他做的游戏
于是Journey才有如此自然又令人舒畅的摄影机操作