C#2.0時代のゲームプログラミング(45) 〜 OpenGLは商用開発の夢を見ない?! (2)

OpenGLDirectXと比較して圧倒的に駄目な理由として、テクスチャサイズの制約が挙げられる。


常識的には、ビデオメモリ間の転送であればビデオカードによるアクセラレーションが期待出来る。要するにビデオメモリが空いてて、ビデオメモリにテクスチャを確保できるかどうかが鍵なのだが、そのためにはビデオメモリをなるべく無駄遣いしないことが大切だ。


当たり前のような話だが、OpenGLに限ってはこれが全然当たり前ではない。OpenGLではテクスチャサイズが2の累乗でなければならないという制限がある。近年2Dゲームでポピュラーな解像度である800×600のテクスチャを確保しようと思うと1024×1024サイズのテクスチャを確保しなければならない。RGBA8888の32bppなら、4MBだ。800×600なら、1.83MBで済むはずのところだから、倍以上の領域を確保していることになる。裏を返せば、確保されたテクスチャの半分以上の領域は使われないゴミのような領域なのだ。こんな馬鹿な話があっていいのか。限られたリソースをもっと大切にしやがれ。


まあ、もともとは、テクスチャはポリゴンに貼って使うものであって、2Dのギャル絵を描画するためのものではない。だから仕方ないと言えるのかも知れないが、いまどき2Dのゲームでも3D機能を利用して実装するのは半ば常識的に行なわれている*1ことであって、2の累乗サイズのテクスチャでなければならないという制約は痛すぎる。


(つづく)

*1:実装の容易さから3Dの機能を用いて実装をしているだけであって、3Dの機能を用いるべきだと言うわけではない。pixel shaderを用いるのでなければ加色・減色・ブレンド等の限られた色合成しか出来ないので、本当に2Dエフェクトを追求し、汎用的なシステムを目指すならば3Dのハードの機能には頼らず完全に自前で処理したほうが良いだろう。ただし、それには莫大な労力が必要となる。