yoppa.org


芸大 – メディアアート・プログラミング I 2025

TouchDesigner基本 4 – ジオメトリのインスタンシング

本日の内容

今回は、前回のCopy SOPよりもはるかに効率的に大量のオブジェクトを描画する「ジオメトリインスタンシング」を学びます。これはGPUのパワーを活用し、一つの元データから無数のコピーを高速に生成する技術です。Copy SOPではパフォーマンス的に難しかった大量描画も、これを使えばリアルタイムで実現可能になります。講義では、その基本的な仕組み、Geometry COMPでの設定方法、そしてCHOPやTOPのデータを使い各インスタンスの位置や色などを個別に制御する実践的なテクニックを解説します。この強力な機能で、表現の可能性を大きく広げましょう。

ジオメトリインスタンシング

概要:

  • ジオメトリインスタンシングは、1つの「元となるジオメトリ(SOPなどで作成した形状)」をGPU上で効率的に複製し、大量に描画する機能
  • Geometry COMPの「Instance」ページで設定を行う

主なメリット:

  • パフォーマンス向上: CPUではなくGPUで処理するため、大量のオブジェクトを描画する場合でも、従来のコピー(Copy SOPなど)に比べて大幅に高速
  • メモリ効率: 元となるジオメトリデータは1つだけで済むため、メモリ使用量を抑えられる

基本的な仕組み:

  • Geometry COMPに、元となるジオメトリ(SOP)を接続します。
  • Geometry COMPのパラメータウィンドウにある「Instance」タブをオンにします。
  • 「Instance OP」に、各インスタンスの位置、回転、スケール、色などを制御するためのデータを持つオペレータ(CHOP、TOP、SOP、DATなど)を指定します。
  • 指定したオペレータのデータ(チャンネル値、ピクセル値、ポイント座標など)が、それぞれのインスタンスのパラメータに割り当てられます。

データソースとパラメータ:

  • データソース: インスタンスのパラメータを制御するために、主に以下のオペレータが利用される
  • CHOP: チャンネルデータを使います。チャンネル名(例: tx, ty, tz, cr, cg, cb, scale)と、インスタンスパラメータ(Translate X/Y/Z, Color R/G/B, Scaleなど)を対応、チャンネルのサンプル数がインスタンスの数
  • TOP: テクスチャのピクセルデータ(R, G, B, A)を使用、ピクセルごとにインスタンスが生成され、そのピクセルの色情報などをパラメータとして利用
  • SOP: ポイントの位置やアトリビュート(P(0), P(1), P(2), Cd(0)など)を使用、各ポイントがインスタンスに対応
  • DAT: テーブルデータ(主に数値を記述したTable DAT)を使用

主な制御可能パラメータ:

  • Translate (tx, ty, tz): 各インスタンスの位置
  • Rotate (rx, ry, rz): 各インスタンスの回転
  • Scale (sx, sy, sz): 各インスタンスのスケール
  • Color (colorr, colorg, colorb, colora): 各インスタンスの色と透明度
  • Pivot (pivotx, pivoty, pivotz): 各インスタンスの回転・スケールの基点
  • Texture Coordinate (Instance Texture): インスタンステクスチャリング用の座標
  • Custom Attributes: シェーダーと連携して独自のデータを渡すことも可能

ポイント:

  • データソースのサンプル数(CHOP)、ピクセル数(TOP)、ポイント数(SOP)が、生成されるインスタンスの最大数を決定
  • パラメータごとに異なるデータソース(オペレータやチャンネル/アトリビュート名)を指定できます。例えば、位置はCHOP、色はTOPから取得する、といった設定が可能
  • 大量のパーティクル表現、群衆シミュレーション、複雑な模様の生成など、多岐にわたる表現に応用可能

CHOPによるインスタンシング – 位置制御

まず始めに、CHOPを使ってインスタンスの位置を制御する方法を学びます。これにより、インスタンスの位置を動的に変更することができます。以下の例では、Pattern CHOPを使用して、インスタンスの位置を制御しています。

ダウンロード

ポイント:

  • まず始めにSphere SOPを作成し、Geometry COMPに接続
  • Pattern CHOPを使って、インスタンスの位置を制御
  • Rampのパターンをx軸に
  • Sineのパターンをy軸に
  • Geometry COMPのInstanceタブで、パターンを結合したCHOPを指定
  • インスタンスの位置を指定するためにtx, ty, tzを選択

Geometry COMPの設定:

height:480

CHOPによるインスタンシング – ランダムに大量の物体を配置

先程の例を応用して、Pattern CHOPを使って、インスタンスの位置をランダムに配置する方法を学びます。これにより、大量の物体を3次元空間にランダムに配置することができます。以下の例では、Randomのパターンをx, y, z軸に設定しています。

ダウンロード

SOPによるインスタンシング – 位置の制御

次に、SOPを使ってインスタンスの位置を制御する方法を学びます。2つのプリミティブ図形のSOPを使用します。一つ目はレンダリングするSOPです。それに加えてインスタンスの位置を指定するためのSOPを作成します。この2つめのSOPの頂点の位置にインスタンシングされたジオメトリが配置されます。

ダウンロード

ポイント:

  • SOPのデータのままではインスタンシングできない
  • SOP to CHOPを使って、SOPのデータをCHOPに変換
  • ジオメトリの頂点の位置の(x, y, z)座標がそのままインスタンシングのTranslateに使用される

SOPによるインスタンシング応用 – ノイズによる変形

インスタンシングの応用として、SOPの頂点の位置をNoise SOPで変形させる方法を学びます。これにより、インスタンスの位置を動的に変更することができます。以下の例では、さらにPhong MATを使って、マテリアルを適用しています。

ダウンロード

ポイント:

  • インスタンシングの座標を指定するSOPの頂点の位置を、Noise SOPで変形
  • SOP to CHOPを使って、SOPのデータをCHOPに変換
  • Phong MATを使って、マテリアルを適用

TOPによるインスタンスの着色

ノイズで変形したインスタンスに、TOPを使って色を付ける方法を学びます。これにより、インスタンスの色を動的に変更することができます。以下の例では、Noise TOPを使用して、インスタンスの色を制御しています。TOPの場合もそのままではインスタンシングできません。TOP to CHOPを使ってTOPのデータをCHOPに変換します。その際に作成する物体の数とTOPのピクセル数を一致させる必要があります。

ダウンロード

ポイント:

  • 形状はひとつ前の例と同じ
  • Noise TOPを使って、インスタンスの色を制御
  • TOP to CHOPを使ってTOPのデータをCHOPに変換
  • 物体の数とTOPのピクセル数を一致させる必要がある
  • この例では:
    • インスタンスの数 (= Sphere SOPの頂点数): 2048個
    • Noise TOPのサイズ: 2048×1

TOPによるインスタンスのアニメーション 1

TOPは着色だけでなくインスタンスの位置の制御にも使用できます。ポイントは、TOPのピクセルに含まれる(r, g, b)の値を、インスタンスの位置の(x, y, z)座標にみたてるという点です。その際にインスタンスの数とTOPのピクセル数を一致させる必要があります。例えば、256個のインスタンスを作成する場合、TOPは256×1のサイズにする必要があります。作成したTOPはTOP to CHOPを使ってCHOPに変換します。以下の例ではNoise TOPを使用して、インスタンスの位置を制御しています。

ダウンロード

ポイント:

  • TOPのピクセルに含まれる(r, g, b)の値を、インスタンスの位置の(x, y, z)座標にみたてる
  • この例では、Noise TOPを使用して、インスタンスの位置を制御
  • TOP to CHOPを使ってTOPのデータをCHOPに変換
  • 2048×1のサイズのTOPを作成、インスタンスの数は2048個に
  • 座標の変化をなめらかにするためTOPのフォーマットを32-bit float(rgba)に設定

TOPとCHOPによるインスタンスのアニメーション

TOPを使ってインスタンスの位置を制御する方法をさらに応用します。以下の例では、(x, y)座標はNoise TOPを使用して、インスタンスの位置を制御しています。さらに、(z)座標はPattern CHOPのRampを使用して、インスタンスの位置を制御しています。Pattern CHOPのフェーズを時間変化させることで、カメラに向かって物体が降ってくるようなダイナミックなアニメーションを作成しています。

ダウンロード

ポイント:

  • Noise TOPを使ってインスタンスの(x, y)位置を制御
  • Pattern CHOPのRampを使ってインスタンスの(z)位置を制御
  • Pattern CHOPのフェーズを時間変化させることで、カメラに向かって物体が降ってくるようなアニメーションを作成
  • Camera COMPの画角や位置を調整することでダイナミックなアニメーションに

アンケート