[PV3D2.0] FrustumClipping
PV3Dは、(Away3Dも)ポリゴンがカメラに近づき過ぎると、ポリゴンを構成する頂点がカリングされて結果としてポリゴンが丸ごと消えてしまうという欠点があって、地面に見立てた板ポリなどの表示で結構苦労する。
これを解消するには、カメラのnearクリップ面と交差するポリゴンを毎フレームチェックして、nearクリップ面付近で切ってやり、頂点、uvを再設定する(これをシザリングと呼ぶらしい)必要があるのだけど、この機能が実装された模様(Away3Dはまだ)。Sandyや、Altanativa3Dにはすでに実装されていた機能だけど、PV3Dもようやく一歩踏み出したと。
詳しい話は実装者の Andy Zupko 氏のblog参照
zupko.info | Papervision3D – Now Featuring Frustum Clipping
簡単な使い方としては、下記のように
renderer.clipping = new FrustumClipping(FrustumClipping.ALL);
として、renderer.clipping プロパティに FrustumClipping オブジェクトを渡せばいいと。
FrustumClipping の引数には、
- FrustumClipping.NEAR
- FrustumClipping.RIGHT
- FrustumClipping.LEFT
- FrustumClipping.TOP
- FrustumClipping.BOTTOM
- FrustumClipping.ALL
が指定できる。
これは恐らくカメラの視錐台の各面を指していて、どの面との交差をチェックし、ポリゴンを切るかを設定できる模様。FrustumClipping.ALL なら、視錐台の全面がシザリング対象になる。個別に指定する場合は、
renderer.clipping = new FrustumClipping(FrustumClipping.NEAR + FrustumClipping.BOTTOM + FrustumClipping.TOP);
という指定も可能。
てことで、喜び勇んで 以前作ったコレ に使ってみたんだけど…
Frustum Clipping Test(要:FlashPlayer9)
確かに、nearPlane付近のポリゴン消失は解消されたけど、重い〜。
Andy Zupko 氏のデモみたいに、skyBoxのポリゴン欠けを防ぐような使い方が今のとこ妥当かも。どうもシザリング対象を総当たりでチェックしてるっぽいなぁ。FPS的一人称視点ゲームとかに使うには、Altanativa3DのようにBSPツリーでシザリング対象のチェックを最適化するとかしないと、かなりムリめ。
とはいえ、できなかったことが出来るようになったので、工夫次第で使いどころはありそうだ。
08/10/11追記:
Rev.752の修正で、Frustum Clippingが若干高速化。ギリギリ現実味のあるパフォーマンスになってきた。
Frustum Clipping Test Rev.752(要:FlashPlayer9)
関連する投稿
Trackback URL : http://blog.r3c7.net/wp-trackback.php?p=229
hi There, would be very goooood to have this site in english too
luckely i can read the code
[...] で、一応解決。 FrustumClippingクラスについては[PV3D2.0] FrustumClippingnote.xを参照。 [...]