為什麼電影 24 格就行,但遊戲卻要 60 格?

作者 | 發布日期 2015 年 10 月 22 日 | 分類 APP , 遊戲主機 , 遊戲軟體
FPS-1

大家玩遊戲這麼多年,或許都會有那麼幾個疑問:為什麼 2D 影像化的古董超級瑪利歐不卡,但 3D 遊戲卻卡了?為什麼電影每秒 24 格不覺得卡?但遊戲沒 30 格就卡得受不了?雖然網上有各種各樣的回答,但很多都不盡科學不夠全面,所以筆者還是來全面科普一下吧。



生理基礎

雷鋒網配圖

▲ 電影膠捲記錄的逐格資訊。

 

所有的故事都要從人類肉眼的「視覺暫留」和「腦補」現象說起,前者是指人類視網膜在光訊號消失後,殘像還會保留一定時間的現象;後者是大腦自行補足畫面中間隔的「腦補」功能。它們的混合作用,讓我們誤以為每秒 24 格重播的照片是「連續」的。

而至於為什麼要把數字定在 24,這裡面更多是約定俗成和玄學,電影規格本身也經歷了 16 到 24 格的轉變,這個數字以後估計也會繼續增長。而 PAL / NTSC / SECAM 三種電視訊號規格,把格數定在每秒 25 格和 30 格的原因,其實只是因為不同地區的供電頻率不同(50Hz 和 60Hz)……為了方便計算,採用 NTSC 制式的美國和日本,在遊戲中很自然地了沿用了每秒 30 格的習慣(NTSC 制式為 29.97 格)。

但為什麼看 24 格的電影毫無違和感,但 30 格,甚至 60 格的遊戲中也會出現卡頓?這裡直接說結論,決定遊戲流暢度有 4 個:動態模糊效果、操作回應、影格率和影格率均勻度,當中以動態模糊最為重要。

 

動態模糊

動態模糊,是指相機快門慢於物體運動而導致的運動軌跡拖影。3D 遊戲和電影的重要差別:電影是現實光影的記錄,而 3D 遊戲是 3D 模型形狀/位置的即時演算圖,前者會有動態模糊,而後者不會。

電影是恒定頻率拍攝的膠捲 / 數位照片,它可以完整記錄一段時間內的光線資訊。一般 24 格每秒的影像,會選取高一倍的 1/50 秒的快門,可以完整記錄半秒的光線資訊。而這些「多出來」的豐富影像資訊,會像重影一樣疊在一起而造成動態模糊/拖影,其原理和「光繪」一樣,只是快門不是幾秒,而是 1/50 秒。

雷鋒網配圖

▲ 高快門速度的樣張。

 

雷鋒網配圖

▲ 低快門速度的樣張。

 

在人類大腦中,動態模糊是視覺訊息量的一個重要表現,即使實際看到的格數不夠,加入動態模糊的間隔畫面也足夠我們用來進行腦補,從而實現「流暢」。另外,偏題一下,如果同樣的每秒 24 格,如果快門速度提高到 1/96 秒,那膠捲中記錄的光線資訊只有 1/4 秒(24×1/96),不見的光線資訊會讓模糊效果減弱,這樣的電影看起來也是會有卡卡的感覺。

雷鋒網配圖

▲ 左側為不同快門速度記錄的光線訊息量(快門越慢,記錄的光線越多),右為實際畫面。

 

而遊戲則是把這個「快門速度」提升到極致的產物,遊戲中的 30 格,是遊戲引擎生成的 30 個無限短的瞬間畫面,而且這些瞬間無論多快,物體本身都是清晰無比,絕對不會有模糊效果。如果這時候還以 24 格每秒播放,大腦會抗議,這東西動的這麼快,為什麼我還看得那麼清楚,完全不科學啊,結果「腦補流暢度畫面」過程就無法進行,我們就真的在看播幻燈片了。

要解決這個問題,要不提高取樣率,要不就人為增加模糊效果。前者是下面會說到的高更新率方案,而後者就是增加模糊效果欺騙大腦,讓它以為自己看到是高訊息量的畫面(然而模糊效果也很耗資源)。

 

畫面更新率大小

遊戲中的物體如果每秒移動 1 個畫素點,我們或許還能覺得流暢,但如果物體每秒移動 10 個畫素點,那就有明顯段落感了。這時候需要提高取樣率,把中間缺掉的畫面補出來,如果更新率提高到每秒 10 格,我們就可以看到接近剛才 1 秒 1 個畫素點的流暢度了。

透過把每秒 24 格的畫面,提升到每秒 48、甚至 60 格,雙眼接收到的訊息量大到一定程度,就足夠用來「腦補」出流暢效果了。雖然最完美的遊戲應該是要格數盡可能地多,那樣才是真正類比現實情況,但對於遊戲來說,運算格數越多,需要的性能就越高,這個方案的代價太大了。而現在大家公認的是,做到 30 格就能完成腦補過程了。

 

更新率均勻度

然而實際遊戲中,30 格照樣會時有卡,甚至提升到 60 格也還是會卡。平時我們看手機評測的時候,常見兩部不同 GPU 的手機,就算顯示的 FPS(每秒格數)相同,照樣也是會有流暢度差異,這是為什麼呢?

雷鋒網配圖

▲ 兩款顯卡的 FPS 對比。

 

雷鋒網配圖

▲ 兩款顯卡 FPS 渲染時間對比。

 

這裡的問題出在「格」的精確上。即使之前時間都能 30 格以上演算圖,但只要有那麼幾個瞬間跌破 30 格,那依舊是卡。理想情況下的 30 格每秒,是 30 格均勻分布,但實際上有可能前半秒計算 29 格,最後的整整半秒只算了 1 格。

因為運算能力和畫面複雜度的限制(例如從平原中突然有巨大爆炸的畫面),前半秒演算圖壓力小,可以滿格跑,但一到爆炸場景,運算量暴增,來不及計算,後面格數就下降了。肉眼雖然對格數的絕對值不敏感,但明顯的格數變化還是能輕易察覺的。

很明顯平時我們看的 FPS(每秒更新率)的精度完全不夠用,我們需要把精度,從每秒多少格,提升到每毫秒多少格才能精確衡量畫面更新率的穩定性。

 

回應時間與操作速度

遊戲和電影的最大區別是,遊戲是需要使用者做出動作並對動作進行即時回饋。除了視覺流暢,我們還需要操作流暢。大家追求 60 格高更新率的重要原因,為的就是降低回應時間。我們感知一個動作是否完成,是要機器接受操作資訊,並最終反映在下一格才算完成。而實際操作中,大多數遊戲引擎在接受操作指令後,要 3 格間隔才能呈現在畫面上。

畫面更新率速度越高,我們能感知的操作速度就越快。30 格的遊戲,即使忽略操作指令傳送速率,每個畫面持續 33 毫秒(1s/30=0.033s),一個操作需要 100 毫秒(33 毫秒×3 格)才能反映在畫面上,而 60 格的遊戲,則只需要 50 毫秒就能反應過來了。這 50 毫秒,在遊戲中很有可能決定你是爆別人頭,還是被人爆頭了。

另外,如果出現畫面壓力太大,機器來不及運算出畫面,畫面出現掉格甚至卡頓,我們的操作指令也是會被順延輸入的。效果就是我們幾秒前做的操作,在幾秒後才逐一顯示在畫面上,那就會非常卡了……

雷鋒網配圖

 

(本文由《雷鋒網》授權轉載)

延伸閱讀

如果你喜歡我們的分享和文章,請幫我們按個讚

雷鋒網

雷鋒網專注於移動互聯網。
雷鋒網由一群移動互聯網的信徒建立,。

雷鋒網努力做好移動互聯網的三個代表,代表移動互聯網未來發展的方向,代表移動互聯網的顛覆創新思潮,代表移動互聯網創業者和從業者的利益。
關鍵字: , , , ,

發表迴響