そしてZ3Dエンジンは真の力を見せる

ごめんなさい。いままでZ3Dエンジンの力を過小評価してました。

Z3Dエンジンというのは、D504iおよびD505iに搭載されている3D描画エンジンです。OpenGL似のAPIを使って、ケータイ上で3D描画を可能にします。

今までD504i/505i用3Dアプリを作ってきて、「ケータイで3Dが動くなんてすごい!」と喜びつつも、「でももうちょっとスピード出ればなあ」と思ってました。描画ポリゴン数を増やすと、すぐにフレームレートが下がっていってしまうのが悲しかった。

ある日、Dの開発元である三菱のページを見ていると、こんなページがあることに気づいた。

Q. 3Dの表示を速くしたいのですが?

地面 + 木 + 岩の描画を行う場合、これらを別のFigureとして用意して別々に描画するよりも、1つのFigureにして、1回の描画で済ませた方が高速になります(1つのFigureが複雑に(頂点数・ポリゴン数が多く)なっても、Figure数が増えることに比べれば、実行速度への影響は緩やかです)。

要するに、プリミティブをばらばらに書くより、Figureやディスプレイリストを使ってまとめた方が速くなるということだ。ならいっちょ実験してみるかということで、ひとつのディスプレイリストのなかに山ほどポリゴンを詰め込んで動かしてみた。

今までよりだんぜん速かった。

Z3Dエンジンでは、C3DGraphicsのメソッドを呼び出すオーバーヘッドがひどく大きく、メソッドを何回叩くかが処理速度を支配してしまうようだ。なので、ディスプレイリストを使ってプリミティブを取りまとめ、callListメソッドで一気に描画することで、大幅な処理速度改善を行うことができる。

なので、静的なプリミティブに関しては、かなりの数を描画することが可能になる。さっそくゲームをひとつ作ってみた。

D505i用の3Dドライブゲームドライブゲームの地形は静的なデータの代表格だ。地形データをディスプレイリストの中につっこみ、描画させている。これによって、それなりの量のポリゴンを描画させつつ、だいたい毎秒20フレームを確保できた。