看板 GameDesign 關於我們 聯絡資訊
作者:NDark 時間:201001 "容易被遺忘的遊戲設計模組"之一: FPS counter http://0rz.tw/61wWb FPS是frame per second的意思。最早從電視電影的製作與撥放來的。 意思是每秒撥了幾個畫格。有在轉錄影片的朋友應該比較熟悉, 台灣電視訊號的標準就是NTSC他的FPS就是29.97。每秒換了幾乎30張影像。 格數(長度)相同的影片,如果撥快一點, 影片(時間)長度就會比較快撥完。人物就像快轉一樣。 (因為播放速度與原始影像拍攝的速度不同) 在我講下去之前,請務必思考上面這段說明與下面的問題。避免跟不上。 所謂"撥快一點"到底是什麼變快了? 直接跳到遊戲。要怎麼實現我的遊戲的撥放速度符合電視的標準? 很簡單,1/30秒畫一張就好了。畫完就送給電視。 所以最Naive(這裡必須說明Naive是直接簡單的意思,不一定等同於笨)的做法就是 用一個鬧鈴(timer,比較正確的講法是計時器) 每跳1/30就叫我的遊戲工人 把目前的牆壁刷成新的畫面, 然後請電視訊號線的長官來拍照驗收,送件。 上面的這個方法問題在哪裡?很明顯。 假如我有時候工人畫的快,有時候工人畫的慢,畫完的時候才驗收(傳送) 這樣電視顯示的結果也會忽快忽慢。 萬一電視收件的時間跟郵局一樣有限制,貨到的時候郵局已經下班,那這個畫格就掉了。 (這是白作工,明明就有畫,可是被之後的新貨物蓋掉了) 延伸思考 假如我某一個畫格突然運算量大增,此畫格畫了1秒才畫完。 意思是當工人在努力工作的時候,鬧鈴響了29次。這時候電視這頭會發生什麼情況? 另一種方法大家其實都很清楚了, 我叫我的工人不停的工作,然後派一個工人拿著鬧鐘, 吩咐他:只要一聽到鬧鐘響馬上放下手邊工作去叫長官來。 管他這個畫格畫完沒。反正確保我有送件就好。 還沒畫完我還可以先拿上一個畫格的牆壁來墊一下檔。 甚至我在1/30秒內我工人畫了好幾次都不管,反正長官來有拍到最後的樣子。 (好像有點虐待勞工XD) 這問題事實上早已被解決,我為什麼要花了落落長來說明。 請一定要思考我一開始提到的問題:所謂"撥快一點"到底是什麼變快了? 延伸思考 為什麼某些遊戲要強調FPS是60? 明明電視的顯示頻率是30。(當然現在電視越來越好了,連240Hz的電視都有了) 某些神眼的玩家可以分辨出FPS 30的品質有間斷的感覺。 為什麼電影(30FPS)撥出的時候卻沒有這種感覺? 我要談FPS的原因是它比各位想像中都來得重要多了。 不只是在刷新畫格上。 繼續前段的某狀況,有時候工人工作的快,有時候工人工作的慢。 意思是開發時的測試機器與最終使用者執行的機器效能不同, 甚至同一台機器效能也是變動的。 而且這問題也許不能只透過上面提到的控制播放的FPS方法來解決。 拿拍電影來舉例說明: 某電影場景拍攝內容是:"有台車自左邊跑到右邊,差點撞到過馬路的人"(遊戲內容), 在台灣拍的時候用的是普通裕隆轎車(硬體)。這場戲拍了10秒(跑到)。 現在好萊屋想要重拍這場電影, 內容當然是相同的:一台車自左邊跑到右邊,差點撞到過馬路的人 但是因為好萊屋比較有錢,找來的是一台保時捷。 保時捷一開3秒就跑到了,人都還沒過馬路,司機還跟你搖搖手說他已經很客氣。 解決方法是把3秒的畫格播慢一點讓他10秒才播完? 可是這樣做的時候卻發現過馬路的人也變慢動作,風吹的垃圾也變慢了。 所以,如果只是想要把車變慢,正確的做法應該是告訴司機, 第一畫格的時候你要開到哪個位置,讓攝影機拍一下。 第二畫格的時候則是第二位置,讓攝影機拍一下。 第三畫格的時候則是第三位置,讓攝影機拍一下。 直到10*30=第三百個畫格的時候要停在終點,讓攝影機拍一下。 遊戲設計是在每個畫格中進行。因此這邊說明的重點是: "在每個畫格必須知道這一格的結束時要進行多少的工作量,不可以做超過或短少" 進一步說明, 當我們拍攝電影時用30Hz拍。播放時就用30Hz來播。 3D Artist 拉了一個1秒的踢腿動作,當踢到0.5秒時,就一定要踢到一半。 企劃說飛越全地圖100單位要飛10秒。那麼飛到1秒的時候,飛機應該正在10的位置。 因此飛機速度應該是10 / 1 sec => (10/30) / 1 frame = 0.3 / 1 frame 10 / 1 sec : 這是企劃知道的速度 0.3 / 1 frame : 這才是本畫格真正的速度(移動量) 而因為這個數值FPS:30是變動的。 每個畫格的真正移動/變動量,要到該畫格才能知道。 至此,FPS扮演的角色,大家都應該很清楚了。 實務面是, 在遊戲層的各個元件(不管是繪圖,移動,動畫)都要能取得目前FPS的資訊, 或是當此元件的機制需要這個資訊的時候,必須要從最外層一路傳進去。 延伸思考: 當FPS因為某些狀況變低的時候(譬如說每秒10個畫格), 除了跳/飛快一點之外還能做甚麼? 當FPS因為某些狀況變得極端低的時候(譬如說每秒不到1個畫格), 會不會有甚麼例外狀況要特別注意? -- "May the Balance be with U"(願平衡與你同在) 視窗介面遊戲設計教學( http://0rz.tw/V28It ),討論,分享。歡迎來信。 視窗程式設計(Windows CLR Form)遊戲架構設計(Game Application Framework) 遊戲工具設計(Game App. Tool Design ) 電腦圖學架構及研究(Computer Graphics)論文代讀(含投影片製作) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.96.77.176
silveriii:有看有推 01/23 12:39
lightmaple:看完推一個 01/23 13:03
LinaInverse:推~! 01/23 13:08
Yshuan:請問這兩篇文章可以借轉嗎~? 01/23 15:22
NDark:可.作者時間請一起.這邊有網頁版 http://wp.me/pBAPd-9z 01/23 15:27
※ 編輯: NDark 來自: 140.96.77.176 (01/23 17:06)
Alaba:好! 01/24 01:32
cloner:推~~ 01/24 06:30
wangm4a1:推 01/24 09:16
vonRundstedt:推 02/19 14:10
Andyhsu:推~ 03/11 01:54