Home > webプログラム > Papervision3D

パノラマプレイヤーチューニング

うちが提供しているパノラマプレイヤーはPapervision3Dをベースにしたオリジナルのプレイヤーなのですが、少しパフォーマンス面で気になるところもあったのでチューニングしてみることにしました。

初めに組んだ頃よりPV3Dのバージョンも上がっているので、最新の物で再ビルドしてみる。さらにブランチバージョンとして、「cs4」「fp10」という2つのバージョンがあることを知り、その2つでもビルドしてみることにしました。
Flash Player 10からFlash自体も3D機能が付与されているので、それに最適化されているのかな?という想定です。(要は自分のソースに手を入れずにベースの改善に期待する他力本願w)

結論で言うと、3つのパターン全てでパフォーマンスの改善は見られませんでした。
PV3D自体にあまりパフォーマンス的なチューニングが施されてないのか、オフィシャルの3D機能に最適化されていないのか?(バージョンアップの履歴を追ってないのでアレですが…)

ということで、次に試してみたのはPV3Dを使わずオフィシャルの3D機能を使ってパノラマを実装してみる。。。

についてはパフォーマンスの点も渋いし、他にも表示面でちょっと問題が…

と、4パターン試してみたのですが色々と試していく中でパフォーマンスに影響してそうな要因と解決のパターンが出てきました。
こちらについては追って実装してみたいと思います(ここでようやく自分のソースに手を入れる算段ですwww)。

Progression+Wordpressでポートフォリオ的な

  1. ブログの記事に投稿した画像を抽出して←これはWordpressのテンプレート
  2. Progressionで読み込んで
  3. CoverFlowみたいな←これはPapervision3D

ポートフォリオ的な物を作る。

ということで出来たのがコレ。
http://www.studio-bloom.net/public/portforio/

1は昨日の記事で、
2は案外すんなり行けて、
3で躓いてた。

ローディングのプリローダーなんかの実装がまだだったり、ボタンがボタンとも言えない作りだったりするのは実験だからです。言い訳です。

画面遷移なんかの実装が超簡単に作れちゃうProgression、マジオヌヌメです(というか乗り遅れすぎ…orz)

12月05日 

Papervision3D

Papervision3DでCoverFlowみたいな

前に作ってたCoverFlowを流用して納品物に加えようと思ってたら…PV3Dのバージョンが変わっててパブリッシュが通らない…orz
目的のクラスはどこへ消えたかな?とファイルを眺めてると、そこに現れたるは「ReflectionView」。
ってこれ、そのまんまじゃんw

ということで実装。

超簡単に鏡面反射が実現できます。
import org.papervision3d.core.effects.view.ReflectionView ;

public class Main extends ReflectionView

singleRender();
終了。

CoverFlow自体のルーチンは流用できるので、これにて完成。あー良かった良かった。

で落とし穴…orz

FirefoxとChromeで鬼のちらつきが…しかも鏡面反射の部分が。変な位置にチラチラと表示されるのよね。色々と試してみました。CoverFlowが動いてない時にはレンダリング止めてみたり、いろいろいろいろいろいろいろいろいろいろいろいろいろりおr。
で、ハッケン。
surfaceHeight
で鏡面反射の位置を調整できるんだけど、これに負の値を入れてたのが原因“みたい”。これをデフォルト値で、オブジェクトの位置で最適になるように調整したら、大体OK。
大体、というのが、Firefoxでは発生しなくなったのに、Chromeでは起きてしまうこの事実。

もう思い当たる節がないんですケド…

ハズレーorz

やっぱり直ってなくて、CameraをFreeにしたのが気にいらんのか?とか別に探ってみたり、ヤケを起こしてReflectionView使うのを止めようかとよぎったり。。。
が、ハッケンしましたよ、お兄さん。
camera.useCulling = true;
でなぜ直るのかイマイチあれですが、CoverFlow的な動きがReflectionViewの癪に障ったのかもしれません(んな訳あるか!)。
まーそんなこんなでReflectionViewを使って描画対象がドッチラケな方向で分身の術を繰り広げる場合、上記の方法を試してみるのも解決の一手かも(All OKなんて口が裂けても言えないorz)。

え?IE?最初っからちらついてないの。ナニコレ?

自家製パノラマプレイヤー「BloomPano」着々と進化中。

機能追加や細かい修正を重ねておりますよ。自家製パノラマプレイヤー「BloomPano」。
誰ですか?ネーミングセンスがカスって言ったのは!

以前からのToDo。

  • ズーム機能の調整
  • フルスクリーンへのトグル機能
  • 操作パネルプラグイン作成
  • 紙資料の作成w

フルスクリーンへのトグル機能はすぐに付けられるわ、と横着w

誰ですか?ピクトのセンスがn(ry

ついでにホットスポットの位置決めを楽に出来るパネルを作ってみたり、操作パネルにはホットスポットの表示・非表示機能など付加してみました。ホットスポットの非表示なんですが、Tweenerでscaleを1→0で変化させてるのですが、0になった途端にホットスポットが持っていたマウスイベントの感知領域がステージ全面に広がってしまう意味不明の症状が…(ホットスポットが消えた途端にステージのどこにマウスを持って行ってもホットスポットのマウスイベントが発生してしまう)
で、どうやっても解決策が分からないので、ビューポートのマウス検知をオフに。
viewport.interactive = false ;
これで解決ですが、どうも釈然としない感じです。

後は詳細情報ウィンドウの機能をもうちょっとブラッシュアップしたら大体OKな気がします。

いや~AS3面白い!

で、今日ググってたらAS3で3次元レンダリングエンジン(レイトレーシングとか)を作ってる強者が居てましたよ。処理速度は厳しいけど、クオリティはめちゃ高!
夢は広がりますね~

自家製パノラマプレイヤー with PV3D「Bloom Pano」

ようやっとできました。細かい調整とか追加したい機能は山積みですが…とりあえず基本機能は…

かな~り「PanoSalado」を参考にさせて頂きました。ツールチップや情報ウィンドウ、操作パネルなどはプラグインとして後付け可能な形式に。その時々でデザインの変更が可能な訳ですな。

今回はいっぱいActionscript3の勉強になりました。文法的な事から技術的な事まで。慣れてしまうとAS2には戻れない感じ。AS3のプログラミング楽しいっす。

サンプル画像の撮影は近所の「春日神社」で。お昼時間に行ったのですが、ベンチでご飯を食べてるおっちゃんやずーっと一人でブツブツとつぶやいているお婆さん。。。怖かった。。。こっち見てるし(汗)水平が取れていないので気持ち悪いですが、通常の1枚撮りとHDR加工した物を切り替えられるようにしてあります。HDRの方はあまり違和感の無いように調整したので、ぱっと見、違いが分かりにくいかもしれません。。。

今後のToDo:
1.ズーム機能の調整
2.フルスクリーンへのトグル機能
3.操作パネルプラグイン作成
4.紙資料の作成w

さ~頑張ろう!

10月12日 

Papervision3D

QTVR OFFLINEでスピーカー

Flashパノラマ関係のセッションでゲストスピーカーとして超早口で喋ってきました。

基本、QuickTimeでの再生環境QTVRを活用されたり、Flash Panorama Playerを使用されている面々を前に、イキナリActionScript3.0知識必須な発表を繰り広げたので、「ナニアイツ宇宙語ハナシテンダヨ」的に受け止められたことでしょう(汗

オブジェクト指向だら継承だら言われてもチンプンカンプンなのは分かりつつ、そこは割り切ってflash CS3+Papervision3Dでの制作例と注意点を紹介してきました。

以下に発表時に使用したPPTファイルをアップしておきます。

資料(パワーポイント)

懇親会では普段お話をする機会の無いような方々とお話をすることが出来、博識で内容もバラエティーに富んだものでとても有意義な時間を過ごさせて頂きました。感謝。

しかしアップルストアに足を踏み入れるのは初めてだったのですが、まさか店舗との仕切りも無いフルオープンな場所で、ヘッドセットマイクを使って発表などとは露とも知らず、緊張しまくりでした。
早口で喋りまくるもんだから口もカラカラだわ、早口に気付きつつも「行ってまえ、コンチクショー」ということで点数付ければ及第点にも届かない内容でした。。。

場数かなぁ。。。

10月02日 

Papervision3D

Papervision3Dでパノラマ

ということでPapervision3Dでパノラマを表示するスクリプトを組んでみました。

PV3Dのバージョンが変わったことでの仕様変更にともなって思ってたより時間が掛かってしまったのはナイショです。
しかもこのWordpressだとswfの掲載が面倒なので割愛です。XMLで外部の画像ファイルを読み込むようにしているので余計に…ということでスクリーンショット。

マウスでぐーりぐーり動きます。

その時の覚え書き。

BasicView

これまではcameraやviewportを作ってstageに乗っけてったんだけど、そこら辺の面倒な処理を全部やっちゃってくれる便利クラス。
public class Main extends BasicView {
public function Main():void {
super(640, 480, true, true, "FREECAMERA3D") ;

こんだけ。超簡単。

ただ、ここで落とし穴。第4引数はカメラの種類で、デフォルトだと”CAMERA3D”。めっちゃ簡単カメラで、回転は不可らしい。一点集中型?ということでパノラマする時は”FREECAMERA3D”か”"FRUSTRUMCAMERA3D”で。後者は出来ることが細かすぎる様な気がするので、前者で充分だと思います。逆に立方体をグリグリしちゃうという逆転的発想で対応するならデフォルトでもイイと思いますガ。

立方体の法線

イメージとして、正立方体の中にカメラがあって、その中でカメラがグルグルと回る、という感じです。んでCubeですが、普通に作っただけでは法線が外を向いちゃってるので、内側に向けてあげる必要があります。
cube = new Cube(materials_list, SIZE, SIZE, SIZE, 4, 4, 4, Cube.ALL, Cube.NONE) ;
第8引数のinsideFacesで全面内側に向いてもらいます。

ここで謎。
materials_listの部分で、面を指定しつつ画像を貼り付けるんだけど、上面(見上げた所)の画像がどうしても180度回転されてしまう。。。というか180度回転させてあげないといけない模様。ただ先人の足跡を見ると、どうもそういった処理はしてない。。。と思ったら180度回転済みの画像を読み込んでる…しかしこれは元のパノラマ画像の規格がどうなってるか分からないので処理側で回転させるべきか、回転させた物を用意しておくのかが不明。。。とりあえず180度回転の場合は、
var tmp:BitmapData = new BitmapData(bmp.width, bmp.height, false, 0) ;
var rotationMatrix:Matrix = new Matrix(-1,0,0,-1,bmp.width,bmp.height) ;
tmp.draw(bmp, rotationMatrix) ;
bmp.dispose() ;
bmp = tmp ;

これで回転。解決?

と、まとめ上げてみればポイントなんてこんなもんだったのに、何時間かかってるんだ、ヲレ…orz

ま~AS3で作れば重たい画像もローディング付けることが出来たり、カメラぐりぐり中は画質を落としてスムーズな動きにしたり、アンカー仕込んでおいて、クリックしたら解説の小窓がビュィっと出てきたりと、いろんな発展が見えますねぇ。

自分でも撮れるようになりたいけど、レンズが…あとあのコの字型のマウントも…うーんうーん。。。もうちょっと稼いでからかな~

Papervision3DでlookAt Errorが出まくる時

GreatWhiteでBasicViewを勢い勇んで使っちゃった時のお話。ちなみにPapervisionX (18.09.08)。

レンダリング毎に

lookAt error
lookAt error
lookAt error
lookAt error
lookAt error
lookAt error
lookAt error

となってしまった不幸な時は、

camera.z=1

としましょう。

適当な和訳をすると、

「DisplayObjectとCameraが同じ位置にあるから、そのモジュール(?)が両方とも0になっちゃうんだYo!」

だそうです。