vvvv gammaでBufferをパーティクルとして飛ばす
はじめに
Bufferからいろんな値をParticleとして飛ばせそうなのですが、いくつかアプローチが思いついたので備忘録として書き残します。
vvvv gamma 5.2
VL.Fuse Version 1.0.2
StructuredBufferResource(Fuse.Compute)からパーティクルを飛ばす
ビジュアルを作成する目的であれば、FuseのStructuredBufferResource
を使うのが良さそうです。BufferにPosition
やColor
を予め確保しなくても Fuse.Partcile.Attribute
のノードを使えば自動的にBuffer側で確保されそうでした。
EmissionStage
でパーティクルの生成、ComputeStage
で、各パーティクルの位置を動かしたりできます。また、今回は使っていませんがSumillationStage
なども存在し、ここでもパーティクルの挙動を変化させたりできるので、特に理由がなければこの方法がマネージドな感じがして良さそうです。
ComputeBuffer(stride.Buffer)からパーティクルを飛ばす
シンプルにComputeBuffer
をパーティクルとして出すにはstride側のGPU Instancingの仕組みを使う必要がありそうでした。
Float3を扱うComputeBuffer
を一度MatrixのBufferに変換して、InstancingBufferComponent
を経由すれば描画することができそうでした。
Float3からMatrixの変換はTranslate
-> MakeInstanceTranceform
で行うことができました。(このノードの存在を知らなくてFloat4*4として扱おうとしたらうまくいきませんでした)
ComputeBufferの値をComputeStageでSetしていく
StructuredBufferResource
も準備しておきComputeStage
でComputeBuffer
の値をSet
していくアプローチもありそうです。前述の2つの方式を組み合わせたような形なイメージとなっています。
この場合ComputeBuffer
からStructuredBufferResource
に対してSetをしている形になるのでEmissionStage
は不要になっています。
おまけ
AddCurlNoize
はProsessNodeとしてこんな感じに定義していました。
ちなみに、HelpBrowserのLearnタブからFuse.Particlesのサンプルを見ると「Use CurlForce」というサンプルがあるので、今はこっちで扱われているほうが使いやすいかもです。
Discussion