こんにちは。メガネと言います。
プログラミング歴20年以上で、ゲーム会社ではたらいています。
この記事では、ゲームプログラマーになりたい人に向けて、実際の仕事内容をお伝えします。
ゲームプログラマーってどんな仕事なのか、謎ですよね。ディレクターであれば「このゲームは私が作った」と言えますし、グラフィックデザイナーなら「このキャラはぼくがデザインした」って言えます。
でもゲームプログラマーは「このゲームの基盤を作った」とか「キャラクターを動作させるための仕組みを作った」とか。人に説明するのがとても難しいです。
この記事を通して、少しでもゲームプログラマに興味を持ってもらえると嬉しいです。
ゲームプログラマーとその他の職種の役割
ゲームプログラマーの役割を浮き彫にするために、先に他の職種の役割を説明し、その後にゲームプログラマーの役割を説明します。
ゲームを作るにはプログラマーだけでなく、色んなスキルを持った人とチームを組む必要があります。たとえば仕様を決める人、絵を描く人、音を作る人などです。
昔は1チーム数人で、プログラマ1人だけということもありました。しかし最近では数十から数百人規模のチームがほとんどです。
ディレクター
ゲームの監督です。ほとんどのゲームは、1人のディレクターによって制作指揮されます。
ゲームの方向性や味付けを決める人ですね。ゲームの成否はディレクターの手腕にかかっていると言っても過言ではないです。
大まかな方向性を決めて細部をメンバーに任せる人もいれば、細部まですべてを決める人もいます。
個人的にはディレクターの個性が反映されたゲームが好きです。個性を反映するには我を通す必要があります。たくさんの人に囲まれて我を通すのって、ものすごく難しい。大変な仕事です。
ゲームプランナー
ゲームの具体的な仕様を考える人です。
ゲームルールやキャラクターが行う動作の1つ1つを仕様書にまとめ、色々な職種の人に制作を依頼します。
依頼したものが正しく仕様どおりになっているのかをチェックするのも仕事の内です。
極論すると他の職種がやらないことをすべて引き受ける職種ですが、以下のように細分化できます。
- 仕様を考えるゲームデザイナー
- 面白さを調整するレベルデザイナー
- シナリオライター
グラフィックデザイナー
イラストや3Dモデルを制作する人です。
絵を描く職種なのでイメージしやすいですよね。以下のように細分化できます。
- 2Dイラスト
- キャラクターモデル
- 背景
- ライティング
- エフェクト
- UI
最近のゲームは物量が多く、手作りで全部作るのはとてもとても大変です。
そのためプログラムで絵を作ることが増えていて、アーティスト的な感性とエンジニア的思考の両方を求められます。……大変ですね。
アニメーター(モーションデザイナー)
3Dモデルを動かす人です。
ピクサーやディズニーの映画では、キャラクターが生き生きとアニメーションしています。あの動きを作る職種です。
モーションキャプチャーで人に演技をしてもらったものを取り込んだり、ゼロから手で作ったりと様々な手法で制作します。
アニメーションをさせるためのリグを組んだり、物理的な動きとアニメーションを融合させたと、技術的な理解が必要です。
サウンドデザイナー
効果音や音楽を作る人です。
ゲームの臨場感や感動体験に、音楽や効果音は欠かせません。フルボイスのゲームも増えてきました。
効果音の収録やボイスの収録を行うことを専門にする人や、作曲を専門にした人など様々です。
クリエイターではありつつも、制作環境をテクニカル面でサポートする人もいます。
ゲームプログラマー
ゲームプランナーが書いた仕様書をもとに、グラフィックやサウンドなど色々なデータを組み合わせてゲームを組み立てる人です。
プログラムがないと、イラスト集やサウンドアルバムしか作れないかもしれません。プログラムがゲームをゲームとして成立させます。
ゲームプログラマーの仕事は大ざっぱに2つに分けられます。
- 仕様に沿ってゲームを正しく動かす仕事
- フレームワークやツール、ワークフローの整備を行う仕事
前者が一般的なゲームプログラマーで、後者がゲームのフレームワークやゲームエンジンを作るプログラマーです。
ゲームプログラマーの9つの専門分野
ここからは、ゲームプログラマーの仕事内容を分解し、さらに理解を深められるようにします。
ゲームが大型になり、ゲームプログラマーの専門化が進んでいます。
モバイルゲームが出始めのころは、まるで過去にタイムスリップしたみたいに、数人でゲームが作られました。ひとりひとりの担当分野も広く、色々なことを広く浅く知っている人たちでチームを組みました。
しかし今ではモバイルゲームも人数が増え、コンシューマーゲーム同様に専門化が進みました。細かく分けるとキリがないので、私の独断でゲームプログラマーを9つにわけます。
メインプログラマー
メインプログラマーは、プログラミングチームのリーダーです。
ゲームの骨格となるプログラムを作るのはもちろん、チームのルール作りや採用する技術の選定なども行います。
幅広い知識と経験が必要で、一朝一夕になれるものではありません。優秀な人でも最低5年程度の経験が必要でしょう。
他の職種との調整や作業の割り振りなどをやるために、コミュニケーション力が求められます。
インゲームプログラマー
ゲームの遊びの本質となるインゲームを作るプログラマーです。
プレイヤーキャラや敵キャラを作ったり、ステージを作ったりと、ゲームの中核になる部分のプログラミングをします。ゲームにおける花形ですね。
プログラミングスキルだけではなく、ゲームそのものに対する熱意や知識を求められます。プランナーが言ってることを理解できないと、作るのも難しいですしね。
プランナーやデザイナーなど、他の職種と一緒にモノを作っていきますので、コミュニケーション能力が必須です。
アウトゲームプログラマー
タイトル画面やメニュー画面などのUIと、画面をつなぐシーケンスを作るプログラマーです。
こちらもユーザーが直接触れるため、花形と言って良いでしょう。インゲームプログラマーと同様に、他の職種とコミュニケーションを取りながら、一緒にモノを完成させます。
UI/UXが悪いと、いくらゲームが面白くても、次に立ち上げるのが億劫になることがあります。ストレスなく必要な情報を必要なときに得られ、迷わず進められるUIが求められます。
グラフィックプログラマー
ゲームの映像を追及するプログラマーです。
プログラミングのスキルに加えて、グラフィックに対する深い理解と数学の知識が必要です。Physically Based Renderingでは物理的に正しいランティングやレンダリングが求められますので、光についての物理の知識もあると良いです。
高度な知識やスキルを求められますが、自分が創意工夫した表現を画面で直接見れるのでやりがいも大きいです。
アニメーションプログラマー
3Dアニメーションを専門とするプログラマーです。
アニメーションはキャラクターに命を吹き込む重要なものです。普段から見慣れた人間や動物の動きがぎこちないものだったら、すぐに違和感に気づかれてしまいます。
準運動学や逆運動学などで、自然にアニメーションをさせる。顔の表情や髪の毛を自然に見せる。服やマントなどの布らしさを表現するなど、様々な技術を用いて、アニメーションを制御します。
そのため高度な数学や物理の知識が求められます。
サウンドプログラマー
サウンドの専門知識を持ったプログラマーです。
サウンドデザイナーが作り出したい表現を実現するために、色々なサウンドエフェクトを実装します。また、サウンドデザイナーが効率よく制作できるように、ツールやデバッグ機能などを作ります。
音も光と同じで壁に跳ね返る性質があるので、GPUで計算して残響を処理することがあります。他の職種と同様に一定の数学の知識が求められます。
ネットワークプログラマー
通信を専門とするプログラマーです。
Nintendo Switch同士を持ち寄って行うローカル通信プレイや、インターネットで行うインターネット通信プレイでは、ネットワークを通して情報のやり取りが行われます。ネットワークプログラマーは、通信プロトコルの設計、やり取りするパケットの設計、遅延対策などを行います。
通信プレイには遅延が付きもので、いかにプレイヤーに遅延を感じさせずにプレイ体験を高めるかが求められます。光の速度でも日本とブラジルでは、4フレーム弱もかかりますからね。
また、モバイルゲームやMMORPGではサーバーが不可欠です。広い意味では、サーバー側のプログラミングもネットワークプログラマーの領域です。
ツールプログラマ ー
クリエイターが楽に制作できるようにするためのツールを作るプログラマーです。
片手間で対応することが多く、専門にしている人は少ないです。例えば、グラフィックやアニメーション、サウンドなどそれぞれでツールが必要になります。ほとんどは、必要なチームで必要なツールを作ります。
とは言え、ゲームエンジンのような巨大なツール群を作る場合には、ツール専門のプログラマーが必要です。
利用者の声に耳を傾け改善を繰り返していく、サポート精神溢れる人が向いています。
ビルドエンジニア
これだけプログラマーではなく、エンジニアとして紹介します(笑)。最近はプログラマーをエンジニアと呼ぶことが増えていて、最近生まれたのでビルドエンジニアです。
ビルドエンジニアは、自動化を推し進めるプログラマーです。
複数のプログラマーで開発をしていると、どこかのタイミングでビルドが通らなくなったり、ゲームが動かなくなることがよくあります。そんな異常事態にならないように、あるいはいち早く気づくために、ビルドやテストを自動化します。
不具合があったときに真っ先に問い合わせがいくので、誰かのサポートを苦に思わない人が向いています。
ゲームプログラマーの仕事内容を5つの工程で紹介
さらに、工程ごとの仕事内容を深掘りします。
開発環境の準備
何はともあれ、最初に開発環境を準備します。開発環境と言うと分かりづらいですが、チーム全員がゲームを作りはじめられるように準備することです。
たとえばUnityで作ると決めたとしても、全員がバラバラのバージョンを使っていたら、共同作業できませんよね?
Unityで作るのか、Unreal Engineで作るのか、それともゼロから作るのか。作り方を選択し、それに合わせて環境を準備します。
まずはゲームの試作に進めればいいので、大雑把に準備することが多いです。
- ゲームエンジンの選定
- 全員の環境が揃うようにインストーラーを配布
- CIによるプログラムの自動ビルドと配布
ゲームの試作
ゲームの核となる部分を試作して、面白さを検証します。
この時点でプログラムの構造を決めることは難しいです。何度も何度も作り直しがあります。
なので綺麗なプログラムを書くと言うよりは、スピード重視で作っては壊してを繰り返します。
新作のゲームの場合、試作で迷走することが多いです。まあでも新しい遊びを生み出すのですから、迷走して当たり前です。
個人でゲームを作るときも頭で想像していたものと、実際に作ってみたものにはギャップが生まれることでしょう。作ってみたらなんか違うというのはよくあることです。
もしかしたら辛いと感じるかもしれませんが、ゼロからイチを生み出すのは辛くて当たり前。諦めずに試行錯誤すればきっと出口が見えてきます。
量産準備
ゲームの核が決まったら、量産の準備をします。
試作段階では作り直しを繰り返したことで、プログラムがスパゲッティになっているはずです。え?なってない?
量産に入る前に、プログラムを設計して綺麗に作り直します。量産ではプログラマーも増えるので、複数人で分担しやすい土台を作ります。
また他の職種向けの量産を楽にするためのツールも作ります。たとえば、ボタン一発でデータをコンバートしてゲームに組み込めるようなものです。
量産まで進むとチームの人数がピークを迎えます。後戻りや停滞が発生すると開発費に大きな影響があるので、しっかりした準備が欠かせないです。
月に80万円のコストのかかる人が50人でゲームを作っているとします。プログラムの作り直しが必要になり、仮に1ヶ月何もできなくなったら、80万円×50人で4000万円の損害です。大問題ですね。
量産に入れるかどうかを検証するために、バーチカルスライスという手法を取ることもあります。実際にゲームの1部分を仕上げてみることです。
インゲームやアウトゲームの全ての要素を1部分切り取って完成できたら、自信を持って次の工程に進めますね。
量産
ゲーム作りの本番です。
アクションゲームであればキャラやステージをバンバン作ります。RPGであればシナリオやイベントシーンを作っていきます。
以前はゲームプログラマーがキャラやステージを作ることがありましたが、最近は減ってきています。
プログラマーが作るのはキャラを動かす基礎部分。キャラの違いはレベルデザイナーがパラメーターやスクリプトで作り出す。みたいな感じで、複雑な部分をプログラマーが、面白さを追及する部分をレベルデザイナーが作ることが多いです。
分業化が進み、ゲームプログラマーが直接細かい部分や演出を作ることは減りました。他の職種にはできない、専門的で難しいことを引き受けます。
そういう意味では、ゲームプログラマーのクリエイティビティが下がったと感じるかもしれません。それならゲームじゃなくて、他のもっと給料のいい会社で働くよ。と考える人もいるでしょう。
ただやっぱり、エンターテイメント製品を作るのは楽しいです。大の大人がゲームのことで真剣に議論したり、アイデア出しでバカなことを言いあったりします。
デバッグ
どんなに優秀な人たちが作ったゲームにも必ずバグが出ます。デバッグ工程でバグを取り、製品としてリリースできるようにします。
バグ修正だけでなく、ゲームが難しすぎないか、逆に簡単すぎないか、説明を見て理解できるかなど、総合的に品質をチェックします。
バグがあるとそもそも開発中も困るので、デバッグまで修正しないということではありません。最近はテスト駆動開発やCIによる自動テスト等の導入で、不具合をなるべく早く察知して修正する意識が強くなってきていると思います。
ただしデバッグしてみると、チームの人数に比例して想定外のバグがたくさん出ます。コミュニケーションパスが増えるほどバグも増えるという関係性があります。
ボリュームの大きなゲームは、人力で全てをチェックするのが物理的に不可能になってきました。そのためプログラムによる自動プレイやチェック用のデバッグ機能の作成など、この工程でプログラマーがやることは多いです。
ゲームは発売スケジュールが先に決まっていることが多いので、すべてのバグを修正してから発売することは稀です。世に出たらヤバいものから優先して修正します。
一定の品質をクリアしたら、いよいよマスターアップ。あとは発売日を待つだけです。
まとめ
ゲームプログラマーの役割や仕事内容を紹介しました。
以下の記事でゲームプログラマーのやりがいを紹介していますので、合わせて読んでもらえるとうれしいです。
とりあえずゲームプログラミングをしてみたいと思ったら、以下の記事ものぞいてみてください。
コメント