« Pixel Bender toolkit | メイン | 4KBプロシージャルGFX講座 »

2009年05月05日

Flash10 Ambient Occlusion (Pixel Bender)

さて前回のエントリで、Pixel BenderでAmbient Occlusionを実装した。
そもそも、これをやり始めた理由は「Flash10でGPU Ambient Occlusionをやってみたかったから」だが

Pixel Benderで実装するところで作業は80%終わったものだと思ってた。
よーし、あとはActionScript(Flex3) でこのフィルタをくわして、やればおわりじゃーん
とかおもってたら、ここから2日かかったwww

ActionScriptに食わせるまえに、Pixel Benderでバイトコードにエクスポートするんだけど、
ここでエラー発生。
えーと、なになに、「お前のコードはFlashではサポートされない機能をつかってます」(意訳)
んー、まぁそういうこともあるわなー。

えーっと、
描画領域定義の関数と、初期化的な関数がサポートされてないのねー。はいはい。
まぁこの部分はあらかじめ、チュートリアルリファレンス読んでたので知ってましたよーと。

えーと後のエラーは・・・。ガッ・・・!!

かっ 関数の呼び出しがサポートされないだとぉぉぉおおおお!
いくらもともとカスタムフィルタ用だからといって、関数呼び出しできないのに
言語とか名乗っていっていいんですかっ! 俺はそんなの認めねぇぇぇえ!
くっ しかたない関数展開決定。orz
関数呼べないってレイトレ系はつらいね。当たり判定とか。
再帰呼び出し不可はGLSLとかでも同じだけど。
まぁでもなんとか再帰関数を避ける方法はあるじゃん。
さすがに普通に関数くらいよばせて・・・。
この展開に半日作業。

えーっとあとのエラーは・・・。 ゴッ・・・!!
ふぉ、For文がサポートされないだとぉぉお なめてんのかーーー!!!
ぐっ。For文が使えないなんて聞いてねぇぞ。しかも今回移植しようとしてんのはAmbient Occlision
For文使えない・・・オワタ orz

しかし、ここまできて引き返すわけには・・・。
結局気合で展開(半日強)

はぁはぁ・・ へへっ ついにエクスポートできたぜ・・・
これでFlash10 でリアルタイムAOが・・・・
(ActionScriptに読み込ませる書き方で半日はまる)

ええい。いろいろあったが、ついに表示が・・・。
あれっ? なんか遅くね・・・?
ほんとにGPU使ってる?

とりあえず、サンプリング数をさげるか・・・。
(マウスオーバーで動かせます)
Flash10 AmbientOcclusion (2 samplings)
Flash10 AmbientOcclusion (4 samplings)
要Flash10

んー。
なんかPixel Benderのときのプレビューにくらべて明らかに遅い気がします。
64samplingsとかやると遅すぎて話になりません。(全部ActionScriptで書いたほうが早い)

これってもしかしてGPUつかってないんすかね?
しかも2samplings -> 4samplingsのときに倍以上遅くなってる気がする・・。

理由を探してたら・・・
どうやらFlash10ではまだGPU機能が有効になってない模様
まーじでーーー 俺の作業意味ねーーーー!
ないわーorz
(いちおうマルチスレッドには対応してるようだが・・・)


とりあえず
ソースを置いておきます。
まぁそのうちちゃんと使える時代がきたら試してみてねー
もしくは、そのうちFlashPlayerが対応してて、爆即で動くようになるかも?

まぁ最初は、もしかしたらこれからはFlashの時代かっ!
なんておもったけど、関数使えないとかループ使えないとか無いわー
せめて、Pixel Benderと同等の機能がFlashでつかえないと・・・

やっぱ、時代はHLSL or GLSLですねー。

投稿者 kioku : 2009年05月05日 02:12