我在過去的幾個遊戲專案上負責過攝影機操作,算是有些經驗
在此我就針對這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才有如此自然又令人舒暢的攝影機操作