俺と3次元

 

 今回は語らせていただきます。画像一切なし、逆に独断と偏見あり。

 

・リアルを目指す

 この項では、リアルとは「現実の模写をして、実際の物事などに似れば似るほどリアルだ」という考え方で行きます。

 「テクスチャはなるべく拡大気味に使うと効果的」という記述がとあるスライドにあったそうです(98/2/17のPrejudice参照。ってもう無いかな?)。自分も前までそう考えてましたが(メモリを節約できる)、エアガイツ(AC・PS)をやって、それは作る方としては有効な手段でもリアルを目指す場合は好ましくない方法ということがわかりました。

 あなたは、”テクスチャを引き伸ばしたような床”を見た事がありますか?

 僕は無いです。実際の見え方を模写できてこそリアルに見える、という考え方だと、これはリアルを目指すなら好ましくないというのはわかるでしょう。元々ぼかしても同じようなテクスチャ(煙とか?)ならそれほどでも無いでしょうけど。
テクスチャを拡大気味に使うと安っぽく見えてしまいます。


 物事を真似る(それっぽく見える)ようにするには、大きく分けて2つのアプローチがあります。それは、「基礎的な部分から真似る」と「いきなりおおざっぱに真似る」の2つです。パーティクルで言えば、前者は「一個ずつ計算して描画」、後者は「一枚のテクスチャアニメーション」という所でしょうか。

 3Dをやりはじめてから、よく「これはどうしてこんな風に見えるんだろう?」という事を考えるようになりました。「基礎的な部分から真似る」という考え方ですね。例えばこんなこと。

 床への映り込みは計算式で表すとどんな感じか?(←これはその成果をこのホームページにも書きましたね) 遠くの山などは何故空の色に霞むのか?拡散反射と鏡面反射の違いは?拡散反射だと何故影になってない限りどこから見ても見る事ができるのか?何故銀や鉄など、よく反射する物は灰色(無色)っぽく見えるのか?何故光は屈折するのか?何故拡散反射面への視線の入射角が鋭くなるほど反射率が上がるのか?

 これらには、自分の憶測の結論があります。間違ってるかもしれないし、あってるかもしれない。そして、その答えをリアルな表現を考える時の参考にしたりしてます。


 「これはどうしてこんな風に見えるんだろう?」と考えてるのと同時に、実際の風景を見て「これはリアルだな」「これはリアルじゃないな」ということも一緒に考えてます。「この街灯(光源)を取ったらリアルっぽくなくなるだろうか?」とか「この物体を取ったらリアルっぽくない?」とか。実際の風景にはあっても、それを真似てCGにした時に嘘っぽく見えればリアルじゃない、という事で、「何がリアルに見えるのか?」というのを見つけだそうと日々考えてます。


 リアルを目指すなら、3Dゲームだけじゃなくて実際の街中の風景やテレビなどで見る事ができる山とか海とかの映像も見た方が良いですね。例えば”さよなら20世紀”(フジテレビ系列 月曜夜11:00〜11:20)は爆発と煙、そして強烈な光源がある時の地面の色などの参考になります。


 この書き方だと「リアルのためならメモリや処理速度、効率などが犠牲になってもやむを得ない」と聞こえるかもしれませんが、大事なのはどれをどのくらい重要視するかのバランスです。それぞれの兼ね合いとも言えるかもしれませんね。犠牲になる部分が少ないのが一番良いんですが。

 例えば、先程の「テクスチャはあまり引き伸ばして使うとリアルじゃない」という話。「でもメモリをいっぱい食う訳にはいかないから仕方が無い」と考えるのではなく、だったら模様を繰り返し使うという方法もあります。四角のポリゴンでテクスチャ座標(tu,tv)は左上(0,0)、右下(5,5)とか。テクスチャの絵にもよりますが、床とかには有効でしょう。

 あと、こういう事書いてますが自分はリアルよりも派手好きです。挌闘ゲームなどのエフェクト見るの好きだし、リアルよりも凝った演出やダイナミックな映像の方が好きだし。


 とどのつまり(いつの言葉だ…)、プログラムやゲームばっかりやってリアルを目指そうとしても限界があり、所詮既存の物の後追いしかできません。実際の見え方の真似をしようとしてるなら、実際の見え方が最高の教科書です。歩きながらでも学ぶ事もできるし。日々観察。

 

 

・3DFellow

 僕は”3D野郎”ではありません。別に”3D野郎”という言い方が嫌いな訳ではなく、むしろ”野郎”という響きが好きです。

 でも”3D野郎”というと「3Dをこよなく愛し、3Dに関する数学の事をよく理解していて、リアルさや最適化を好む」という人の事を指すようにと感じてます。

 僕は3Dも好きだけど2Dだって好きだし(そもそも1次元違うだけだし)、数学の知識は少ないですし(嫌いでも苦手でもないが、勉強はしてない)、リアルよりも派手を好みますし(FinalRealityを見ても何とも思わなかったが”ゆけゆけ!トラブルメーカーズ”のぶっといレーザーは「すげぇ!」と思った)、最適化に関しては、アセンブラなんかはインラインアセンブラを数回使った事があるだけという体たらく。基本的に最適化は後回しにしてます。

 あと「コンシューマ機の和ゲーよりPCの洋ゲーを好む」というのもあるかもしれませんが、うちのPC環境の都合で無理……。洋ゲーより和ゲーの方が好きなゲーム多いし。

 最適化の前に、「見栄えは変えず処理を簡単にする方法無いかなぁ」ということを先に考えますね。以前、DirectDrawで画面にノイズ(放送終了後とかのアレ)を出そう、と思い立ち、まず最初にC言語だけで作ってみました。Lockしてランダムな色の点を画面全体に書いてBltで表示。結果640x480で55fps出ました。次にインラインアセンブラを使って最適化して、120fpsまで速くするところまでいきました。

 が、その時”パレットをランダムに変化させるだけで十分”ということがわかり、「今までの苦労は……」とショックを受けてから、「最適化は後回し。まずは形にする」ということを重視するようになりました。

 

 3Dよりも、ゲーム作りの方が得意だと自分では思ってます(所詮自称だけど)。C言語歴は4年半、3D歴は1年ちょっとですが、ゲームプログラム歴は6年になります。

 ゲームプログラムといっても大した事はしてません。小学5年〜中学3年の時は小さいゲーム(1キーゲームとか、名前でパラメータが決まってターン制で戦うゲームとか)をいくつも作って友達と遊んだりしてましたが、最近では習作しか作ってません。しかも未完成品ばかり。元々ゲームとして仕上げるつもりが無いんですが。

 でも、ゲームをしながら「何を面白いと感じるのか」とか「ここは何故こう作られたのか」とか「これはどうやってプログラムしているのか」ということはいつも考えています。プログラマの方なら、「これはどうやってプログラムしているのか」ということはいつも考えていると思います。

 そういう勉強になるようなゲームを求めて買うと、何故か任天堂のゲームばかりになっているのに後で気付きました。それは3D時代の今でも変わりません(別に任天堂信者ではない)。

 

 

・俺と3D

 3Dプログラミングとの最初の出会いは確か高二の頃だったか、VectorSoftwarePackに入っていた"NORITAKO3Dimensional grahpics library system"の中のマセマティクス・イントロダクション(企画・執筆 清水 亮氏)なるドキュメントでした。当時は「幾何学って何?」という人間だったので(今も変わらない?)、それを読んで自前で透視変換して立方体をくるくる回してみて終わりでした(ポリゴン描画はmaster.lib使用)。て言うかそれ以上できなかっただけ。

 久々に、そして本格的に3Dの世界に足を突っ込んだのは、専門学校1年生の9月頃(1年4ヶ月くらい前)でした。その頃はDirectDrawを使って色々やってましたが、参考までにダウンロードしてみたDirect3Z(作者 清3Z氏)のサンプルをコンパイルしていじってみました。「……なんて簡単なんだ!」 座標を指定するだけでその位置にオブジェクトを表示してくれるとは!と、Direct3DRMのその簡単さと、Direct3Zのライブラリとサンプルに感謝してました。

 翌年(98年)の3月(10ヶ月前の話か……)のある日、Nintendo64とモノラルAVケーブル、パイロットウィングス64、GA-RUSH6/PCI、そしてDirect3Dプログラミングガイドブック(ご存知Shi3zさんの本。以下神無月本)を買って帰りました。その日からはもぉ3D三昧。

 神無月本に載ってる、RMとIMを一緒に使うということをしばらくやって、勝手にRenderState変えまくるRM(IMの方がRMに割り込んでるんだから仕方ない)に不満爆発しそうになるも、我慢して使う。9月に入った頃だったか、行列計算を覚えて(←学校で習わなかった)、IMに移行する。RM以上にすっきりした使い方ができて、「今までのRM+IMの苦労はなんだったんだ……」という気分になる。RM+IMは飽くまでRM→IMへのスムーズなステップアップの手段ですね。RM+IMでゲームを作り上げるのはお勧めできません。いやホント。

 そんなこんなで、今こういうホームページを作っています。こうして振り返ってみると、Shi3zさんがいなければ3Dはやってなかったかもしれない、などと思ふ。やってたとしても、DirectX6が出てからRMを始める、というところでしょう(サンプルの質が……)。

 でも、3Dの本が神無月本しか無いのはまずいですか?

 

 今回はいろいろ語ってみました。こういうのは楽で良いですね。画像用意しなくていいし、勉強も要らないし。ビルボードの4倍速で文章完成です。

 これからはこういう話や、自分のやったゲームの紹介、3Dではなくゲームプログラムの話、ゲームデザインについて思う事などを書いていきます。当初からその予定ですし。では、ついでに今度書くつもりの話のフリを。

 スーパーマリオ(FC)は2Dです。スーパーマリオ64は3Dです。F1レース(FC)は2Dです。タクティクスオウガは3Dです。Wolfenstein3-Dは2Dです。ファイナルファイトは3Dです。ストリートファイター2は2Dです。ゼビウスは3Dです。

 なんだか謎かけみたいですね。Wolfenstein3-Dが2Dというのが謎ですね。”3-D”って書いてあるのに。答えはまた今度。

 

written by Y.Ohde  e-mail : oode@alles.or.jp

back