note.x

PV3Dのテクニカル担当のポジションを揺るぎないものにしつつある、Andy Zupko 氏により、PV3Dにも Z-Sort の問題を克服する新機能が実装されたみたい。何をするものかというと、Away3Dのコレと全く同じ。

詳しい話は、御本人のエントリーを参照していただくとして、
zupko.info | Using QuadTrees In Papervision3D
久々に備忘録としてメモっとく。

新たに加わったのは、QuadrantRenderEngine というレンダラ。
レンダー定義の際に org.papervision3d.render.QuadrantRenderEngine をインポートしたうえで

renderer = new QuadrantRenderEngine(QuadrantRenderEngine.ALL_FILTERS);

とか指定する。引数に指定できるのは

  • QuadrantRenderEngine.CORRECT_Z_FILTER
  • QuadrantRenderEngine.QUAD_SPLIT_FILTER
  • QuadrantRenderEngine.ALL_FILTERS

の3つ。ザックリ言うなら
CORRECT_Z_FILTER が、ポリゴンの前後関係を細かく計算して処理するフィルタ。QUAD_SPLIT_FILTER が、必要に応じて、ポリゴンをリアルタイムに分割するフィルタ。ALL_FILTERS は、CORRECT_Z_FILTER と QUAD_SPLIT_FILTER の合わせ技。

うーん。Away3D の AnotherRivalFilter と、QuadrantRiddleFilter そっくり。(余談だけど、PV3D が Away3D のノウハウを好き勝手に取り込み過ぎだということで、Away3D陣営はアンチPV3D機運が高まってるみたい。Away3Dが全クラスをオリジナルで刷新したのは、この辺の事情が大きい。)

以下、挙動を確認するデモ。
Quadrant Render Test(要:FlashPlayer9)

右下のボタンで、フィルタの切り替えができる。
単純な形状ならそれほどパフォーマンスに影響なく動く感じ。

ポリゴン増えたらどーなんのかってことで、以下も試してみた。
Quadrant Render Test02(要:FlashPlayer9)

なぜか、QUAD_SPLIT_FILTER が絡むと破綻する。バグ?仕様?データの不備?原因が解らないけど、とりあえず重い。この機能も、先日の FrustumClipping と同様に、使いどころが肝心ですな。

恐らくAway3DもPV3Dもロジックが一緒なので、あんまり性能差なさそう。やっぱ、Altanativa3D が圧倒的にレベル高し。とはいえエンジンの性能差をアイディアで埋めるのが一番勉強になるので、がんばるべ。


Drive Demo(要:Unity WebPlayer)

  • [W or ↑]キー:前進
  • [S or ↓]キー:後退
  • [A or ←]キー:左ハンドル
  • [D or →]キー:右ハンドル
  • [Space]キー:ブレーキ

Unityをコツコツ勉強中。前回作ったデモは、あらかじめ用意されてるアセットに含まれるスクリプトを使っただけだったんで、自前スクリプトでの制御を試してみてる段階。

物理エンジンのおかげで、衝突判定とか難なく出来ちゃってラクチン。その分挙動がおかしいと違和感全開なので、適正な値を見つけるために少しずつパラメータ変えながら動きを作った…まだおかしいけど。Unityは実行しながらパラメータいじれて、リアルタイムにそれが反映されるので、こういう泥作業もやりやすかった。Flashコンテンツも、こういう環境で作れるといいなぁ。

PV3Dのデモで使った206WRCと、オーバルサーキットをほとんど手を加えず使ったんだけど、シェーダーでここまで印象変わるとウレシイな。逆に、PV3Dとかで使う目的で作ったローポリモデルも、Unityに持ってくればそれなりに品質が向上するとなると、ある程度リソースの使い回しができてステキ。

ボチボチ試用期間が終わるので、とりあえず Indie 版買ってみようかな。