のりブログ

ゲーム関連記事および雑記などを書いています。

ゲームプログラマーへの道5

こんにちは!のりです。

ついに、ゲームプログラマーへの道も第5回目です。

今回は、私が大学3年生の時に役に立ったことや、具体的にやってみたことなどを書きたいと思います。

スポンサーリンク

 

この大学3年生の時が私にとって一番印象的だった時期であり、ゲームプログラミングスキルが急激に成長した重要な時期となります。

ある意味、ターニングポイントというやつですね。

実は、このターニングポイントは、大学3年生で何かをしたのではなく、大学2年生から大学3年生に上がる際の春休みに自主的にやったことでした。

何をしたかというと、友人と3Dゲームを作ってみたということです。

私の友人の一人に、ゲーム会社でグラフィックデザイナー(最近はビジュアルアーティストなんて言ったりもします。)になりたいという人がいて、その人と意気投合して、3Dゲームを作ってみようという話になり、春休みに毎日のように会い互いの家でゲーム制作を行いました。

大学2年生の時に、その友人が3Dアクションゲームを企画して、作り方などを大学の教授に聞いたりしていました。しかし、教授は3Dゲームを作るのは難しいので、2Dゲームをまずは作ってそれから考えた方が良いともっともな正論を返してきたそうです。

その話を聞いて、私もそうだろうなーと思った…わけではなく、頑張れば作れるのではないかと思い、むしろ、作りたい!と思いました。前回の記事の通り、私は大学2年生の時、2Dの縦スクロールシューティングゲームと横スクロールアクションゲームをJavaで作りました。正直、その知識だけでは、到底3Dアクションゲームなど作れません。大学1年生で初めてブロック崩しを作ったレベルのプログラミングスキルでは、もう少し段階を踏んだ方がいいと思うのが当然です。しかし、私と友人は話している内に盛り上がってきて、とりあえず作ってみようという話になりました。こうして、制作人数2人の3Dアクションゲーム制作が始まりました。

実際の企画内容は、3D対戦アクションゲームで、ぶっちゃけていうと、大乱闘スマッシュブラザーズ(以下、スマブラ)を左右上下の2Dスクロールではなく、左右上下+奥行きに対して展開させた、3Dステージで行うスマブラです。PS以降のファイナルファンタジー(以下、FF)みたいな見た目で、上から見下ろすカメラで、キャラが前後左右に動き回る感じです。3Dゲームとしては、スタンダードなものですが、実際に作るとなると、2Dゲームに比べると難易度が高いです。この頃は、学生が気軽に使えるゲームエンジンなどもなく、ほとんど一から作る必要がありました。

さて、実際に3Dゲームを作るといっても、今のようにユニティやアンリアルエンジンもなかったため、どこから手をつけていいか全くわかりません。まず最初に何をしたかと言えば、ネットで情報を集めることです。ネットで3Dゲームの作り方を調べるわけですが、今より3Dゲームの制作技術は出回っておらず、あまりいい記事を見つけることができません。見つけても、なんだか難しそうな単語をたくさん使っていて、結局どう作ったらいいかについては、あまり書いていないといったものがほとんどでした。

そこで、次に行ったことが、プログラミングの本を読むことでした。大学の図書館や教室の本棚には、3DCGの本などが何冊かあり、あまり手がつけられず綺麗に揃っていました。私の大学では、3DCGの本を読む人は全然いなかったのです。おかげで、私は読み放題でした。(笑)

C言語や、C++言語、3DCGの解説書、Windowsアプリの制作本、ゲーム制作に必用な数学物理、3Dコリジョン判定(3Dの当たり判定)、英語で書かれた分厚いプログラミングの参考書などいろいろ役に立ちそうな本がありましたが、正直読んでもさっぱりでした。まあ、Java言語をちょっと知ってるくらいの知識では、やはり難しいものです。

その中でも、とりあえず手が付けられそうだったのが、「DirexctX 3Dプログラミング」という本でした。DirectXとは、Windows上で3DCGアプリを作るための機能を提供するライブラリです。ライブラリとは、いろんな機能のプログラムコードを一まとめにしたPC上のファイルのことで、このファイルを自分のプログラムから参照することで、自分で全てのプログラムを書く必要がなくて楽ができるというものです。実際、3DCGのベース部分のプログラムから全てプログラミングしようとすると、100万行を軽く超えるコード量となってしまうため、このようなライブラリファイルを使うことが一般的です。ゲーム会社では、任天堂ソニーWiiUPS4のライブラリファイルを各ゲーム会社に提供していて、それを参照してゲーム部分のプログラミングを行います。

DirectXは、マイクロソフトが提供しているPC用のライブラリファイルということです。

話は戻り、「DirectX 3Dプログラミング」の本では、3Dの箱が3D空間を移動するといったサンプルの説明がされており、まずはそれを作ることを目標としました。3Dの箱はBOX(ボックス)と呼ばれ、開発初期はBOXを動かし、ゲームの基礎部分を作っていきます。開発中期に、BOXを実際のキャラクタモデルに置き換え、ゲームの見た目が完成していくわけです。実際にそのBOXが3D空間を動くだけのプログラムですが、思わぬところで、苦戦しました。Windowsアプリのプログラミングです。DirectXで3Dゲームを作るということは、Windowsアプリを作り、そのアプリ上で3Dゲームを動かすという手順を取ることになります。Javaシューティングゲームを作っただけの知識では、Windowsアプリ制作はもちろん初めてで、何も書いていないウィンドウを表示するところから始めるわけです。結局、サンプルなどを参考にして、ウィンドウの中でBOXが3D空間を動くプログラムの制作に1週間くらいかかりました。

スポンサーリンク

 

次に、BOXを実際のキャラクターモデルに置き換えるわけですが、キャラクターモデルは、友人が作成しました。友人は、3dsMaxというモデリングソフトを使っていました。一般的には、Mayaというモデリングソフトの方が有名かもしれませんが、3dsMaxもそれなりに使用者がいます。3dsMaxもMayaも有料ですが、その友人は学生版を使っていて、一般のものよりは安く使用していました。

無料のモデリングソフトとしては、メタセコイアとブレンダーが有名ですね。

モデリングソフトとは、3DCGのモデルデータやモーションデータを作成するアプリのことで、頂点データやテクスチャデータ、モーションのキーフレームデータなどを作って専用のファイル形式で出力することができます。モデリングソフトの詳細について知りたい方は、検索エンジンなどで「モデリングソフト」で調べて下さい。ちなみに、ゲーム会社では、Mayaを使うことが多いです。

ということで、友人が3dsMaxでキャラクターを作り、さらに走ったり、攻撃したり、ジャンプしたりといったモーション(動きのデータ)を付けたデータを作り、DirectX用のXファイルという形式のファイルで出力しました。

しかし、このXファイルというのが曲者で、DirectXで作った3Dゲームで実際に読み込んでも、真っ黒になったり、チラチラしていたり、ガビガビしていたり、もうぐっちゃぐちゃになっていたり、そもそも表示されなかったり、と全然予想通りに描画されません。このXファイルを出力する際には、数多くの設定項目があり、それらが一つでも間違った設定にするとおかしな見た目になってしまうという使い勝手が微妙なものでした。最近は、FBXというファイル形式がメジャーで、Xファイルが使われることはほとんどないと思います。結局、試行錯誤の末、Xファイルの内容を正しく、3Dゲーム上で描画するのに、1週間かかりました。

ここまで、制作を開始して2週間でした。

春休みは約1ヶ月だったので、制作期間は、残り2週間となります。

はたして、残り2週間で、3D対戦アクションゲームは完成するのでしょうか?

今回は、ここで区切ろうと思います。

以上、ゲームプログラマーへの道5でした!