8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TouchDesignerでGLSLを書かずにGPU Instancingしてみる

Last updated at Posted at 2018-01-30

TouchDesginerでGPUを使ったParticle Systemを作れるContainer群『PixelStorm』を公開しました。
スクリーンショット 2018-01-31 0.49.31のコピー.png

今回はこのPixelStormのExampleに入れたGPU Instancingを紹介してみようと思います。
ファイルはこれ
GPU Instancingの仕組み自体は以前紹介したGPGPU Particle Systemとほぼ同様です。
Shader上での大きな差異は4点、

  • vertexIDごとの処理ではなくInstanceIDごとの処理にしていること
  • SOPを引数として持ち、それをInstancingすること
  • TOPからScaleを計算すること
  • TOPからRotationを計算すること

です。これらはTOPtoInstancePhongに全て記述されています。
これにより、

  • 大量のInstancingしたオブジェクトを
  • 1つずつ色、スケール、位置、回転の4要素で
  • 個別に操作すること

が、可能になります。
このExampleではさらに4つのContainerを使ってGPU InstancingなParticle Systemを作りました。
処理内容を左から説明していきます。

1. SOPtoTOP Containerを使い、Sphereから発生源とVelocityを作る

一般的なParticle Systemと同様にParticleの発生源と進行方向をオブジェクトから作成します。
まず、Sphere SOPからSOPtoTOPを使ってVertexの座標をTOPのRGBとして画像化し、これを初期位置として利用します。
また、Normalのベクトルも画像化し、これをVelocity、というか移動方向とオブジェクトの回転方向に利用します。
001.png

2. AgeLoopTOPでInstancing Objectに寿命をつける

Instancing Objectは一定時間で初期位置かたまた生まれるようにしたいので、AgeLoopTOPで寿命のループを作るTOPを作成します。
002.png

3. POSCalculatorでInstancing Objectの現在座標を計算する

PosCalculator Containerを使って現在座標を計算させます。
初期位置はVertex座標、そしてVelocityが1フレームごとの移動量となります。
基本的には1フレームごとにVelocityをどんどん加算していくわけですが、AgeLoopTOPの見ているピクセルが真っ白になった場合はInstancingの寿命が尽きた、ということで初期位置に戻します。
Velocityはそのまま使うとすごい勢いで移動しているため、VelocityControllerというもので適当に速度を落としています。
003.png

4. Instancing Objectが時間経過で消えるように、AgeLoopTOPからScaleを作る

これだとInstancingしたObjectの消え方もちょっと工夫したいので、AgeLoopTopをLevel TOPを使ってポジネガ反転させます。
こうすると発生したての若いObjectはRGB値が1に近く、逆に年老いたObjectは0に近い値になるTOPができあがります。
これをScaleに入力することで発生時は大きいが、だんだん小さくなり、寿命が尽きると同時に消えて無くなってしまうObjectになります。
004.png

5. GPU Instancingを行う

出来あがた3つのTOPをTOPtoInstancingPhongに入力します。今回ColorはPosCalculatorの値をそのまま利用しています。
005.png

6.動きをカスタムしたければ・・・

基本的exampleはこれで以上です。もっとランダムな動きをさせたい場合はnull_rotate TOPのあとにAddを設定したComposite TOPとNoise TOPを置いて見てください。
GPU Instancingの場合はほぼ全て画像で計算を行うため、TOP系の処理をInsertすることで値を任意の値で任意のタイミングで動きや向き、サイズやスケールを変化させることが可能です。

まとめ

いかがでしょうか。
『GPUの恩恵は受けたいけどGLSLは書きたくない!』という方はぜひさわってみてください。

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?