Processing math: 100%

2012/02/14

Processingできらきら3次元パーティクル

今日はこういうものを作ります。たぶんきれいですね。


このスケッチは、いくつかのテクニックを組み合わせて作ります。

恐らく、Processing ユーザにとっては馴染みの薄いものもあるかと思いますので、今日はそれらをひとつひとつ紹介しつつ完成形に持っていこうと考えています。



【ビルボードをつくる】

ビルボードとは、3次元空間中のカメラに対して常に正面を向くような2次元オブジェクトの事です。一昔前のゲームなどではよく応用されていた技術です(今もかな)。これ自体が独立したひとつのトピックなので、まずはここから始めてみましょう。

以下のサンプルは、テキスト(Hello, World)をビルボード上に表示するというものです。


【理論の解説】

ビルボードは、以下のような同次形のモデル・ビュー変換行列
ΣViewMΣModeli=(m00m01m02m03m10m11m12m13m20m21m22m23m30m31m32m33)――のうち、左上の3×3の小行列を単位行列にした結果
(100m03010m13001m23m30m31m32m33)を、新たなモデル・ビュー行列として設定します。たったこれだけ。かんたんですね。

【ソースコード(展開してご覧ください)



【自然なランダムウォークをつくる】

自然なランダムウォークというと少しおかしな日本語ですが、あちこちに動きが飛ばず、なめらかな軌跡を描くような動きを作ります。

タネを明かせば Perlin ノイズを何のひねりもなく使っただけで、当たり判定とかは考慮していません。


【ソースコード(展開してご覧ください)

ここでは、動く個体を Agent クラスにまとめています。



【合体させる】

あとは、この2つのテクニックをてきとうに合体させるだけです。

下図(左)のように、とりあえずランダムに動き回るビルボードを山のように作って、 それにテクスチャを貼れば完成。意外と簡単ですね。

左: ビルボードの輪郭 / 右:テクスチャを貼った結果
ここで、glBlendFunc メソッドを使って加算合成モードにすると、ビルボード同士が重なった際に輝度が上がります。完成形のソースコードを以下に示します。

【ソースコード(展開してご覧ください)

1 件のコメント:

  1. 名前は聞いたことがったのですが、
    パーティクルってこんな感じで実装できるのかと
    初めて知りました!
    さっそく使って見ようと思います。

    返信削除

ひとことどうぞφ(・ω・,,)