新年

あけましておめでとうございます。
このブログは始まってまだ1年も経ってないけど、今年もよろしくお願いします。


俺にとって去年はDXRubyの年だったが、今年もそうなるだろう。他にやることないし。
今年の目標はDXRuby1.1系を仕上げて、安定版1.2として公開すること。
DXRuby1.1は3Dではなく、擬似3Dをサポートするゲームライブラリだ。ここらへんは俺のコダワリ。誰がなんと言おうと。っていうか3Dわからないし。


たとえばSFCからPSへ、世の中は2D→3Dに移ったわけだが、この間には2Dハードウェアで3Dのような描画をするゲームがたくさん出た。クォータービューのもの(タクティクスオウガとか)や、透視変換するもの(マリオカートとか)などなど。
これらは完璧な3Dではないが、ただの2Dでもなく、座標の計算・描画の順番の調整など、しちめんとうくさいことを色々と内部でやる必要がある。
プログラマが頑張って実現していた時代だ。
ハードウェアが3Dに対応すれば、プログラマラクになるはずだ。
でも、PSが出て本格的に3Dできるようになって出てきたゲームは、擬似3D表現なんか必要ないと言わんがばかりにポリゴンをばしばし使って3Dぐりぐりするゲームだった。
3Dの本格的な計算は難解で、これまたプログラマは苦労したはずだ。
プログラマラクできる時代は来なかったのだ。


2D専用ライブラリでは、擬似3Dをやるのに当時のような苦労をするハメになる。3Dのハードウェアを使って擬似3D表現ができれば、いろんな部分でラクができるのではないか。
たとえばタクティクスオウガのようなクォータービューはDXRubyのサンプルで作ってあるが、あれは描画が大変重い。でも1枚絵にすると地形の向こう側に隠れることができなくなる。高速に描画するためには、なんらかの効率いいデータ形式と、描画処理を作り込む必要がある。
これを、あのような地形を3Dデータとしてメッシュで作って描画して、Zバッファを使えば何も考えずに向こう側に隠れることができるようになる。3Dっぽい見た目と効果を小細工で作り出すのなら、3Dにしてしまえばいいじゃない。そうすれば見た目と座標の関係も完全に一致する。
遠いところを縮小する処理も、DirectXにやらせてしまえば考える必要はなくなる。
DXRuby1.1でやりたいことは、3Dの空間の中を走り回るような3Dゲーを作れるようにすることではなく、2Dハードで苦労していた擬似3D表現を簡単に自然に実現することなのだ。
だから、標準では2Dと同じ座標系を持ち、ピクセル単位で奥行きも表現する。2Dで描画していた絵をそのまま画面の奥に移動できるようなイメージになっている。
SFC→PSですっ飛ばされた、2Dと3Dの間。2Dで実現する擬似3Dではなく、3Dで表現する擬似3D。2Dで擬似3Dするにはテクニックがいるが、3Dは知識がいる。テクニックも知識も必要ない擬似3Dは、3Dから機能を削ぎ落とすことで実現できる。
ある意味とてもDXRubyらしい機能だと思う。


というわけで今年も一年、心の趣くままに。