自然オブジェクト生成エンジン「speedfree」 「GDC 2003」スペシャルレポート #15 | - 03/10 22:21 |
||||||||||||||||||||||||||||||
|
Text & Photo by トライゼット西川善司 ■この木なんの木,気になる木 speedtree/Interactive Data Visualization フライトシミュレータ,レース,アドベンチャー,RPG,FPS,アクションなど,あらゆるゲームジャンルにおいて,屋外シーンを取り扱う場合には「木」の存在は欠かせない。ただ,こうした自然物は一つ一つがユニークな形状のため,デザイナーが個別にデザインするのは少し難しい。レースゲームなどでは,デザインした一本の木をその非対称性を利用して,ちょっとずつ回転させてフィールドに配置することで,形状が異なる木がたくさん植わっているように見せたりしている(映画「トイストーリー」でもこのテクニックが使われている)。だが,非常に多くの木が登場する森林が舞台のようなゲームでは,このトリックを適用するには限度がある。 そこで最近では,こうした自然物の生成を算術自動生成する研究が進められている。 草木などの植物はフラクタル図形などでお馴染みの"自己相関関数"の組み合わせで表現できるという理論があり,Codecultの「Codecreatures」エンジンなどを始めとして,ゲーム開発サイドでもこの理論の適用が始まっている。そしてInteractive Data Visualization(IDV)のブースでは,この草木オブジェクトの生成とマネージメントを専門に行うミドルウェア「speedtree」を展示していた。 speedtreeは,草木モデルの生成ソフトと,その管理を行うミドルウェアで構成されている。草木モデルは30種目のバリエーションに対応,枝の分かれ具合,葉の付き方をパラメトリックに設定することで,一本一本形状の異なる草木を生成できる。ミドルウェアの方は,地形データとして600平方マイル(234平方キロ)の広さまでをサポート,フレーム当たり100万本の草木の表示が可能になっている。 ちょっと考えてみよう。木が1本当たり少なく見積もって1000ポリゴンだとしても,単純計算で1フレームあたり10億ポリゴンになる(これは到底表示できそうにない)。しかしspeedtreeは,非常にユニークな動的LOD(Level Of Detail:視点からの距離に応じてポリゴン数を増減させる仕組み)を導入することで,これを実現しているのだ。 このspeedtree特有の動的LODを具体的に説明しよう。視点から一定距離まではごく普通のLODを適用したポリゴンモデルの木を表示する。そしてそれ以上離れた木は,"ビルボード"で表現しているのだ。ビルボードは,その木をテクスチャに落とし込んだスプライトのようなもので,細かいジオメトリは持たないが,視点から離れているため視覚上ビルボードであることが気にならない。 前進しているようなシーンでは,ビルボードの木が一定距離で実際の3Dモデルに変わるわけだが,その際ポッピング(切り替わったことが知覚できてしまう)が発生するかどうかが気になる。しかしこれは,切り替えポイント付近で,3Dモデルからビルボードに落とし込んだ物をブレンドしながら表示しつつ切り替えていくことで回避しているという。 すべての木々の枝や葉が,独立したジオメトリを持っている距離で風の強さや方向などのパラメータを設定してやると,表示されているすべての木がパラレルに風になびく。これには非常に驚かされた。今回,ムービーファイルと実際に自分のPCでリアルタイムに実行できるデモソフトを入手できたので,自分の目,いや自分のマシンで試してみて欲しい。 パフォーマンスは,Athlon/1800MHzとNVIDIA/GeForce3 Ti500,そして1024×768ドット/32ビットカラーモードの環境下で,フレームレートが140fps前後。その場合のCPU負荷は,1フレーム当たり約0.5ms程度とのことだ。 また,あるゲームスタジオでは,すでにこのエンジンを活用したフライトシミュレータの開発に乗り出しているという。
・「speedtree」のムービーは「こちら」(16.7MB) ・リアルタイムレンダリングされる森を飛び回るデモは「こちら」(5.60MB) <<「speedtree」デモの実行方法>> (1)"HugeForest.zip"を解凍する("exe"および"data"フォルダができる) (2)exeフォルダ内のバッチファイル(*.bat)を実行する ※キー操作は,デモ起動時に表示されるキーコマンド表を参照のこと。バッチファイルは,表現する森の大きさやクオリティに合わせて複数用意されているので,正常に動作しない場合は別のバッチファイルを試してみよう。DirectX 8世代GPUが望ましいが,DirectX 7世代のGPUでも実行可能だ。 |