ActionScript で 地形生成 を 4k Byte で


4k fly-through | Si+ (wonderfl.net)


本題の前にちょっと後日談。
前回、擬似屈折率について書きますと書いたのですが、あれから色々検証してみて、投稿したコードに大きな間違えが見つかりまいまして。で、修正して無事まともな Cubemap 擬似屈折ができたんですが、正直、投稿したものよりもリアリティが出ない。何でかなと色々考えてく内に、"擬似"の部分が原因であるという結論にいたりました。
ここまでは良いんですが、問題は間違ってたコードがわりと屈折っぽかったという点。明らかに間違ってるんですが、できればこっちに何とか物理的な意味合いを見出して、新しい擬似屈折アルゴリズムにしたいなー、とかグルグル考えているうちに記事が書けなくなりました。
ここら辺、オチが見えてきたら、また別の投稿で書きたいと思います。


さて、今回はちょっと変化球ということでStage3Dで4kプログラムにチャレンジしてみました。普通4kといえばコンパイル後のバイナリファイルのサイズを指すのですが、最近ではバイナリファイルを介さないLL言語が流行っているため、スクリプト文字数の制限を指す事も多いようです。wonderflではバイナリファイルは実質隠蔽されスクリプトが読めますし、何よりバイナリ最適化はめんどくさいので、今回は4096文字しばりでやってみました。
圧縮表記のテクニックはいっぱいあるのですが、そこを解説しても誰得なので、ここでは地形(テクスチャ)生成、参照、描画に絞って概説を書きたいと思います。
残念ながら、一つ解説するだけで1記事になるような様々な技術を組み合わせて使ってるので、それぞれをあまり深くは書けません。興味のある技術はキーワードを拾っていろいろ自分なりに調べていただければ、と思っています。

続きを読む

ActionScript で立体のブーリアン演算+AGALで擬似屈折+反射シェーダ(1)


Boolean Crystal | Si+ (wonderfl.net)

FlashPlayer11 ではステンシルバッファが使えるようになったので、お約束の立体ブーリアン演算をやってみました。ただ、コレだけだと寂しいので、incubator時代に実装したAGAL擬似屈折+反射シェーダーの改良版と組み合わせてみました。あんまり本筋と関係ないところでなかなか苦労はしたのですが、全体を通してわりと素直に実装できました。FlashPlayer11の仮想GPU、良いね!
今回はFlashPlayer11で扱えるようになった3D基本技術のごった煮みたいな感じです。擬似屈折+反射シェーダには Cube Texture を使って、ブーリアン演算にはステンシルバッファを使っています。ブレンドファンクションはまだポイントスプライト用加算演算くらいにしか使ってないですが、これで一応一通り触ってみた感じにはなるのかな。


ここではまず,立体のブーリアン演算方法について解説したいと思います。一見3次元計算をしているようですが、実は2次元の画像処理で描画しています。近年のリアルタイム3DCGでは(といってもかなり昔からですが)、こういった2次元画像処理による擬似3次元計算技術が、実際の3次元計算以上に重要になって来ています。ちょっと頑張って解説を書いてみたので、3DCGにおける2次元画像処理について少しでも理解が深まれば幸いです。
なお、擬似屈折についてはまた次回詳しく解説したいと思っています。

続きを読む

ActionScript でスピログラフ


Spirographical Ingot Cast | Si+ (wonderfl.net)


前回、PointSpriteのデモを作成した際、何か面白いパーティクルの動きは出来ないかなーと試行錯誤していました。その中でスピログラフを3次元に展開できたら面白そうだなと思って、いろいろ数式をいじってたら想像以上に面白いものができそうだったので、1つのコンテンツにしてみました。
見せ方次第でまだまだ面白くなりそうでしたが(例えば Point Sprite Particle みたいにスピログラフ上のモーションをBPMに合わせたり)、今回は色々数式をいじって形状を確認できるような方向で丁寧に作ってみました。
3D関連の技術的にはMetallic soft cube - wonderfl build flash onlinePoint Sprite Particle - wonderfl build flash onlineの組み合わせなので新しい事はあまり無いのですが、今回の3次元スピログラフは結構汎用性が高そうなので、そこら辺を中心に書いてみたいと思います。

続きを読む

ActionScriptでPoint Sprite


Point Sprite Particle | Si+ (wonderfl.net)

わりとマジメに Stage3D で Point Sprite を実装してみました。
Point Sprite というは、平たく言えば、どんなに回転しても常に自分の方向を向いている四角形を作成してテクスチャを張ったものです。大昔はビルボードとも呼ばれ、そこそこ面倒くさい技術でしたが、最近はGPUにPoint Spriteを書いてと命令するだけで勝手に処理してくれるようになりました。
しかし残念ながら、劣化 OpenGL こと FlashPlayer11 の Stage3D では、この PointSprite 命令は今のところ実装されていません(drawLines と drawPoints 位はあっても良いと思うんですが。将来的には実装される気もします)。そこで今回はこの Point Sprite を作ってみました。Point Sprite は非常に汎用性の高い技術なので、今回はいつものようにやっつけではなく、あとあと使いやすいように慎重に簡潔に実装しました(使用例として3Dパーティクルシステムも実装してみましたが、こっちはやっつけです)。

続きを読む