ActionScriptでジオメトリブレンディング+AGALで金属光沢シェーダ


Metallic Soft Cube | Si+ (wonderfl.net)


ついにwonderflが、FlashPlayer11に対応しましたね。
3Dライブラリ系のFlashPlayer11対応版へのアップデートはまだなので(というか、既存3Dライブラリって過去との互換性を保ちながらアップデート可能なんだろうか?)、本格的に盛り上がるのはもう少し先かなと思ってますが、せっかく使えるようになったことだし、早速1本投稿してみました。


ついでにモルヒル時代に(wonderfl上では動かないけど)投稿してた作品も、無事動くようになったので再コンパイルしました。技術解説的なものは、ActionScript で屈折レンダリング+Molehill雑感 - Simple Inspirationあたりに書いてますので、ご参考ください。
Clear Water with refraction rendering | Si+ (wonderfl.net)

さて、今回の投稿ですが、ジオメトリブレンディングした立体を、基本的なグローシェーディング+擬似環境マッピングレンダリングしただけの非常にシンプルなデモです。シンプルですが、デモシーンでよく使われる定番のひとつで、これをベースに応用を利かせれば実はかなり色々なことができます。立体の選び方やカメラワーク等、工夫次第で最新のデモシーンでも問題なく使っていけるような汎用性の高い手法ですので、簡単に概要を書いておきます(さすがに最新シーンでグローシェーディング+擬似環境マッピングのみって事はあまりありませんが)。

続きを読む

FlashPlayer11 の細かすぎて伝わらない変更点

やー、ついに Flash Player 11 が公開されましたね。Web3D 時代の到来です。WebGL がまごまごしてるうちに追い抜いてしまいました。こういう早さは、やはり一社提供の強みですね。WebGLも、もうGoogle一社提供にしちゃえばいいんじゃないかな。
Flash Player 11
Flash Player | Adobe Flash Player 11 | Overview
Flash Player 11 Debug Player とか
Adobe Flash Player - Downloads


さて、このFlash11ですがそうとう色々変わってるっぽいので、Web版のFlashPlayer11に絞って(AIR3の変更点は除いて)軽くまとめてみようと思います。

大きな変更点 from リリースノート

(via )

  • なんといってもStage3D!GPUアクセラレーション3D
  • 64-bitのサポート
  • 非同期ビットマップデコード
  • TLS セキュアソケットのサポート
  • SWFファイル圧縮効率の向上
  • JPEG-XRのサポート
  • JSONフォーマットのサポート
  • 乱数の高品質化(暗号で使えるレベル)
  • Gabage Collection の高品質化
  • Graphics.cubicCurveTo()
  • DisplayObjectContainer.removeChildren()
  • MovieClip.isPlaying()
  • flash.events.OutputProgressEvent(Socket Progress Event)
  • G.711 Audio Compression for Telephony ?

乱数の高品質化はどこで反映されるのか良くわかりませんが。Math.random()メソッド?
(10/5修正。flash.crypto.generateRandomBytes()という隠しメソッド(BETA版リファレンスに乗ってるのに最新リファレンスで消えてる、のに実は使える)がそれっぽい。via @9ballsyndrome)

もうちょっと細かい変更点 from AdobeMax参加組の速報

(via Adobe MAX 2011レポート:Flash Player 12(?)の新機能 - IxDGだより つむぎだすデザインと表現)

  • Sound.loadPCMFromByteArray() 16bit int と 32bit float の波形データ読込!
  • Sound.loadCompressedDataFromByteArray() ローカルMP3ファイル読込!

他にも自力で把握できたところがあったので追加

参考:Adobe ActionScript® 3 (AS3) API Reference

  • Matrix3D, Vector3D, Point, Rectangle にcopy系/setTo()メソッドの追加
  • FileReference.browse()がイベントハンドラ内でしか使えない制限の解除(10/5修正。すいません、はやとちりのようです。何らかの制限緩和はあったようです(FP11だとエラーにならないものがある)が、ブラウザ上ではダイレクトには呼び出せないっぽいです。)
  • System.pauseForGCIfCollectionImminent() でGC処理発生の閾値を変更可能(Gabage Collection の高品質化)
  • ByteArray, Dictionary, XML, Date に toJSON() メソッド追加(JSONフォーマットのサポート)
  • TextField.textInteractionMode() ?(謎)
  • flash.crypto.generateRandomBytes() (10/5 via @9ballsyndrome)
  • 環境によっては、Sound Generation の Latency が短くなる!(10/9追加)

まだまだありそうです。

FlashPlayer11++++

個人的には、Stage3D と Sound.loadCompressedDataFromByteArray()、copy系/setTo()メソッド、FileReference.browse()制限解除あたりが魅力です。
Stage3Dは言うに及ばず、webアプリの概念を根底から覆すレベル。
Sound.load...()のローカルmp3ファイル読み込みについては、SiON v0.64 でもローカルmp3読み込みに対応してたのですが、swf経由のバイナリハックだったので、やはり公式メソッドでの対応は魅力です。
Matrix3D, Vector3D, Point, Rectangleのcopy系/setTo()メソッドは、地味にかなり強力だと思っています。これまでのAPIでは、内部で新たなインスタンスを確保する(newする)のが前提だったので、最適化しずらいのが欠点でした。しかしcopy系/setTo()メソッドのおかげで、あらかじめメモリを確保して再利用することが可能になったので相当の最適化が期待できます。
FileReference.browse()の制限解除も地味に嬉しい所です。ファイルを扱う簡単なユーティリティを簡単に作れるようになります。


やー、かなりわくわくしてきましたyo!
あとはわれらが主戦場、wonderfl build flash onlineでの対応が待たれるばかりですね。

ActionScript で Nomltest


Nomltest on Flash | Si+ (wonderfl.net)
ひさびさに全力でwonderfl。
もう1ヶ月ほど前ですが、wonderfl build flash onlineのデフォルトライブラリに、拙作シューティングゲームDSLライブラリ CannonML を追加して頂きました。すでに絶賛稼働中のソフトシンセSiONと組み合わせれば、Nomltestが移植できんじゃね?という単純な発想からはや3週間。なんとか完成にこぎつけました。
Nomltestは2005年に自分が作製した記念すべき第一作目のフリーゲームで、発表当時ごく一部のマニアに大うけだった大変マゾヒスティックな弾幕シューティングです。ここら辺もしました。
今回移植にあたって苦労したのは、オリジナルの50FPSに対して今回はブラウザゲーというで30FPSに落とした点です。昨今のFlashPlayerは、普通のスペックのPCならこの程度のゲームを50FPSで動かすのは余裕なのですが、今回自分のネットブック(AtomZ520)でも動くレベルが目標だったので、かなり軽量なゲームを目指しました(AtomZ520のスペックはEasy Benchmark - wonderfl build flash onlineのコメント欄をみると何となく判ると思います)。このFPS変更のため敵パターンを1から調整し直しました。オリジナルと比べて一部の敵の動きを変えていますが、雰囲気は何とか維持出来たかなと思っています。ゲームバランスについては、オリジナルより早くレベルが上がるように設定しました。ただし、オリジナルと比べると同レベルでの難易度は低く設定されています。細かな変更はいっぱいありますが、おしなべてブラウザ版の方が早く終るようになっています。
見た目にも大きな変更が加えられていますが、これは現状のFlashPlayerでは加算合成がすごく重いためです。このため比較的処理の軽いアルファブレンドでも見栄えがしそうな形にしています。
音源はSiONを用いていますが、オリジナルはT'sSoundSystemを使っています。SiONはTSSとある程度の互換性をもっているため、移植は比較的楽でした。Nomltest (short version) by keim_at_Si | MMLTalksで曲の視聴ができます。

ActionScript でセルフシャドウレンダリング


Self Shadow on FlashPlayer10 | Si+ (wonderfl.net)

小ネタ.FlashPlayer10 の 似非3D機能で,セルフシャドウをやってみました.
セルフシャドウってのは,物体が自分自身に落とす影の事です.技術的には結構面倒くさくて,前回の屈折マップよりも手間が掛かってるんですが,アルゴリズムは10年以上前から知られており,現在のゲーム等においてはもはや常識レベルの技術なので,残念ながら小ネタレベルなのかなぁと思ってます.逆に言えば,一般的な技術ですので,実用ネタともいえるかも知れません.もっとも,FlashPlayer10 の 似非3D機能でやるには,CUP的にも手間的にも負荷が高すぎる気がしますが.


影の描き方はここら辺(google:シャドウマップ],[google:デプスシャドウ)を見てください.上で述べたようにごく一般的な技術ですので,技術的解説はいくらでも見つかります.ここでは,FlashPlayer10 の 似非3D機能に特化した技術(またゆくゆくは FlashPlayer11 の 3D描画でも必要となるであろう技術)のお話のみに絞ろうと思います.

続きを読む