7 月 06 2008

Papervision3Dでレースゲーム制作 01 - 描画方法

Posted by tanjo at 5:31 PM

レースゲーム・サンプル画面

Papervision3Dでカーレースゲームを作ってみようと思います。
Flashで3Dのゲームができるなんて新鮮!?、…でも、頑張ってもShockwaveの足下にすら及ばないのは目に見えていますが。。。それはともかく、ウェブで公開するならFlashとしての強みを何とか活かせるかもしれない、とか、淡い期待を寄せつつ制作中です。

実は、制作よりもブログの更新がだいぶ遅れているので、現在、上のスクリーンショットみたいな状態です。(ゲームとしてはまだ遊べません。そのうちサンプルも公開します。)
制作過程で学んだこととかを、復習がてらここで公開していこうと思います。

さて、第1回目の今回は、基幹となる画面の描画方法について。

ライブラリとしてはPapervision3Dを使うことにしているんですが、フル3Dポリゴンでゲームを作るのは難しいと早くも判断(^^; 動作負荷のことや面倒くさい仕様のせいで、私の技量では作り込みが厳しそう…。
そういうわけで、どうにかして大変そうな部分を2Dや疑似3Dでごまかそう、ということになりました。

特に考えなければいけなかったのが、フィールド(コース床)の表現です。
Papervision3Dはシザリング(*1)が実装されていないため、手前にあるポリゴンがものすごく欠けやすい。さらに、テクスチャのパース変形も実質できない(*2)ので、パースのついた床テクスチャなんかは、これまたものすごい勢いでグニャグニャ歪みます。
これじゃレースゲームとしてつらいですね。
でもそれを防ぐために分割を増やして重くするのも、カメラ位置を高めにして迫力をなくすのもイヤ。

…とか何とかいろいろ考え、結局こんな感じに描画することにしました。2.7次元とでも言うのでしょうか?
床だけ固定ポリゴンにして、テクスチャを操作することで移動しているように見せる、っていう案です。

render

(*1)シザリング
画面矩形からはみ出る面をカットして、外側を描画しないようにすること、らしいです。
Papervision3Dでは、面の位置が画面内にあるかどうかの判定しかしていないっぽく、「基本画面外だけどちょっとだけ画面に映ってるニアポリゴン」とかは描画してもらえません。

(*2)パース変形
マテリアルの precise プロパティをオンにすると、パースのついたテクスチャがいい感じに描画されます。が、なにしろ処理が重く、それなら面の分割数を増やして歪み自体を減らした方が効率的っぽいです。

Leave a Reply