![]() パステル オービット |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
---|
ゲームプログラマが語る。今さら聞けないフレームレートに纏わる話。秒間60?16ミリ?
|
![]() 吹雪だソチだ大雪だと、世間はなんとも雪景色でありますが、日本ゲーム業界はホットです。 いよいよ発売されましたねPS4。我が家にも早速届けられました!なんとカッコイイ機体でありましょう。 取り急ぎ、手元には同梱されていたKNACKとトゥームレイダーしかありませんが、これから数年間は確実に我がリビングを彩るパートナーでありますからね。ゆっくり楽しんでまいりたい Team Dyquem で御座います。皆様こんばんは。 ![]() さて。 ![]() 今さら聞けないシリーズ 「フレーム」「60コマ」「16ミリ」など、フレームレートに纏わる単語は色々とありますが、これらは元来、純粋に技術的なキーワードでありますし、企画さんやデザイナさん、中には新人プログラマの方にも、これらの意味をそれほど深く掘り下げずに使用している方も多いのではないでしょうか。 まあ、ゲーム制作に纏わる技術的キーワードはそれこそ無尽蔵に在りますからね。 細かい専門外知識はふわっとしたまま捕らえ、餅は餅屋でやっていくのもまた一つの在り方であるかとは思いますが、フレームレート周りの知識は重要な部類でありますし、ゲーム屋としてやっていくならば把握しておいた方が良い仕組みですので、是非ここで覚えてしまいましょう。 ![]() フレームって何? ゲームや映画、テレビ番組、スマホやケータイの画面など、映像コンテンツを表現するほとんどの機器は、瞬間瞬間の制止画を連続再生させる事で、滑らかな動画表現を行っています。 言ってみれば、超高速な紙芝居。 一秒間に何十枚という紙芝居を行うことで、それがあたかも動く映像であるかの様に見せているわけですね。 その枚数は、フィルム映画なら1秒間に24枚。 PS3やPS4、VITAや3DS等、一般的なゲーム機やスマホにおける、凝った3Dのもので秒間30枚。画像表現へのこだわりよりも滑らかさを重視するレースゲームや格闘ゲームでは秒間60枚。 たった一秒間という短い時間の間に、これだけの紙芝居が行われているのです。 1秒間に60枚の紙芝居を行うならば、その一枚を表示している時間は60分の1秒間になりますね。 「フレーム」とは、その中の一枚の絵を。 「1フレーム」といえば、その一枚を表示している時間をそれぞれ表しています。 ![]() 16ミリ秒?32ミリ秒? プログラマの口から、こうした言葉を聞いたことがあるかもしれません。 これは通常、「1フレーム」の時間です。 「ミリ秒」とは、「1000分の1秒」。つまり、0.001秒の事ですね。 秒間60フレームのゲームならば、そのゲームにおける一フレームの時間は「60分の1秒」です。 これは、0.016666秒、つまり約16ミリ秒という事になりますね。 秒間30フレームのゲームならこれらが倍になり、32ミリ秒(16.6ミリ秒の倍なので、正確には約33ミリ秒)というわけです。 30フレームのゲームならば、一フレームにかかる処理時間が33ミリ秒を超えると、それは処理落ちやフレーム落ちとなって表れる事になります。 ある一フレームにおける処理時間が40ミリ秒かかっているとしたら、そこから何とかして7ミリ秒の高速化や最適化を行わなければ、処理落ちが解消出来ないというわけです。 こうしたシーンでよく使われる言葉達ですね。 ![]() 60フレームの次が30? 50とか49とか中途半端な数字が出てこないのは何故? これは、企画さんやデザイナさんサイドより、何度も質問された事がありますね。 言われてみれば確かに、理屈を知っていなければ不可思議な事でしょう。 若いプログラマさん等の中でも、その理由を正しく答えられる人は減ってきている様な気がいたします。 本当に根っこから説明すると、それこそブラウン管時代発祥の走査線機構や、水平同期、垂直同期、帰線期間、CRTC等をはじめとするハードウェア周りをガチで解説しなければなりませんので、ここでは簡単に。 これは、テレビという装置の構造に依存しています。 ものすごくザックリいうと、テレビというものは、必ず1秒間に60回の画面更新が入ります。これは、固定であると考えてください。 (玄人の方へ注:100hzモニタだとかGVSync、ティアリングとかは割愛しますよ?本当はガッツリ書きたいですけれども) 全てのゲーム機は、「秒間60回画面更新」というテレビの構造へ、強く依存して設計されていると考えて下さい。 この仕組みに従ってゲームを作るという事はつまり、「60分の1秒」の間に1フレーム分の処理を全て終わらせ、そのフレーム用の画面を作成し、テレビにそれが表示されるという事。 この繰り返しが、つまりゲームです。 もしも、この「60分の1秒」つまり「16ミリ秒」という短い時間に処理が間に合わなかったとしましょう。 敵キャラが沢山出現しているせいでしょうか? 画面いっぱいに爆発エフェクトが出る瞬間だったのでしょうか? 理由はともあれ、兎に角、処理負荷の高いシーンだったのでしょう。 例えばこの時、普段ならば16ミリ秒に収まっていた処理が、20ミリ秒もかかっていたとしましょう。 単純に考えるならば「1フレームの時間が20ミリ秒になっただけ」、それで良さそうなものでありますが、テレビの構造上そうはなりません。 「16ミリ秒目」というフレーム更新タイミングを一度逃してしまっています。 これは、16ミリ秒毎にホームへやってくる電車の様なものですね。一旦逃してしまったならば、次のタイミングを待つしかありません。 次回到着時刻は、どうしたって「32ミリ秒目」なのです。 こうして、画面更新タイミングへ処理を合わせる事を、「同期する」と呼びます。 処理落ちがなければ秒間60フレーム。 毎フレームの処理が16ミリ秒を超えるならば、2フレームに1回の画面更新となりますから、秒間30フレームに。 そして、更に負荷が上がり、毎フレームの処理が33ミリ秒をも超えるならば、今度は3フレームに1回の処理となり、秒間20フレームに。 60 → 30 → 20、と推移します。 さて、次は? 更に負荷が上がり、4フレームに1回となる訳ですから、60÷4で、秒間15フレーム。次は60÷5で12。60÷6で10。 では更に更に、8フレームに一度となった場合は? 60÷8ですから、秒間7.5フレーム……となりますが、「0.5フレーム」という物理的な状態はありません。これはあくまでも便宜上そう呼ぶしかないわけであります。 この状態を正確に表現するならば、約分し、「2秒間で15フレーム」となるわけですね。 ![]() 余談 ところで、処理落ち等によって発生した、次の画面更新タイミングまでの待ち時間、例えば、20ミリ秒目~32ミリ秒目までの空き時間はどうしましょう?何とも勿体ない話です。 とは言え、基本的にこれは空白の待ち時間です。特に何も行わず、次の画面更新タイミングまで待機状態に入ることも可能です。VITAや3DS等の携帯機では、この僅かな時間だけCPUを停止させ、バッテリー消費を抑えるという基本的な指針が定められています。 が、実際に近代ゲームを開発する現場では、こんな悠長な事は言っていられません。実際には、こうして生じた僅かな待ち時間でさえも無駄にするわけにはいきませんからね。 「ちゃんと作っている」ゲームならば、この僅かな時間へ色々な処理を詰め込みます。そのフレーム内で完結しなければならないシビアな処理ではなく、数フレーム後、ものによっては数秒後に結果が得られれば構わない処理を、少しずつ行っておくイメージです。 例えば、キャラクター等の経路探索処理や、敵の思考処理などですね。 プログラマでは無い方にとりましても、大変重要な概念である「フレーム」。 かなりザックリとした解説でありましたが、基本の「キ」と「ホ」程度は網羅出来たかと思います。 上記記事内におきましても少し触れましたが、ここから更に、ティアリング問題や、それを超合理的に解決するGVSync技術等、フレーム関連の学習はまだまだ奥の深いものであります。 興味をお持ちの方は、更に学習を進めると良いでしょう。
![]() シリーズ記事まとめ ■Aニュース、ガジェット通信 寄稿記事 「『連載.jp』寄稿「ゲームプログラマが語る「プロ棋士に勝ったAIは、タクシー基本無料化をもたらす?」」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ”買わない理由”がもたらす充足感と、開発者達の心理」」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る アップデート版に潜む開発者モラルハザード」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る ソフトやアプリと携帯ゲーム課金における経済行動学」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る。新しいゲーム機が定期的に生まれる理由」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 楽しさの仕組み ゲームメカニクス」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 3Dテレビとゲームの微妙な関係 その打開策」」 「『Aニュース/ガジェット通信』寄稿「ゲームプログラマが語る 無料アプリのビジネスモデルと舞台裏」」 「『Aニュース/ガジェット通信』寄稿「新発表ラッシュに見るクラウド大航海時代の幕開け」」 ■ゲーム制作初心者さん向け系 ゲームプログラマが語る。なんちゃってリードプログラマにはなるな!ゲーム造りで放棄してはいけない大切な事 ゲームプログラマが語る。今さら聞けないフレームレートに纏わる話。秒間60?16ミリ? ゲームプログラマが語る。「浮動小数点」と商業レベルで上手に付き合う方法 「ゲームプログラマが語る。ゲーム制作初心者の方へ小ネタ「クォータービュー入門」」 「ゲームプログラマが語る。「正しい乱数」が彩る確率世界とエンターテイメント」 「iPhoneアプリ、ゲーム制作初心者の方へ小ネタ「線分と円の交差」」 「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタ「2Dベクトル」」 「iPhoneアプリ作者より、ゲーム制作初心者の方へ小ネタを一つ」 ■「プロのゲームプログラマとして、ゲーム製作に関する書評を」シリーズ ゲームプログラマが語る書評:「MMORPGゲームサーバープログラミング」を読んでみた ゲームプログラマが語る書評:「ゲームプログラマになる前に覚えておきたい技術」を読んでみた ゲームプログラマが語る書評:「ゲームエンジン・アーキテクチャ」を読んでみた ■個人でも出来る、マルチプラットフォーム開発関連 「ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その4」 「ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その3」 「iPhoneアプリ作者が語る。マルチプラットフォーム化その2・アトミック型定義のススメ」 「ゲームプログラマが語る。iOSゲームをWinマルチプラットフォーム開発・その1」 ■リリースしました系 「PASTEL-ORBIT/TeamDyquemアプリ第19弾。ローグライク決定版「隣人は魔王」をリリースしました。」 「TeamDyquemアプリ第18段。ご当地バトルRTS「埼玉クエスト」をリリースしました。近隣の県を滅ぼそう(*-_-*) 埼玉以外でも遊べます #47app」 「アプリ新作「ネコりす マカロン」をリリースしました」 「埼玉県ご当地アプリ、「タッチ the さいたま」をリリースしました #47app」 「アプリ新作「ひよこガーデン」をリリースしました」 「TeamDyquem新作。結構真面目なアクションパズル「ネコりす」リリース」 「iPhoneアプリ作者が、iアプリ「泡リス女子部 for iアプリ」をリリースしました」 「自作iPhoneアプリ改良版、「ネコがゴミのようだネ:アーケード」をリリースしました」 「iPhoneアプリ作者が、「まりも育成」for iモードをリリースしました」 「iPhoneアプリ新作 「ナタ・デ・ネコ」 をリリースしました」 「秋刀魚は関係ないけれど、新作「i-Wishbone」リリース」 「アプリ新作「ネコがゴミのようだ」。プロモ動画をアップしてみた」 「「泡リス 女子部」、販売開始」 「AppBankにまりも紹介記事が!」 「ゲームプログラマとして参加。ご当地47都道府県アプリプロジェクト #47app」 □ビジネス系 「ゲームプログラマが語るドコモiPhoneと、インフラから合法的に大金を抜くスキーム」 「ゲームプログラマが語る。秀丸エディタのビジネスモデル」 ■SFネタ系 「ゲームプログラマがSFを語る。意識はどこからやってきて、死んで、そして何処へ行く?」 「ゲームプログラマが語る。気の遠くなるスキもない程の、宇宙の話」 「iPhoneアプリ作者が語る。流れ星に馳せる真実」 「iPhoneアプリ作者が警笛。どこでもドアの使い過ぎには注意」 「iPhoneアプリ作者が語るSETI理論。異星人さんは何処!?」 ![]() |
||