はじめての3Dゲーム制作 開発環境選び

ふとドキュメント的なものが書きたくなりましたので、3Dゲーム作成の入門のための入門について書きました。
実際に3Dゲームを作った事のない人の戯れ言です。せいぜい対象は、「プログラムすらまともにやったことないけど、ふと3Dゲームが作ってみたいっと突発的に思った人」くらいですね:D

想定として、個人開発、フリーで配布、PC(Windows)ゲーム、としてます。



3Dゲームを作るとは

ゲームを作るとはソフトウェアを作ることですね。すなわちプログラミングすることです。

 では、プログラミングは難しいのか。イエス、難しいです。というか面倒ですね。3Dゲームはソフトウェアとしてけっこうすることの多い方です。世に多くの3Dゲーム制作日誌なるブログ等は存在するものの、完成されたゲームがすごく少ないことがそれを物語ってます。

 それでも、自分なら出来るだろうと無根拠に思っているあなた。グレイト!マーベラス! そのまま何も考えずに直進しましょう。

 ゲームを作るのにまず決めなければならないことは、なんのプログラム言語で開発するかです。ではプログラム言語は何を基準に決定すればよいのか。個人個人で重要視するところは違うかもしれませんが、ここで優先するのは何より、開発のしやすさ、です。そのために、言語の性能、情報量、ゲームエンジンの3点に着目します。


言語の性能

 プログラム言語には様々な種類があります。それぞれの言語でコンセプトが違うわけですが、一番考慮すべきは難易度であり、自分の力量にあった難易度の言語を選ぶことが必要です。

 基本的に難易度の高い言語ほど自由度が高く、難易度が低い言語ほど自由度が低いです。なぜそうなるかと言うと、簡単な言語というのは、難しいことや面倒くさいことを自動でやってくれるようにプログラミングされています。そのため、汎用性を持たせなければならないので、最小限の処理だけとはいかず、処理に時間がかかってしまいます。自由度の高い言語はその自動化されているところを全て自分で作るので、面倒ですが、必要最小限の処理だけをさせれるので、速く処理できます。

 処理が速いと言う事は同じ時間でたくさんの事が出来るということなので、自由度が高くなります。逆に処理が遅ければ同じ時間で出来ることが限られてしまうので、自由度が低くなるのです。もちろんそれだけではありませんが、大きくは実行速度。ほんとは一番考慮すべき点は実行速度というわけです。

ゲームに使えそうな言語を列挙してみます。

C++、C、Delphi|Java、C#、BASIC、HSP|Python、Ruby、Flash(ActionScript)

 左に行くほど自由度が高く、右に行くほど簡単になるように並べました。|は割と大きな区切りを表しています。これは僕の感覚・予想に基づくものですので、あしからず。

 商用ゲームに使われるのはC,C++です。商用ゲームともなればそれくらいの速度(自由度)がないとダメなわけですが、難しいし、プログラミングが本職の方くらいだと思います、やれるのは。昔は3DならC/C++くらいの速度がないと話しにならなかったのですが、今はPCのスペックも上がり、他の言語でもそれなりの自由度を確保できるようになっています。

 個人的に日曜プログラマが本格的に挑んでもC#までじゃないかなーっと思います。C#には、後述しますが、XNAなど商用ゲーム開発をする環境があり、個人制作では十分な自由度を確保できます。それでも難しいと感じるなら、HSPです。HSPはゲームに特化した言語で簡単であると言われています。

 しかし、C#,HSPはWindowsでしか動きません(基本的には)。そこで、どのOSでも動くマルチプラットホームな言語で、ゲーム開発言語として提案するのはJava、Pythonです。Javaはともかく、Pythonに実用可能な速度はあるのかと言うと、これはゲームエンジンなどC等で作られたプログラムをPythonで使う(バインディングする)ことで、実用可能になります。これはRuby,Luaなど他、すべての言語で言えることなんですが、Pythonはこの用途で広く普及してるので、何かと扱いやすいのです。


情報量

 これは大変重要で、言語・ライブラリ自体の使い方のWEBサイト、書籍などの情報はもちろんのこと、自分がやりたいこと(ジャンルなど)を解説している情報があるかは作業を進める上で非常に大きなアドバンテージになります。かならず自分が考える候補の中から事前に確認しときます。


ゲームエンジン

 ゲームエンジンとは、ゲームでよく使われる処理をまとめたライブラリ群です。ゲームを作る上で共通する処理(グラフィック、サウンド、衝突判定など)を予め用意されているものを使うことで、自分でやることをできるだけ少なくし、楽をするためにゲームエンジンを使います。もちろん、全部一つ一つ自分で作ってもいいですが、それでは長い時間と労力を使う羽目になり、ゲーム作りするはずが、ゲームエンジン作りになってしまうのです。

ゲームエンジン一覧
http://en.wikipedia.org/wiki/List_of_game_engines

 ゲームエンジンは完成されたアプリケーションですから、出来ることと出来ないことは決まっています。グラフィックライブラリとしては何を利用出来るか、配布するときの形式は、など、詳しく見るべき項目はあるんですが、特に優先して見るべきは、3Dソフトとの相性ですね。要はモデルを取り込むときのファイル形式が、使おうと思っている3Dソフトの出力形式と一致するかです。この辺で面倒があると作業進行に支障をきたす恐れがあるのです。個人製作においては優先させるべきは開発のしやすさで、その他の多少のことには目を瞑ります。

 より簡易に作業をできる選択肢として、ゲームエンジンと開発ツールが統合しているものがあります。Unity、Torque Game Builder、Unreal Development Kit、Blender Game Engineなどがこれにあたり、これらはゲームエンジンを使う上で必要なことをソフトでサポートしてくれるので、プログラムで書かなければならないことがグッと減ります。

 フリーでも手に入るものとして、僕が把握してるのは Unity(制限有)、Unreal Development Kit と Blender Game Engineです。Unityは今脚光を浴びているゲームエンジンで、商業市場をターゲットに実績を増やしつつあります。一方、Blender Game Engineはあくまで個人によって利用されることに留まってます。それぞれのゲームエンジンについては後述したいと思います。Unreal Development Kitは独自のスクリプト言語を使うという理由だけで、今回は取り上げません。


 以上3点を考慮して候補をC#,Java,HSP,Pythonの4つに絞ることにします。他にも候補にあげたい言語はあるんですけどね。知識量の関係で、今回はこの4つで。以下個別に個人的な見解を書きたいと思います。

言語

□ Java

 Javaは非常に幅広い分野で実績があり、情報量も豊富ですが、そのせいかゲームで使う言語としてはあまり見ません。仮想マシン上で動作するクロスプラットホームな言語ですので、Mac、Linux、WindowsなどのOSに依存する事の無く開発、実行できるのが利点ですね。実行にはランタイムのインストールが必要ですが、始めからインストールされている場合が多いので、そこまで気にすることはないですし。
 今のプログラミングの主流の考えであるオブジェクト指向に基づく言語で、それ以外のプログラミングは許されず、言語仕様を理解する事がオブジェクト指向の理解に直結するという感じです。その点で非常に学習に適した言語であると思います。

ゲームエンジンは、jMonkeyEngineが完成度の点で一つ抜けているようです。

jMonkeyEngine
http://www.jmonkeyengine.com/


□ C#

 C#はよくJavaと比較されます。それだけ良く似ており、性能も大きな差はありません。言語仕様としてはC#の方が新しい分Javaより優れている点が多く見られるようです。しかも、ゲーム面ではC#のほうがアドバンテージがあるように思います。その由来が、XNAとUnityです。

○ XNA
 XNAはMicrosoft社のゲーム用フレームワークで、ゲームに必要なことは網羅していると考えてよいと思います。開発環境であるXNA Game Studioもフリー(Express版)で手に入り、学生ならドリームプロジェクトでProfessional版も手に入ります。このプロ顔負けの環境に加え、XNA自身の情報も多いので作りやすい部類に属します。ネックとしては開発環境、実行環境が共にWindowsに限定されることですが、Linuxでも動かせるようにするMonoというソフトウェアがあるので、必ずしもというわけではないです。

XNA デベロッパー センター
http://msdn.microsoft.com/ja-jp/xna/default.aspx

○ Unity
 Unityについては前述しましたが、注目を集めているゲームエンジン+開発ツールです。C#以外にも、JavaScript等もサポートします。プロジェクトを様々なプラットホーム向けに書き出すことが出来ます。
 特徴はなんといっても開発ツールと統合されていること。これにより、プログラミングの量がグッと減り、変更点をリアルタイムに確認しながら作業できるので、非常に効率よく開発を進めることが出来ます。

UNITY: Game Development Tool
http://unity3d.com/


□ HSP

 HSPは、狙ってか狙わずか、とってもゲームに特化した言語で、言ってしまえばゲームにしか使いません。文法が簡潔なため、ゲーム入門言語として人気のある言語です。そのため、3Dライブラリなどのライブラリも簡単に使えるように開発されたものが多く、HSPによるゲーム入門書やウェブ資料なども多いので、初心者の始めの一歩としては第一候補に上げてよいと思います。

 HSPはあたかも言語自体がゲームエンジンで、3Dゲーム製作には、Easy3Dという3Dライブラリとの組み合わせ手で利用されることが多いようです。このEasy3Dの作者さん、フリーのモデリングソフト(モデルを作るソフト)に対応するモーション作成ソフト(モデルの動きを作るソフト)も作っておりまして、個人で3Dゲームを作るときの線路を引いてくださってますので、連携するソフトの相性等の不安が少なく、個人製作しやすいと思います。

おちゃっこLAB(Easy3D開発者HP)
http://www5d.biglobe.ne.jp/~ochikko/


□ Python

 学習コストの低さを売りにするスクリプト言語です。日本では同等の言語Rubyが広まったのですが、世界ではPythonが広まり、多くのソフトウェアのプラグイン用の言語として採用されています。3DツールなどのプラグインにもほとんどでPythonが採用されており、知っておくと何かと便利な言語になっています。ただ、日本では浸透が遅れたために日本語情報に関しては他の言語に劣っているところがあります。とくに、ゲームを作ろうと思ったらそれは顕著です。Pythonを開発言語とするゲームエンジンも多くあるものの、それらを使うには英語と切っても切れない縁にあるのがPythonです。

Pythonゲームライブラリ一覧
http://wiki.python.org/moin/PythonGameLibraries

 3Dを扱えるものとしても、Python-Ogre、Panda3D、PySoy、Blender Game Engine、など多数存在しますが、ここで取り上げるのは、Panda3DとBlender Game Engineです。

○ Panda3D
 Panda3Dの魅力は完成度と整理されたドキュメントですね。日本語情報は皆無ですが、公式だけで大丈夫じゃない?っと思わせるスタイリッシュっぷり。カーネギーメロン大学とディズニーの共同開発で、ソフト自体にしても、ドキュメントにしても、個人や有志の開発にはなかなか出来ないパワーを感じさせます。特に3Dモデルのインポート態勢とかいいですね。独自形式なんですが、大体の形式からのコンバートできますし、主要なソフトから書き出し等もサポートされているのが、取り上げることになった大きなポイントです。ただただモデルを表示するのに手間かけたくないのです。

 配布の際の形式ですが、独自にパッケージングされたファイルをクライアント側にランタイムをインストールしてもらって実行するのが無難っぽい。これはややネック。インストーラーの出力もできるようですが、即実行できるファイル(exeとか)の出力はちょっとよくわかりませんでした。

Panda3D - Free 3D Game Engine
http://www.panda3d.org/

○ Blender Game Engine
 Blender Game Engineはただのゲームエンジンとは様子が違います。Blenderというのが、3DCGムービーを作成するプロセスに必要な機能をすべて網羅した統合型3DCGソフトで、ゲームエンジンがむしろおまけなんですね。よって、モデル、テクスチャ、アニメーションなど必要なものをBlenderで作れるので、ゲームに組み込む際の手間がありません。必要な3D作業とプログラミングを同時進行で行うことができるのです。

 ネックはこのソフトウェアは開発途上で仕様も変わりやすいということです。互換性は維持してくれてますけど、情報を探すときにたまに混乱します。出力形式としては、即実行可能のファイル(exe等)の出力も可能ですが、完成度は高くないらしく、うまく動かない場合、プレイヤーがあるので、それを同封するか、クライアントにをダウンロードしてもらって実行することになります。

blender.org - Game engine
http://www.blender.org/education-help/tutorials/game-engine/


まとめ

以上を総合的に考えると、

英語ダメゼッタイ+本格的 => C# + XNA
英語ダメゼッタイ+簡単  => HSP + Easy3D

英語でもいい+本格的 => C# + Unity
英語でもいい+簡単  => Python + Blender Game Engine

英語でもいい+開発ツールに依存したくない+本格的 => Java + jMonkeyEngine
英語でもいい+開発ツールに依存したくない+簡単  => Python + Panda3D

こんな感じでしょうか。実際にはまだまだ選択肢はあるので、一個人のお勧めと思ってください。


 やはり簡単に作業ができるのは、開発ツールと統合しているUnity、Blender Game Engine(BGE)だと思います。特に勧めるのはBGEですね。この記事を書いたのなんて、3Dゲーム作ろうかなっと思った人の選択肢にBGEの存在を知らしめることのほか目的はありません(爆)。

 このBGE、ソフトの使い方を覚える壁を乗り越えてしまったら、非常に簡単にゲームが作れるんですね(といってもまともに使えるようになるのに僕は1年くらい費やしましたが)。物理エンジンの適用や衝突判定などはソフト上で行い、プログラミングする必要がありません。
 まー実際のところ、発展途上ということもあって、まだまだ未実装な機能はあり、商用はおろか、個人作品としても実行条件が幅狭かったりするんですが、開発しやすさを優先する個人でなら、選択肢の一つに入れていい環境であると思います。

さいごに

 3Dゲームの作成なんて元々敷居の高いものです。今も決して低いものでは有りませんが、しかし、これくらいなら、もっと一般的に、あちらこちらで作られるようになるかもっ思ったのです。

 動画共有サービスが流通し、自分たちで映像作品を作って多くの人に見てもらうという非商用のコミュニティが活発化しています。それにより、作る人、観る人も増えて、作品も多様化しています。
 見てみると、ゲームでもプレイ動画を配信し、それを見て楽しむという文化があるそうで、それなら、3Dゲームでも自分たちで作って、楽しんで、発展させるというコミュニティができるんじゃないかっと思いました。そのためのツールとして、BGEはどうですか?ということですね、この記事のすべては。


・・・・まぁ、本当は、BGEを触る人が増えたら、日本語情報が増えないかなーっと思っているだけですけどねー


追記:
もしBGEに興味を持たれた方がいれば、以下の記事もどうぞ。

GameBlender(Blender Game Engine)とは
http://timiditybraver.blog71.fc2.com/blog-entry-482.html
関連記事

コメント

とても参考になりました。
でも自分は衝突判定等も自分で作って少し勉強もしたいので、
もう少し検討してみます。

3Dゲーム サクセイ クワシク シリタイ

最初から最後まで、無料で作れるものはどれでしょうか?

>Oさん
全部ですね。今回の想定(個人利用、非商用、Windowsプラットホーム)では。

非常に参考になりました(*´ー`)ノ
いずれはUnityをメインにする予定ですが、
Blender使いなのでBGEを試してみようかと思います。

たびたび失礼します。

BGEでは、公式の機能ではアンドロイドやiosには書き出せないみたいですが、技術的には可能なのでしょうか。動かしている人がチラホラいるので、技術的には可能なのだと思いますが。

その点がネックでマルチなunityを使ってみたんですが、PCとの相性が悪いらしく動作しない場合があります。
jmonkeyは自分のPCでも正常に動きますし、アンドロイドやウーヤに対応しているので選択肢として考えていますが、情報が少なすぎて不安だったりします。
記事でも紹介されているように、jmonkeyはJAVAをロジックとして使っているから、多くのプラットフォームで動くということでしょうか?


>BGEのAndroidやiOSに書き出すことは技術的に可能か?
可能ですよ。OpenGLはモバイル端末に対応していますから(正確にはOpenGL ES)。

Androidの場合だと(私はAndroidユーザなので)、BlenderPlayer for Androidというアプリが開発中です。このアプリをインストールすれば、blendファイルを開くだけでゲームができます。
 昔やってみた感じだと、色が出なかったり、センサーが反応しなかったりしましたが、徐々に良くなっていくでしょう。

Installing BlenderPlayer on Android
http://wiki.blender.org/index.php/Doc:2.6/Manual/Introduction/Installing_Blender/Android

順調にBlenderの開発が進めば、モバイル端末に書き出すことも出来るようになるでしょうね~。

>JAVAをロジックとして使っているから、多くのプラットフォームで動くということでしょうか?
実のところ、どの言語を使っているから、どのプラットフォームで動くっというのは言えません。

例えばUnityの場合、C#で書けばMonoというランタイム上で実行されるため、iOSでは動かせないはずですが(Appleの規約上)、iOSに出力するときは、ランタイムを含めてネイティブコードに書き換えて出力しているみたいです。このようなタイプなら、どの言語で書くかは関係なく、対応するプラットフォームに出力できます。

普通Javaなら、Javaランタイムに乗っかって動いているはずなので、Javaが対応するプラットフォームでしか動かないはずですが、jMonkeyもiOSに対応しているみたいなので、おそらく似たようなことをしているんじゃないかと。

とまぁ、なんで、ゲーム開発のことだけを考えると、言語と実行プラットフォームを結びつけるよりは、ゲームエンジンと実行プラットフォームを結びつけた方が良いですね。

動かしている人はちらほらいましたが、リンクのような機能を使っていたんですね。
unityですが、アンインストールとインストールを数回繰り返していたら、なぜか動作不良がなくなりましたので、無事に使えます。

ただ、記事でも触れられているように、BGEの使いやすさは本当に替えが効かないと思います。ロジックもそうだし、インポートエクスポートにはエラーがつき物なので、1つのソフトで完結すると言うのも大きいです。
プラットフォームの少なさとパーティクル機能の弱さというネックが無ければ、BGEを選ぶんですけどね、、、、。

コメントの投稿

非公開コメント

このブログについて
□ ブログ内容
決まった趣旨はありません。
興味を持ったこと・日常で行ったことを何でも書きます。

3DCG・プログラミングなどが多めです。

□ 現在の活動
・ウェブサイト制作
 (http://tiblab.net)
・3Dゲーム制作
 (コックパニック)
検索フォーム
ユーザータグ

Blender キャプチャ blendファイル BGE Python GameEngine ムービー Android CG  Red5 Terragen C# C++ 

カテゴリー
プロフィール

TiBra

Author:TiBra
趣味でCG制作、プログラミング等を行っています。メイカーズに憧れています。

ネットを通じた交流を広げたく思っていますので、コメント・メールはお気軽にどぞー

戯言程度のことは、こちらのブログに投稿しています。基本戯言なので、実質移転しているようなものです。

Mail:tibraあっとlive.jp
HP:TibLabmemocode
動画:VimeoFC2動画ニコニコ
ファイル:SkyDrive
企画:3Dゲーム作業実況

Blogリンク
不都合がございましたらご連絡ください。
当ブログのリンクバナー
FC2 ID
FC2カウンター
RSSフィード+解析コード