アーティストでも解る ゲームグラフィックの仕組み~第2回~

どうもこんにちは、野島亮です。今回は、前回の話のちょっとした補足になります。

前回、ゲーム機の中身を「机に座る人」で例えました。

しかし、色々と大事な要素が抜けてしまってもいます。
そこで1つずつ順に補足を入れていきたいと思います。

そもそも何をメモリに読み込むのか?

HDDからメモリには一体何を「ロード」するのか?

それは、アーティストにとっては「3Dモデルのデータ」とか「テクスチャ」だというのは分かると思いますが、他にも「プログラム」「会話テキスト」「サウンド(音楽や効果音)」「動画(プリレンダムービー)」と色々なデータがあります。

そして、それらの中から今必要なものをメモリに読みます。
メモリに読み込ませるのもCPUのお仕事なので、ロード中はCPU負荷が上がります。

CPUは命令を受けている

前回「CPU」を、机に座る人の「頭の中」で例えましたが、まるで人工知能のように誰からの命令も受けずに勝手に考えてあちこちに指示を飛ばしている訳ではありません。メモリに読み込まれた「プログラム(命令)」によってCPUは色々な指示を飛ばしたり計算したりします。

プログラム以外にもゲームならではの大事な要素があります。
それは「コントローラー」です。
CPUはユーザーのコントローラーの入力を受け取って、入力された内容に応じてキャラクターを動かしたりカメラを動かしたりするので、コントローラーもCPUに対する1つの「命令」とも言えますね。

メモリは読み込むだけではない

メモリはHDDからデータを読み込んで置いておくだけではありません。
メモリ上にあるゲームの様々なデータ、例えばプレイヤーのHPの値が変わればCPUが随時書き換えます。
メモリは、データを読み込んだり消したり、中身が書き換わるものです。

ゲーム機から出力するのは映像だけではない

ゲーム機からは、フレームバッファの内容をHDMIケーブルなどを通してディスプレイに出力する訳ですが、同時に「サウンド」も出力します。サウンドの存在も忘れてはいけません。

CPU負荷?GPU負荷?メモリ圧迫?

ゲームをプレイしていると画面の表示が引きつったりスローになったりします。その状態をよく「重たい」と言います。「処理落ちする」とか「フレームレートが下がる」と言ったりもします。

でも、ここで大事なのは「CPUが重いのかGPUが重いのか、どちらなのか?」です。
CPU負荷が高くて処理落ちしている場合、GPU負荷を軽減しても改善されません。
プログラマに「なんか重いんだけど」と言うだけのアーティストには留まらず、「どうもこの場面でCPUが重いみたいだから見てくれる?」くらいは言えるアーティストになりたいですね。

しかも「重い重い」と一言で言っても、「データの容量が大きい」状態も「重い」と言ったりするので非常に紛らわしいです。データサイズが大きい場合は「重い」とは言わず「サイズがでかい」のように紛らわしくならないよう表現するのが良いと私は思っています。

それから、アーティストはそもそも「データサイズが大きい」と「CPU/GPUの処理が重い」の違いを分かっていない場合が多いです。このあたりをプログラマの方はまずは理解してあげてください(そして当ブログをおすすめしてあげてください)。
※確かに頂点数が多いと結果CPUが悲鳴を上げたり、テクスチャが巨大だと結果GPUが悲鳴を上げたりすると思いますが、一番ストレートに悲鳴を上げるのはメモリになると思います

さて、では具体的にどういった要素がCPU負荷、GPU負荷の代表になるのか最後にざっと挙げてみます。

CPU負荷の主な要因

・キャラクターのスキニング
・味方や敵のAI
・コリジョン判定
・レイキャスト
・物理シミュレーション
・パーティクルの生成や更新
・ドローコール
・ガベージコレクション(GC)
・ロード

GPU負荷の主な要因

・重たいシェーダー
・動的なライティング
・動的なシャドウ生成
・テッセレーション
・半透明の描画
・ポストエフェクト

メモリを圧迫する主な要因(おまけ)

・頂点数の多い3Dモデル
・解像度が高いテクスチャ(キューブマップなどHDRテクスチャは特に注意)
・複雑なマテリアル
・ライトマップ
・シャドウマップ
・サウンド
・動画

前回、CPU頭の中GPU絵を描く手と例えましたが、処理負荷の要因には例えばGPUなら絵を描くことに関係したものが並んでいるのが分かると思います。

今回はここまでになります。
いかがでしょうか?

前回よりもさらに理解が深まった!」と思って頂けたなら、とても嬉しく思います。
そして、こういった辺りをさらにもっとちゃんと知りたいと思った方は、繰り返しになってしまいますがやはり前回ご紹介した書籍がとても参考になります。

ゲームを動かす技術と発想
https://www.amazon.co.jp/dp/4797370122

それでは、次回もどうかよろしくお願いします!