作者:蔡小帥
鏈接:http://www.zhihu.com/question/21081976/answer/34748080
來源:知乎
著作權歸作者所有,轉載請聯系作者獲得授權。
雖然電影24FPS也不如60FPS的流暢,但是24FPS不會讓人覺得卡,甚至12FPS都不會讓人覺得卡,而24FPS的游戲能讓人很明顯的感受到卡,12FPS就是幻燈片了,這是為什么呢?有兩個原因。
第一個原因就是由兩者圖像生成原理不同造成的。
電影雖然只有24FPS,但是每一幀都包含了一段時間的信息,而游戲則只包含那一瞬間的信息。一個電影在一段時間內曝光,畫面的每一幀,都包含有一段時間的信息,這段時間的長度由快門時間決定,最長不能超過1/24秒,所以視頻中每一幀包含信息量較大。而游戲的第一幀包含第0秒的信息,第二幀包含了第1/24秒的信息,只有這一個瞬間的信息,這中間的信息完全丟失了,所以看起來會卡。
用圖來解釋一下,比如有一個圓從左上角移動到右下角,第一幀是這樣的:
如果是電影,第二幀可能是類似下圖這樣的(圖畫得不好但是就是這個意思):
如果是游戲的話,第二幀就應該是這樣的圖:
看出區別來了嗎?這是因為電影和游戲的畫面生成方式的本質不同造成的,電影的畫面是拍攝的實際場景,在一段時間內膠片持續曝光,這一段時間里人物場景的變化都會被拍到膠片上,每隔一段時間換下一張膠片再曝光一段時間。相機也是一樣的原理,如果我們把手機鏡頭使勁的晃動然后拍一張照片,會發現照片是模糊的,這就是因為曝光過程中把移動過程中一段時間的場景都拍進去了,就模糊了,我們就能感覺到電影里面的人物是移動過去的,可以看到移動的軌跡,畫面是“連貫”的。
而游戲的畫面則是由顯卡生成的,顯卡通過計算生成一幀畫面,生成完畢后再計算下一幀,這樣每一幀都是清晰的,不會有模糊,像我上面圖中的那個圓,不管他的移動速度是快是慢,顯卡只計算兩幀畫面,中間的移動軌跡一概不會顯示,我們看到物體就好像老版西游記里面孫悟空施一個法術“就”的一聲飛過去了。
這里大家可以花10秒鐘時間做一個非常簡單的實驗,先緩慢的揮手,發現手的影像是很清晰的,再快速的揮手,發現手的影像不清晰了,有了殘影,但是你絕對不會覺得畫面卡了,這就是電影的效果。我們再來模擬游戲的效果,先緩慢的移動鼠標,再快速的移動鼠標,發現了嗎,快速移動的時候鼠標卡了,鼠標是一下下的跳動過去的,這就是游戲的效果了,發現為什么卡了嗎。
游戲里慢慢的移動,他也是一秒鐘60幀畫面,飛快的移動,也是60幀,這樣當你很快移動的時候,會發現“卡”了。當鼠標一秒移動60像素的時候,顯示器一秒輸出60幀畫面,一秒移動600像素的時候顯示器還是一秒60幀畫面,問題就來了,當一秒60像素的時候,鼠標箭頭是1像素1像素的移動,一秒600像素的時候,箭頭就變成10像素10像素的移動了,畫面就不連貫了,就卡了。電影就不一樣了,1米1米的移動的時候,每幀的畫面是清晰,10米10米的移動的時候,人物動作就會出現拖影,給人以動感的效果,連貫而不卡。人眼的視覺暫留和相機拍攝視頻的原理類似的,人的眼睛不可能在第0秒看到一副畫面,到第1/24秒又看到一副畫面,而是連續的接受光照在視網膜上,持續曝光,所以快速揮手,可以看到手的殘影,效果跟電影里面的模糊類似的,就算FPS不高也不會卡了,而如果在游戲里面快速揮手,就只能看到手在兩邊來回跳,中間的畫面沒了,就卡了。
在上面的實驗中,如果試著更快速的移動鼠標,并且讓鼠標做出更復雜的動作,例如畫8字形,會發現中間丟失的關鍵幀更多了,越發顯得卡了。這也就可以解釋為什么RPG游戲以較低幀數運行的時候不覺得卡,而射擊以低幀數運行的時候會卡了。這是因為射擊游戲節奏快,人物移動迅速,一旦幀數不高,中間的動作就會有斷檔,會覺得卡了,所以射擊游戲對幀數的要求更高。就像不管我們怎么移動鼠標,顯示器始終60FPS沒變,但是快速移動就是會卡,這是游戲和電影生成影像的原理本質不同造成的。并且射擊游戲對操作響應速度的要求非常高,一旦FPS低了操作也會反應不過來,RPG游戲對操作反應速度要求明顯低多了,像回合制的壓根就無所謂了,喝杯茶再來操作都行,射擊游戲里的生死都在毫秒間,幀數一低隨時掛掉,像Quake3中某個跳躍動作甚至還要求必須在125FPS以上才能完成。
現在很多游戲特別是賽車游戲,當速度變得很快的時候,會加入一個動態模糊的特效,就是模擬電影中這種高速運動的物體有拖影的效果,打開之后會覺得畫面連貫一些。但畢竟是模擬特效,還是不能和真拍出來的效果比,做得不好反而會畫虎成犬。
第二個原因就是電影的FPS是穩定的,而游戲則是不穩定的。
電影雖然是24FPS,但是他固定每隔1/24秒換一次畫面,畫面出現頻率是固定的,這點雷打不動,畫面是穩定的。而游戲乍一看是60FPS沒錯,但是為什么同樣是60FPS,有的顯卡流暢有的卡頓呢,有人就曾經做評測研究過,為什么一模一樣的FPS,有些顯卡會感到“頓卡”呢。評測是這樣的,他記錄了在一秒里面,每一幀都在什么時候出現,于是一下子真相大白,流暢的顯卡,他60幀畫面差不多是每隔約1/60秒出現一次,也就是說顯卡穩定的每隔一段固定的時間生成一副畫面,卡頓的顯卡,可能前半秒生成了59幀畫面,后半秒就只有1幀畫面了,那個評測里面提到一個概念“最大幀間隔”,也就是說兩幀之間的間隔時間,如果是穩定的,那畫面就流暢,如果不穩定,就會卡,有的顯卡最大可達數百毫秒,相當于一秒才幾幀畫面,那自然會讓人感覺卡了,如果穩定在33毫秒,只需要30FPS,就會讓人覺得基本流暢了。
除了顯卡性能的不穩定導致上面這種情況出現,就是穩定性能的顯卡,也會出現FPS不變幀間隔時間長短不一,因為每一秒里面的畫面有很多幀,每一幀的畫面復雜程度都不一樣。而且不管是PC還是主機,除非顯卡性能大大超越游戲硬件需求,否則FPS都不可能穩定在某一數值,游戲評測里都會有平均FPS和最低FPS,最要最低FPS低于了某一數值,游戲自然會在某一時間頓卡。例如最近的大作仙劍6,顯卡吧有人測試過用四路泰坦X,依然會在某一時刻FPS跌到0,這種游戲體驗無疑是毀滅性的。
大家都知道,游戲的卡頓分很多原因。RTS游戲中單位出現過多,CPU計算能力不夠,會卡,游戲特效變好,顯卡算不過來,會卡,切換地圖讀硬盤,會卡,場景太大內存放不下,會卡。如果我們把FPS(每秒幀數),換成每分鐘幀數,可能會發現,一個游戲每一分鐘的幀數都會大于3600,也就是每秒都大于60,那這樣就不卡了?可能前面30秒每秒有100幀畫面,后面30秒每秒只有20幀畫面,那后面30秒無疑很卡了。這樣來看完全就是耍流氓呀,回過頭再來看每秒幀數難道不也是在耍流氓嗎?我們只看一秒鐘總共有多少幀,而不去看更小的單位,每100毫秒有多少幀,這也是在耍流氓,在一秒鐘內整體似乎是流暢的,可是分割到百毫秒十毫秒的時候,并不是每百毫秒十毫秒都是流暢的。所以光看一秒鐘有60幀就認為不卡,是錯誤的,就像我們不能說一分鐘有3600幀就不卡了一樣,“卡”是發生在更短的時間內,而不是一秒。
所以,60FPS的游戲會卡。
如果大家玩過2D游戲就會感受到,2D游戲的FPS不高,但是不卡,因為2D游戲的人物動作大都是播片,實際上就是播放一段簡單的動畫,哪怕只有20多FPS,甚至十幾FPS,一樣“不卡”,有些無良游戲商制作的2D游戲,人物動作一秒就幾幀畫面,雖然看起來卡卡的,也不是3D游戲的那種卡頓感,因為動作是穩定播放的,不是即時生成的,既不會出現原因一中動作過快“看不清”的情況,也不會出現原因二中FPS不穩定的情況。當然有些2D游戲里面也有即時生成的光影,當硬件機能不夠的時候,連播片都播不動的時候,依然會“卡”。