Flashビルトイン3Dを使った3Dエンジン

2010.04.14 | fake3d, flash

ビルトインの3Dを使って3Dエンジンをつくりました。

Papervision3Dなどとの違いとしては、ビルトインの3Dを使っていることでのメリットがいくつかあります。
テクスチャはspriteをそのままつかえるのでmouseEventの管理がしやすい。
テクスチャ内のアニメーション、フィルタもそのままつかえる。
テクスチャがパースが乱れない。(precise=trueの状態)
3D上のLineを書くのにlineto( x, y, z) のようにgraphicsぽく書ける。
上記のようなコンテンツをつくる場合にはPapervision3Dより高速。

短所としては、
テクスチャにアニメーションさせない場合は、pv3dのほうが断然高速。
モデリングした複雑データを表示するのには向いていません。
z-sortはobject,sprite単位。などなど。

個人的に、自分が作成するflashでの3D表現方法はplaneやcube、particle、lineを使ったものが多いのでそれを作りやすくするためのエンジンとなっています。
Cubeやplaneがアニメーションしながら動くコンテンツ。3Dでのフォトビューアなどをつくるのに向いています。
逆に、モデリングしたデータを使用したり複雑なオブジェクトを扱う場合には、断然Papervision3DやAway3Dが使いやすいです。画質を低にしてmaterialのsmoothをoffにしたPapervision3Dはかなり高速です。

あとは補助機能としてdebegするための機能をいくつか。unity3Dにあるdebug.drawRayと同じような機能をつけています。ベクトルの確認などに使います。これに関しては別の機会に書きます。

●Spec Test
Cubeを4×4×4で配置、mouseOverでアニメーション、ClickでオブジェクトにBlurFilter。
同程度のものをPapervision3Dを使用して作った場合
私の環境では、自作3Dエンジンでは40fps~50fps。
Papervisionで作ったものは、かなり不安定で10fps~20fpsくらいです。

いくつかサンプルなど。

●lines3D sample
nutsuのcodeを3D化。lineTo(x,y,z)で記述。cameraの追加など。

●nodes sample
sph62のcodeを元に3D化。

●lighting sample
cube30個にライティング。

line周りは、cullingを簡易的にしかやっていないので、fliterをかけてるときなどカメラとラインの位置によってはfilterをかけるサイズが大きくなるので重くなってしまう。そのあたりは調整が必要。
最近ちょっと放置気味だったので、もうすこしcodeを追加・整理したら公開しようかと。

comment

Please Leave a Reply

TrackBack URL :

pagetop