ゲームクリエーターは全てを知っていなければならない
著者: 林 洋人「ゲームプログラマに必要な知識や習得しておくべき技術は何でしょうか?」という問いを受けることがあります。
まずはプログラミング言語が使いこなせることが必要です。Cは基本ですし、現代ではC++がゲーム開発においては主流です。ツール開発にはC#、最適化のためにアセンブラ、ネットワークゲームのためにJavaやPHP、JavaScriptも押さえておきたいですね。HLSL等のシェーダ言語、LuaやObjective-Cが必要な場面もあります。
プログラミング言語だけではなく、OSやライブラリの知識も必要です。Windows,Linuxや各種ゲーム機のOS、STL,boost,jQuery,.NETFrameworkといった汎用ライブラリ、DirectXやOpenGLといったグラフィックスライブラリも使用します。ネットワークゲームのためにはサーバーやデータベースの知識も必要になります。
ゲームで何をどのように処理するかというデータ構造とアルゴリズムを決めるには、さらに高度な知識が必要になってきます。情報工学と、それに必要な数学として代数、幾何、解析、確率統計、計算機科学、数値解析などを習得する必要があります。処理を最適化するためには、CPUやGPUなどの計算機アーキテクチャを学ぶ必要もあります。
しかしこれらをマスターしても単にプログラムを書くことができるというだけで、まだゲーム開発には不十分です。ゲームというのはコンピューターに決まった問題を入れて計算で出てきた答えそのものに価値があるわけではありません。プレイヤーにインパクトを与えるグラフィックスやサウンド処理を行なう必要があります。そのためには、デザイン、音楽に関する知識、それをアルゴリズムに落としこむための画像処理、信号処理、光学、剛体や流体などの物理学などの知識も必要になるでしょう。さらにどのようなものを人間に提示すれば効果的かを考えるために、人間自体が世界をどのように捉えているかを知る認知科学も必要です。
そして、プログラマだからといってプログラミング以外に無頓着ではいけません。ゲームが取り扱うモチーフにはどんなものがあるでしょうか。世界のあらゆる場所が舞台となり、過去の歴史から空想未来、心の中から宇宙の果てまでどんなものでもゲームになります。映画、文学、政治、経済、地理、歴史、スポーツ、芸能などの知識はゲーム開発に有用です。
他にも仕事を円滑に進めるために必要な知識もあります。技術情報を得るために英語は必須ですし、知的財産権や契約、労働に関する法律も常に意識します。プログラマでもプレゼン能力、マネジメント能力も多くの場面で問われます。
つまり、ゲームを作るためには世の中全ての知識が必要なのです。知らなくてよいことなど一つもないのです。
ここまでしつこいくらいプログラマに必要な知識を列挙したところで賢明な皆さんはお気づきでしょう。「何を習得しておくべきか?」ということを問うている時点で黄信号なのです。自分は何を知らないか、どうすればできないことができるようになるかを考えて学習し、自らできるようになる能力こそが最も重要です。
さも元々よく知っていたかのように振る舞って仕事をしながら、並行して不足している分を必死に学習するのです。
世の中の流れは速いので、必要になってから知識を取り入れるのでは間に合いません。技術トレンドを追いかけ、少しだけ先読みをして必要になりそうな知識を先に取り入れ始めるとよいでしょう。キャッシュメモリにプリフェッチをするようなものです。
「プリフェッチって何?意味が分からない。」と思っている暇があればポケットからスマートフォンを取りだして検索しましょう。いい時代です。