PaperVision3Dの最近のブログ記事

wonderfl | 音 particlesSoundVisualizer

●要 FlashPlayer9

particlesSoundVisualizer.jpg





久しぶりにwonderflってみました。
ずっとSoundMixer.computeSpectrum 使ってサウンドビジュアライザー作ってみたかったので満足。



wonderfl | 宇宙 ParticlesSphere

●要 FlashPlayer9

particlesSphere.jpg






org.papervision3d.objects.specialディレクトリにParticleFieldってのがあったので使ってみた。
各パーティクルをSphereの頂点座標に動かすだけだけど、BlendMode.ADDとColorTransformを使うだけで結構キレイになるもんだな~。



Papervision3D | FIleLoadEventは使うべし

今更ですが、papervision3d.events~にFileLoadEventってのについてですが。
以前はprogressEvent取得するのちょっとめんどかったんで、なにかと~AssetMaterialでテクスチャ貼り付けしてたんですがやっぱ使いだすと便利です。ケースバイケースですが。
~FileMaterial系でオブジェクトを読み込む時は必須で使ってます。
使い方は簡単でリスナー登録にて各イベントを呼び出せばおk。


Planeオブジェクト生成時ではアルファ0で



外部ファイル読み込み完了でファードイン



Papervision3D | QuadrantRenderEngineを試す

papervision3dは基本的に同座標上の処理が苦手みたいで各3DObjectが同じ座標上にくるとどちらを優先的に表示するかテンパってしまいポリゴン欠けの症状がでます。
毎回その状態を回避するためにz座標をずらしたり、セグメントの数を増やすなりの微妙な処理を続けてたんですがその状態を回避するレンダリングエンジンがあったので使ってみました。


● QuadrantRenderEngine Test

・Basic : BasicRenderEngine

・Z-sort: QuadrantRenderEngine Z-sprt (ポリゴンの前後関係計算処理)

・SPLIT : QuadrantRenderEngine SPLIT (ポリゴンの分割計算処理)

・ALL : QuadrantRenderEngine ALL (Z-sort & SPLIT 両方適用)








StatsViewにてFPS負荷を表示してみたんですがやっぱりそれなりに負荷が強くなりますね。。
Scene内に複数のDisplayObject3Dがある場合は結構な負荷になるのであまり有効ではないかも。
今回案件でこの処理が必要になったので使用してみましたがSceneを分けて使用しないと重すぎて使い物にならなかったです。。
これも前回エントリと同じく品質管理の部類ですがやはりケースバイケースで用途によりうまく使い分けるのが有効ですね。

下記参考にさせてもらいました
note.x -[PV3D2.0] QuadrantRenderEngine-
clockmaker Blog -PV3DのQuadTreeを試してみました-

関係ないけどやっぱpv3dはおもろいな~。




小ネタです。これ意外と気付かない人いるんじゃないでしょうか

papervision3dを使用して仮想3D空間を作るときに地面となるものが存在させる時や、
Displaybject3Dを正面からではなく、角度をつけて遠近を表現したいことは多々あります。
その際、パースがキツくてイメージが荒れてしまうのを防ぐためにスムージングをかけてごまかしたり(?)しますが
有効なのはイメージをx倍のサイズで読み込んでDisplayObject3D生成時にwidthとheightを1/x(規定値)に戻す、です。
アパレルのフルフラとか背景全体イメージでオーサリングしたことある人は必ずこのやり方すると思いますが、papervisiotnでもこれはかなり有効です。

● 品質管理ナシ (image.jpg width:500px, height:500px)



● 品質管理アリ (image.jpg width:1000px, height:1000px)



読み込むデータのサイズにもよりますが明らかに後者処理の方がきれいなので
出来るだけやったほうがいいですね。

●要 FlashPlayer9   ※ステージクリックで変形

sphereVertices.jpg



頂点座標を取得してプリミティブ変形してみました。
ポリゴンの頂点座標を取得することでアイデア次第で色々応用できます。
今回はテストとしてプリミティブの変形と擬似的に生成したSphereの各頂点座標上に小さいSphereを生成しプリミティブの変形と共にモーションをつけてみました。


前回エントリでuseOwnContainer でalpha操作が出来るようになると書きましたが
どうやら ./org/papervision3d/view/layer/~のLayerディレクトリクラスでも色々な操作が可能みたいです。
とりあえずわかる範囲で網羅してみたんですが、基本ViewportLayerで操作した時とuseOwnContainer をtrueにした時ではalpha操作、フィルター、トランスフォームとかどちらでもだいたい同じことが出来るっぽいっすね。
ただColorTransformでのカラーの操作をuseOwnContainer でやろうとすると以下のエラーが出て出来ませんでした。



まあcolorTransform プロパティがないから出来ないのは当然。。
じゃあViewportLayerはどうなの?と思ってやってみたらバッチリ出来るし。
そしたらそのままViewportLayerでカラー操作してuseOwnContainer = trueでフィルターとアルファ操作しようとしてみたらViewportLayerのみ反応してフィルターとアルファは反応なし。。。
どーやらどっちかしか使えないっぽいですね。

まあうまく使い分ける感じで。
基本useOwnContainer の方が使い勝手がいいけどエフェクティブに攻めたい場合はなにかとViewportLayer愛用しそうかな。
BitmapEffectLayerとかもうまく使えば表現幅がひろがりそうw

とりあえず下記ViewportLayerの使用方法です。



papervision3D | alphaを操作する

displayObject3Dのalphaを操作、、
でっきりalphaプロパティが見つからなかったので直接操作はasをカスタマイズしないと出来ないもんだと思い込んでました。。いやーまだまだです。
今までalphaを操作するには ↓

1:asカスタマイズ
2:viewportを格納したSpriteもしくはMovieClipのalphaを操作

の2通りしかないと思ってました。

んでたまたまこのブログ見てたら操作方法発見しました



useOwnContainerをtrueで操作できるようになってたんですね
てっきりfilterも出来ないかと思ってたよ 泣
せっかくカスタマイズしたのに意味ないし。。。 しかもググッてみたら結構エントリでてました。

まあそんな細かい発見が楽しい今日この頃ですw

ちなみにuseOwnContainerをtrueにするとOBJECT_CLICKとOBJECT_DOUBLE_CLICKが実装出来なくなるみたいです。


AS3.0 | カウントダウン+papervision3D

●要 FlashPlayer9 papervision3D_2.0

countdown.jpg

なんとなくカウントダウンの汎用クラスを作ってみたのでついでにpapervision3Dに落とし込んでみました。
カウントダウンのロジックは基本的に設定時刻と現在時刻をミリ秒で差分を抽出して、その差分のミリ秒を表示したい単位に変換すれば出来ます。仕組みがわかっちゃえば簡単です。
下記カウントダウン作成時の基本ロジックです。よければ参考にどうぞ




ただやっぱりただのカウントダウン(default verのswf)は面白みに欠けるのでなにかぼーっと眺めていても飽きさせない仕様にしたいところです。
今回は思いつきでpapervision3dで未来数値表示的なカウントダウン(papervision3D verのswf)を作成してみたけどいざ考え出すと表現的に色々出来そう。
vectorvisionで数字を散らしてみたり、box2dで物理表現してみても楽しそうだし、tweensyのfxでエフェクティブなのもいいかも。

●要 FlashPlayer9 Papervision3D_2.0

autoCamera.jpg

自動で対象オブジェクトを追尾してくてる関数があったので使ってみた。

Camera3D.orbit();

pitch : Rotation around X=axis (looking up or down)
yaw : Rotation around Y-axis (looking left or right)
useDegrees : Whether to use degrees for pitch and yaw (defaults to 'true')
target : An optional target to orbit around


使い方は簡単でENTER_FRAMEにて呼び出すだけ。
ただ第1引数と第2引数の数値代入次第では面白い動きが期待できそう。
今回はとりあえず定数で。。
とりあえずゲームとかでのカメラパンとかでは結構役に立ちそう。
webコンテンツ内では視点(camera)が移動する動作の方が気持ちよさそうだからあんま使わないかもな~。