今天在玩「每天酷跑」的時候,吃到吸鐵石,忽然注意到,它的金幣雖然移動的很快,卻不會出現「卡」的現象;而我以前用Unity3D作的一個小遊戲在iPhone上顯示的幀率是30,可是缺感受卡,而在電腦上,幀率是100多,卻不卡。當時沒太想明白,以爲莫名其妙啊,30fps的遊戲是不會卡的纔對。這幾天看了《Real-Time Rendering 3rd》中運動模糊的相關內容,再結合「每天酷跑」和「Doodle Jump」,大概理解這類遊戲是如何提高視覺效果的。算法
播放電影的幀率通常是每秒24幀,咱們以爲很流暢,即便電影中出現了很快移動的物體,好比一輛車飛馳而過,咱們沒有以爲怪異,由於每幀的圖像是模糊的,模糊的程度和物體運動速度相關。然而,遊戲中每幀畫面倒是清晰的,若是30fps的畫面中,物體移動很快,這個時候看了就會以爲有卡頓的現象,由於缺乏了運動模糊;若幀率提升到60fps或者更高,這個時候看着就會明顯舒服不少,由於中間部分變得連貫了,模糊的部分由咱們人眼完成了,相似於真實場景中有物體快速從眼前移動的狀況。若是遊戲中沒有高速移動的物體,那麼30fps和60fps看不出差距;如有高速移動的物體,根據《Real-Time Rendering 3rd》的描述,帶運動模糊的30fps的效果和不帶運動模糊的60fps的效果是差很少的。學習
在《Real-Time Rendering 3rd》中描述了幾種主流的運動模糊的方法,其中「veolocity buffer」的方法是使用比較普遍的,書中也提到了對其改進的相關算法,改進後的效果仍是比較不錯的。這種方法在大型3D遊戲中使用無可厚非,好比文中提到的「殺戮地帶2」,可是若是隻是「每天酷跑」或者「Doodle Jump」這類小遊戲,須要用到這種技巧嗎?仍是說提升幀率就能夠了?在大型3D遊戲中,提升一倍幀率,開銷會增大不少,因此須要採用運動模糊;可是在小遊戲中,提升幀率不失爲一個好辦法。根據截圖觀察來看,「每天酷跑」和「Doodle Jump」的幀率必定不止30fps(多是60fps),由於若是隻是30fps,以這兩個遊戲的速度必定會出現卡頓現象,不信的童鞋能夠拿Unity3D或者其餘引擎作一個場景,讓一個物體快速移動,速度能夠選用「每天酷跑」裏導彈的速度,30fpf時會以爲畫面怪怪的,可是提升幀率後就正常了。優化
「每天酷跑」和「Doodle Jump」的遊戲截圖以下,由於「每天酷跑」吃到吸鐵石之後我忙着截圖,沒注意跳,就掛了,因此只截了一個圖;「Doodle Jump」在跳的不一樣速度的地方分別截圖:spa
由截圖能夠看出,「每天酷跑」即便是在吃了磁鐵道具能夠吸金幣的狀況下,截圖依舊是清晰的;「Doodle Jump」不論跳起到哪一個階段,截圖都是清晰的。而在遊戲中感受這種快速移動是很流暢的,絲毫感覺不到30fps時候的那種快速移動的卡頓,因此必定是採用了提升幀率的方案來提升視覺效果。(感謝5樓評論的「鎏」童鞋,cocos2d的默認幀率是60fps,我以前用的是unity3d,默認幀率是30fps,纔會有了卡頓的問題。看來這些遊戲應該不是通過了優化,並且引擎給他們設置了一個很合理的幀率)
3d
有些看着很簡單,一直認爲是正確的東西,其實不必定是正確的,好比我以前就認爲30fps的遊戲不會卡,由於電影每秒24幀就不會卡。可是,很明顯事實不是這樣的,在本身作遊戲的時候出現30fps還感受卡的怪異現象,當時去網上搜了卻沒有解決,以後經過一系列學習才把問題解決了。這說明理論知識是很重要的,對分析問題頗有幫助,若是不是學習了運動模糊,可能我一直都不知道問題到底出在哪裏。另外一方面,在本身沒有動手作過的狀況下,千萬不要盲目的認爲這很簡單,由於極可能人家用了多種技巧,只是我不知道而已。因此,注重理論積累,多動手實踐,遇到問題勤于思考,才能讓自身水平不斷提升。blog