Hatena::ブログ(Diary)

shi3zの長文日記 RSSフィード Twitter

2010-08-01

ゲームプログラマになる方法 02:06

ふと、ゲームプログラマになるにはどうすればいいか、というページを見つけた。

1.とりあえずC言語。ポインタや構造体は完璧に理解できないとだめです。

「新版 明解C言語入門編」。

http://www.bohyoh.com/Books/MeikaiC01/index.html

「Cの絵本」http://www.seshop.com/detail.asp?pid=1806

1.5.DXライブラリの学習。ゲームプログラミングの楽しさを味わって下さい。

「DXライブラリ置き場 HOME」http://homepage2.nifty.com/natupaji/DxLib/

「ゲームプログラミングの館」http://dixq.net/g/

「ゲーム作りで学ぶ!実践的C言語プログラミング」http://karetta.jp/book-cover/game-programming

2.基本的なアルゴリズムとデータ構造の学習やデバッグ技法など。DXライブラリと並行で進めて下さい。

「アルゴリズムの絵本」http://www.seshop.com/detail.asp?pid=4179

「新版 C言語によるアルゴリズムとデータ構造」http://www.bohyoh.com/Books/CAlgoData/index.html

「C言語による最新アルゴリズム事典」http://www.amazon.co.jp/dp/4874084141

「C言語 デバッグ完全解説」http://www.amazon.co.jp/dp/4774133620

ここまでが2D編です。プロを目指す人は下に続きます。

3.C++言語。最低限クラスは理解を。

「明解C++http://www.bohyoh.com/Books/MeikaiCPP/index.html

「独習C++」http://www.amazon.co.jp/gp/product/4798103187/

「ロベールのC++入門」http://www.amazon.co.jp/dp/4839926050/

4.WindowsAPI(OSの仕組み)の学習。途中までで良いですがWindowsのメモリ、プロセス/スレッドは理解してください。

APIで学ぶWindows徹底理解」http://software.nikkeibp.co.jp/software/backno/04apimook2.html

「Windowsゲームプログラミング」http://wisdom.sakura.ne.jp/system/winapi/index.html

5.DirectXの学習。色々ありますので必要そうなのを。

「ゲームプログラミング入門」http://www.amazon.co.jp/dp/499050061X

「ゲームプログラマになる前に覚えておきたい技術」http://www.amazon.co.jp/dp/4798021180

DirectX ゲームグラフィックス プログラミング Ver. 2.1」http://www.amazon.co.jp/dp/4797341874

「DirectX9必携」http://www.amazon.co.jp/dp/4990500601

「逆引きゲームプログラミングfor Windows DirectX」http://www.amazon.co.jp/dp/479801169X

6.ゲームアルゴリズム、数学、AIの学習。必要なものを自分でチョイスしてください。

「ゲーム開発のための数学・物理学入門」http://www.amazon.co.jp/dp/4797329076

ゲームエンジンプログラミング」http://www.amazon.co.jp/dp/4797331976

「実例で学ぶゲーム3D数学」http://www.amazon.co.jp/dp/4873113776

「実例で学ぶゲームAIプログラミング」http://www.amazon.co.jp/dp/4873113393/

「ゲームプログラミングのためのリアルタイム衝突判定 」http://www.amazon.co.jp/dp/493900791X

「3D格闘ゲームプログラミング」http://www.amazon.co.jp/dp/4797341807

「3DRPGプログラミング」http://www.amazon.co.jp/dp/4797330465

「アクションゲームプログラミング」http://www.amazon.co.jp/dp/4797335971

「アクションゲームアルゴリズムマニアックス」http://www.amazon.co.jp/dp/4797338954

「パズルゲームアルゴリズムマニアックス」http://www.amazon.co.jp/dp/4797347090

シューティングゲーム プログラミング http://www.amazon.co.jp/dp/4797337214/

シューティングゲームアルゴリズムマニアックスhttp://www.amazon.co.jp/dp/4797327316

「弾幕 最強のシューティングゲームを作る!」http://www.amazon.co.jp/dp/4797352299

7.リアリティのための3Dシェーダの学習。必要に応じて。最初はいらないです。

「DirectX 9 シェーダプログラミングブック」http://www.amazon.co.jp/dp/4839912475

「DirectXシェーダプログラミング 仕組みからわかるゲームエフェクトテクニック 」http://www.amazon.co.jp/dp/4797344962

オリジナルゲームの開発。会社によっては提出が必須です。

それとこちらのコラムもチェックしておくこと。

「3Dゲームファンのためのグラフィックス講座」

http://game.watch.impress.co.jp/docs/series/3dcg/

「3Dグラフィックス・マニアックス」

http://journal.mycom.co.jp/column/graphics/index.html

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1438427284



本当にこんなに勉強する必要があるんだろうか?*1

ともあれ、僕はいまの高校生がこんなに大量の「ゲームプログラミング歴史大全」みたいなのをマスターしないとゲームプログラマを目指せないとしたら、業界としてヤバいと思う。


いやーだってさ。

これって、高校だけでなくて大学、社会人になってから勉強してるものも含んでるよね。ふつう。


高校生にこれだけ勉強しろっていっても逃げ出すと思うなあ。


それでようやっと、ここに書いてある本を全部マスターしたとしても、面白いゲームをつくれるようには決してならないじゃない。

ここに挙げられている本のどれをどう読んでも、「然々の理由によって、このゲームは面白いのです」とかは全く書いてないし、どこかでみたことのあるようなゲームのテンプレを模倣するようなテクが身に付くだけでオリジナルが作れるようにはならない。


要するにキャリアパスのなかではただの一回も「ゲームを面白くする方法」についてトレーニングしてない。それはゲームを作ってるといえるのか?


ゲームっぽいものだろうけど、一昔前のゲームではないなにか、を作るだけなんじゃないのかなあ


ゲームってのは、エンターテインメントなんだから、数式を使いこなしたり、アルゴリズムを使いこなしたり、または考え出したりっていうのは、あくまでも手段、手法であって、ゲーム開発そのものじゃないんじゃないかと思うんだ。


あと、彼(?)が就職するのって、大学いくとしたら早くても4年後で、4年後にようやっとDirectXのシェーダープログラミングをマスターして本当に合ってるのか?と心配になる。


大事なのは三角形を大量に描画することではなくて、どんな面白い体験をつくり出すかってことじゃないのか?


そのために3Dが本当に有効なのか?

もし有効だとして、既存のゲームエンジンを一切使わずに自分でハードを直接叩くようなプログラミングを4年後もまだやんなきゃなんないのか。


もし仮に、まあやんなきゃなんないとして・・・だよ、

シェーダープログラミングのパラダイムがいまと全く同じとはぜんぜん思えないし、そもそも3Dってずっと主流で居続けられるの?


たとえばUnreal Engine3くらいのものがOSにバンドルされてくるようなことも十分考えられて(いまもすでにフリーだし)、そこまでいかなくてもUnityでもいいかもしれない。


けど、3Dが本当にそこまで必要なのかどうかもわかんない。


ゲームプログラマになりたかったら、まずゲームを作らないとだめなんじゃないかなあ。


C言語だけ勉強したってできるようにならないし、そもそもゲーム作りの腕を磨くんだったら、そんなニッチで誰も遊べないような環境、要するに特殊な3Dアクセラレータなんかが必要な環境でゲームつくると、友達に「おれがつくったゲーム遊んでみろゴルア」とか言えない。


もっと友達とかとみんなで遊んで自慢しやすい環境、たとえばPHPとかiPhoneとかなんでもいいけど、言語なんか簡単なやつのほうがいいに決まってる。


そういうので友達に自慢して、みんなで夢中になって遊んだり、遊ばせたりしながら、スパイラル的にゲームを改良して面白くしていく、というプロセスの体験こそが重要で、あとはまあお定まりの最先端の技術のキャッチアップというのも当然必要だろうけど、そんなものは五年経ってみないとわからないものでね。


なんだか3Dプログラミングというやつが、これだけ普及すると、かつてのスプライトとかBGとか、そういうものと同列になってきちゃっている気がしてしょうがない。


で、実際に家庭用のハードコアなゲームで食っていける時代はあと何年続くのか、もうだれにもわからない時代だと思うんだけどなあ


これが2010年のベストアンサーだとはどうしても思えないけど

何も知らない高校生に正常な判断力を期待できるわけもないし、結局は自分の人生だから自分で考えてね、というしかないのか。


最近、Twitterで昔お世話になったゲーム開発の師匠と再会(?)して、あの頃・・19歳くらいだったけど、その頃の自分を思い出して、うん、思い切って3Dやるの辞めて良かったな、と。


彼に出会ってなかったら、僕はやっぱり3Dばっかりやってただろうし、それは決してゲームを作るためじゃなかったからね。


もともと3Dプログラマがゲームを作ってた理由は、ふたつあって、ひとつは仮想世界の構築はゲームのテーマに近しいところにあったってことと、もう一つは、そもそも3Dプログラマにゲーム以外の食い扶持がほとんどなかったから、というのがあると思う。


それより前は3D屋といえば、大学かNASAくらいにしかいなかった。

バンプマップが発明されたのはNASAのジェット推進研究所だったと思う。

というか、ジム・ブリン*2JPLの職員で、要するにそれくらいしか3D屋の出番はなかった。


僕が子供の頃は、ゲーム業界において3Dは、どちらかというと異端だった。

誰にも見向きもされないワイヤーフレーム

けど、そんなもので飯を食うには本職の研究者になるか、ゲーム屋になるくらいしか方法が無かった。

ポリゴナイザーの開発やプレイステーションという技術革新があって、そこからゲームが一気に3Dになった。


それでも最初はキワモノ扱いされていた。


そんなわけだから、ゲームプログラマになるためのキャリアパスがこんなに3Dに振ってたらマズいだろ、と僕は思う。


今、この瞬間、確かに基礎的な3Dプログラミングくらいはできたほうがいいかもしれないけど、4年後もゲームプログラマと呼ばれる人種が、3Dプログラミングしかできなかったとしたら、その先を生き残っていくのは難しいはずだ。


昔は特殊な技術だったけど、今は本もたくさんあるし、ゲームエンジンも安い。いま3Dプログラミングを学ぶというのは、OSを作る方法を学ぶようなもので、学んで損は絶対ないけどそれが社会で通用するスキルになると思っちゃったらマズい。そのくせ、3Dプログラミングは奥が深すぎる。


若い子に3Dプログラミングをやらないとゲームプログラマにしてやらん、とか言ったら、逃げ出されそうだ。


僕がわりと若い人に対して臆病なせいかもしれないけど、いまの若者にゲームプログラミングを勧めるなら、「言語はPHPでいいよ」「JavaScriptでいいよ」という感じのほうがゲームプログラミングの楽しさとか、ゲームを面白くする本質とか、その醍醐味とか、わかってくるんじゃないかと思うんだよなあ。


まあ僕はもうずいぶん長いことゲームプログラマじゃないので回答に書くのは控えますがー

P.S.

あわせて読みたい

ゲームプログラマになるということ - Togetterまとめ

参考までに拙書

ゲームデザイン誇大妄想狂 (I・O BOOKS)

ゲームデザイン誇大妄想狂 (I・O BOOKS)

ネットワークゲームデザイナーズメソッド

ネットワークゲームデザイナーズメソッド

Direct3Dプログラミングガイドブック

Direct3Dプログラミングガイドブック

*1:だいたい、C++を勉強する前にC言語勉強しろとか、なんか時代錯誤じゃないか?いまどき純粋なCコンパイラとか存在してるのかも怪しいし、純粋なCで書かないといけないような現場ってまだあるの?(いや、最近の現場はぜんぜん知らないからあるのかもしれないけどね)まーでも、マシン語はどこかでやっとけ。という気がする。しかしWindowsのプロセスを理解している必要は全くない。そんなもんゲーム開発でもなんでもないわ。Windowsのメモリ管理を勉強するくらいなら、K&Rをしっかりやれ(あれ?じゃCか?)mallocの実装くらい自分でできるようになっておけば安心できる。Windowsのメモリ管理とか勉強する必要はない。とりあえずゲーム作るだけだったら。もっと仕組みに行こうよ。ここまでプログラミングにこだわるならCPUの構造ごとの動作の違いとか、パフォーマンスチューニングとか、並列処理の仕方を勉強しようよ。まあ必要ないと思うが。

*2:バンプマップやブリンシェーディングの発明者。現在はマイクロソフトリサーチ所属