Point Sprite MAT 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

※当サイトにはプロモーションリンクが含まれます。

Point Sprite MAT がポイント群を Color Map 付きビルボードスプライトとして描画する図

記事更新の通知はXでアナウンス٩(๑❛ᴗ❛๑)
@maru6o6をフォロー

概要 📖 – 点群を画像で描画する

Point Sprite MATは、ポイント群の各点をカメラ向きのテクスチャ付きビルボード矩形 (スプライト) として描画する MATです。ポイントクラウドや GPU パーティクル等の点ジオメトリに対し、Color Map で指定したテクスチャをカメラ正面向きの矩形 (ビルボード) として高速描画します。Sizing Model でピクセル単位の固定サイズかワールド単位の遠近補正サイズかを切替え、Attenuate Near/Far Distance によるカメラ距離減衰、pscale 点属性によるポイント別サイズ制御、Color Map の Offset によるアトラス UV クロップに対応します。Deform Page でボーンスキニングにも対応し、Common Page で標準的なブレンディング・深度テスト・アルファテスト等を持つ完全な描画 MAT です。

主な用途 🎯

  • GPU パーティクル / ポイントクラウドのビルボード描画として、各ポイントに Color Map を貼り付けたスプライトを高速にレンダリング
  • 炎・煙・火花・水しぶきのテクスチャ付き粒子を、Particle SOP / Particles GPU の出力ポイントに対してスプライト合成 (Add 系ブレンディング併用)
  • 距離減衰付きの星空 / 銀河 / 雪 / 降雨表現として、Sizing Model = Constant/Attenuate + Attenuate Near/Far でカメラ距離による点サイズ変化を実装
  • ワールド単位スケールの実体感あるスプライトとして、Sizing Model = Perspective Correct + pscale 属性を使い、地表に散らばる岩・草・群衆ビルボード等を遠近正しく描画
  • Color Map の UV クロップによるスプライトシートとして、Offset Left/Right/Bottom/Top でアトラステクスチャの一部だけを切り出してフレームアニメ表現
  • Texture 3D / 2D Texture Array によるバリエーション付与として、ポイントごとに w テクスチャ座標で配列内の異なるマップを選択 (キャラ顔差分・粒子バリエーション)

データフロー 🔄

入力: ポイント群 (SOP / GPU パーティクル) + Color Map (TOP)

Geometry COMP が Point Sprite MAT を Material に指定

各ポイントがカメラ向きビルボード矩形に展開され、pscale × Sizing Model に従って点サイズ決定

Color Map と Color × Alpha を乗算してフレームバッファへブレンド

出力: Render TOP 経由のスプライト画像

Tips

初心者の方は、以下日本語書籍も手元にあると安心です。

まる。
まる。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!


パラメータ解説 ⚙️

Point Sprite Page 🎯

Color & Alpha .color 🎨

スプライトの基本色と不透明度

項目 内部名 説明
Red .colorr 赤成分 (0.0 – 1.0)
Green .colorg 緑成分 (0.0 – 1.0)
Blue .colorb 青成分 (0.0 – 1.0)
Alpha .alpha マテリアルの不透明度。ポイントの Cd[3] (point alpha 属性) と乗算される
Post-Mult Color by Alpha .postmultalpha カラーをアルファで事後乗算するトグル (プリマルチプライドアルファ運用時に使用)

Color Map & Texture Sampling .colormap 🖼️

スプライトに貼り付けるテクスチャと、UV テクスチャ座標のサンプリング設定

項目 内部名 説明
Hold .hold 端のピクセルを引き伸ばし (clamp)
Zero .zero 範囲外は透明 / 黒 (border)
Repeat .repeat テクスチャを繰り返しタイリング
Mirror .mirror 境界で反転しながら繰り返し
Color Map .colormap スプライトに貼るテクスチャ TOP (Color と乗算される)。Texture 3D / 2D Texture Array を渡すと w 座標で配列内のマップを選択可能

Sprite Crop Offsets .offsets ✂️

Color Map の四辺 UV をクロップしてアトラス内の特定領域だけを描画:

  • Offset Left: offsetleft スプライトの左端 UV クロップ量 (0.0 – 1.0)
  • Offset Right: offsetright スプライトの右端 UV クロップ量
  • Offset Bottom: offsetbottom スプライトの下端 UV クロップ量
  • Offset Top: offsettop スプライトの上端 UV クロップ量

Point Size & Attenuation .pointsize 📏

スプライトのサイズ決定方式と距離減衰の設定群

項目 内部名 説明
Constant/Attenuate .constantattenuate Constant Point Size をピクセル単位として扱い、すべての点に一律適用 (距離減衰パラメータで遠近変化可)。Attenuate Point Scale = 0 のとき最終サイズは pscale × pointsize
Perspective Correct .perspectivecorrect Constant Point Size をワールド単位として扱い、他のジオメトリと同様に遠近補正される (値 3 なら 3 ワールド単位幅のスプライト)
Constant Point Size .pointsize スプライトの基本サイズ。単位は Sizing Model で決まる (ピクセル or ワールド単位)
Attenuate Point Scale .attenpscale 固定サイズと距離減衰サイズのブレンド係数 (0 = 固定 100%、1 = 距離減衰 100%)。Near / Far Distance と Near / Far Point Scale で減衰カーブが定義される
Attenuate Near Distance .attennear カメラからこの距離以下のポイントには Near Point Scale が適用される境界距離
Attenuate Far Distance .attenfar カメラからこの距離以上のポイントには Far Point Scale が適用される境界距離
Near Point Scale .attensizenear Near Distance 以内のポイントに適用される距離減衰スケール
Far Point Scale .attensizefar Far Distance 以遠のポイントに適用される距離減衰スケール
Size Affected by FOV/OrthoWidth .sizeaffectedbyfov FOV / ortho width に応じてスプライトのピクセル幅を変化させるトグル (Sizing Model = Perspective Correct 時のみ有効)。カメラズームアニメ等で必要

Deform Page 🦴

Deform .dodeform 🦴

ボーンによるジオメトリ変形をこのマテリアル上で有効化:

  • Deform トグル: dodeform このマテリアル上でスケルトン変形 (スキニング) を有効化

Get Bone Data .deformdata 📍

デフォームボーンデータの取得元

項目 内部名 説明
From SOP .fromsop SOP の capture 属性 (pCaptPath / pCaptData) から直接取得
From MAT .frommat 別の MAT (ボーンキャプチャ元 MAT 等) からデフォームデータを継承

Bone Capture 設定 .bonecapture 🦴

Capture 属性とスケルトンルートの指定:

  • SOP with Capture Data: targetsop pCaptPath / pCaptData 属性を持つ SOP のパスを指定
  • pCaptPath Attrib: pcaptpath 使用する pCaptPath 属性名 (Bone Group SOP 通過後は pCaptPath0 / pCaptPath1 等に分割される)
  • pCaptData Attrib: pcaptdata 使用する pCaptData 属性名 (pCaptPath と対になる)
  • Skeleton Root Path: skelrootpath スケルトンのルート COMP のパス
  • MAT: mat Get Bone DataFrom MAT 時に参照する他 MAT または ボーンキャプチャ元 MAT のパス

Common Page 🔧

Blending .blending 🎨

色のブレンディング (透過合成) に関する設定群

項目 内部名 説明
Add .add ソースとデスティネーションを加算
Subtract .subtract ソースからデスティネーションを減算
Reverse Subtract .revsubtract デスティネーションからソースを減算
Minimum .minimum 両者の最小値を採用
Maximum .maximum 両者の最大値を採用
Blending (Transparency) .blending 透過効果のためのカラーブレンディングを有効化するトグル
Separate Alpha Function .separatealphafunc アルファチャンネルのブレンド設定を RGB と独立させる
Blend Constant Color .blendconstant constantcol 系オプション選択時に使用する RGB 定数カラー
Blend Constant Alpha .blendconstanta constanta 系オプション選択時に使用する定数アルファ値
Legacy Alpha Behavior .legacyalphabehavior 旧バージョンのアルファ処理との後方互換を有効化
Post-Mult Color by Alpha .postmultalpha ブレンド演算完了後に RGB を計算後アルファで乗算

Depth Test .depthtest 📏

デプステスト (Z 比較) によるオクルージョン制御

項目 内部名 説明
Less Than .less 新ピクセルのデプスが既存より小さい (手前) なら描画
Less Than or Equal .lessorequal 新ピクセルが既存以下なら描画
Equal .equal デプスが完全一致時のみ描画
Greater Than .greater 新ピクセルが既存より大きい (奥) なら描画
Greater Than or Equal .greaterorequal 新ピクセルが既存以上なら描画
Not Equal .notequal デプスが一致しない場合のみ描画
Always .always デプス比較を行わず常に描画
Depth Test .depthtest デプスバッファとの比較によるオクルージョンを有効化
Write Depth Values .depthwriting デプステストを通過したピクセルのデプス値をデプスバッファに書き込む

Alpha Test .alphatest 🔍

アルファ値に基づくピクセル単位の破棄判定

項目 内部名 説明
Less Than .less アルファが閾値より小さいピクセルを残す
Less Than or Equal .lessorequal アルファが閾値以下のピクセルを残す
Greater Than .greater アルファが閾値より大きいピクセルを残す
Greater Than or Equal .greaterorequal アルファが閾値以上のピクセルを残す
Discard Pixels Based on Alpha .alphatest ピクセル単位でアルファによる破棄判定を有効化
Alpha Threshold .alphathreshold アルファ比較の閾値。条件外のピクセルは破棄される

Wire Frame .wireframe 🕸️

ジオメトリをワイヤーフレーム表示する設定

項目 内部名 説明
Off .off 通常のソリッド描画 (ワイヤーフレーム無効)
OpenGL Tesselated Wire Frame .tesselated OpenGL が三角形分割した状態でワイヤーを描画
Topology Wire Frame .topology 元のポリゴントポロジ (四角形等) のままワイヤーを描画
Line Width .wirewidth ワイヤーフレームの線の太さ (ピクセル単位)

Cull Face .cullface 🔺

ポリゴンの表裏どちらを描画するか (カリング) の選択

項目 内部名 説明
Use Render Setting .userender Render TOP 側の設定に従う
Neither .neither 両面とも描画 (カリングなし)
Back Faces .backfaces 裏面をカリング、表面のみ描画
Front Faces .frontfaces 表面をカリング、裏面のみ描画
Both Faces .bothfaces 両面をカリング (= 何も描画されない)

Polygon Depth Offset .polygonoffset ↔️

Z-fighting 対策としてポリゴンのデプス値をオフセット

項目 内部名 説明
Polygon Depth Offset .polygonoffset ポリゴンのデプス値オフセット機能を有効化
Offset Factor .polygonoffsetfactor デプス勾配に対するオフセットの乗数
Offset Units .polygonoffsetunits デプス単位の固定オフセット量

Color Space .parmcolorspace 🌈

カラーパラメータの色空間 / 基準白色の解釈

項目 内部名 説明
sRGB .srgb SDR sRGB トランスファ関数 (一般的なディスプレイ標準)
sRGB – Linear .srglinear SDR リニアトランスファ
Rec.601 (NTSC) .rec601ntsc SDR NTSC 規格 (旧テレビ放送)
Rec.709 .rec709 SDR ビデオ規格 (HD テレビ)
Rec.2020 .rec2020 HDR 放送規格 (4K/8K UHD)
DCI-P3 .dcip3 HDR シネマ規格 (D65 ホワイトポイント)
DCI-P3 (D60) .dcip3d60 HDR シネマ規格 (D60 ホワイトポイント)
Display-P3 (D65) .displayp3d65 HDR sRGB ガンマ (Apple ディスプレイ等)
ACES2065-1 .aces2065-1 HDR リニアシネマ規格 (アーカイブ用)
ACEScg .acescg HDR リニアシネマ作業用色空間
Passthrough .passthrough 色空間変換を行わずそのまま渡す

実践アイデア 💡

Example 1: GPU パーティクルにスプライトテクスチャを貼って炎・煙を描画 🔥

Particles GPU → Render Pick TOP / pos texture → Geometry COMP (Material = Point Sprite MAT, Color Map = fire_atlas.tif) → Render TOP

GPU パーティクルから出力されたポイント群に対し、Point Sprite MAT で炎テクスチャを各ポイントに貼り付け、Add ブレンディングで合成することで高速な炎・煙エフェクトを描画します。各パーティクルは pscale 属性で個別サイズを持ち、Sizing Model = Constant/Attenuate で距離減衰させると遠近感が出ます。

  1. Particles GPU または Particle SOP でポイント群を生成 (pscale / age 属性を含める)
  2. Movie File In TOP で炎・煙のテクスチャ (黒背景 + 白〜橙の炎) を読み込み Color Map に指定
  3. Point Sprite MAT を作成し、Color Map に上記 TOP を割当、Color を橙赤、Alpha を 1.0 に設定
  4. Common PageBlending をオン、Source Color = Source Alpha / Destination Color = One (加算合成) を設定し、Write Depth Values をオフにして粒子の重なりが消えないようにする
  5. Geometry COMPMaterial に Point Sprite MAT のパスを指定して Render TOP で確認

Example 2: 点群を距離減衰付きで可視化 ✨

Kinect TOP / Depth → Point File In SOP / TOP to SOP → Geometry COMP (Material = Point Sprite MAT) → Render TOP

深度センサーやポイントクラウドファイルから取得した数十万点のポイント群を、距離減衰付きで可視化します。Sizing Model = Constant/Attenuate + Attenuate Near/Far Distance を設定することで近くの点は大きく、遠くの点は小さく描画され、立体感のある点群プレビューになります。

  1. Kinect / LiDAR データから Point File In SOP または TOP to SOP でポイント群を生成
  2. Point Sprite MAT を作成し、Color Map に白い円形テクスチャ (alpha 付き) を指定
  3. Sizing ModelConstant/Attenuate に、Constant Point Size4 (ピクセル) に設定
  4. Attenuate Point Scale1.0Attenuate Near Distance = 1 / Far Distance = 50Near Point Scale = 2.0 / Far Point Scale = 0.3 でカメラ距離減衰を構成
  5. Geometry COMP に割り当て、Camera COMP の位置を動かして遠近の点サイズ変化を確認

Example 3: Texture Arrayで粒子バリエーション 🎴

Texture 3D TOP (アトラス配列) → Point Sprite MAT (Color Map) → 各点が w 座標で異なるテクスチャを取得

葉っぱ・破片・雪などの「複数バリエーションを混ぜたい」表現で、Texture 3D TOP に複数枚のテクスチャを束ねた配列を作り、Point Sprite MAT の Color Map に渡します。各ポイントが UV の w 座標 (テクスチャ座標 3 軸目) で配列内のどのテクスチャを使うかを選択でき、SOP 側で uv[2] 属性に乱数を入れれば 1 つの MAT で多様な見た目を実現できます。

  1. Texture 3D TOP に複数枚のテクスチャを順に Cook して 1 つの配列にまとめる (例: 葉っぱ 5 種)
  2. 対象 SOP に Attribute Create SOPuv 属性を作成し、uv[2] = rand($PT) * 4.99 (5 種類のうち 1 つを乱数選択)
  3. Point Sprite MATColor Map に Texture 3D TOP を指定、Extend W = Hold にして配列外参照を防ぐ
  4. Filter = Linear + Anisotropic Filter = 4x でサンプリング品質を確保
  5. Geometry COMP に MAT を割当て、Render TOP で各点が異なるテクスチャになっていることを確認

関連オペレータ 🔗

類似機能OP 🔍

  • Constant MAT — ライティングを無視した単色 / テクスチャ描画 MAT。Point Sprite と同じく Lit されない描画だが、ポイント群に対するビルボードスプライト機能を持たない
  • PBR MAT — 物理ベースシェーディング MAT。サーフェスジオメトリ向けで、Point Sprite のようなビルボード化やポイント単位サイズ制御は持たない

組み合わせ推奨OP 🔄

  • Particle SOP — CPU パーティクル SOP。Point Sprite MAT の対象として最も基本的な入力ソース
  • Texture 3D TOP — Color Map に渡すアトラス配列を生成。w 座標でポイントごとに異なるテクスチャを選択するために必須
  • Geometry COMP — Material パラメータに Point Sprite MAT のパスを指定する代表的な描画コンポーネント
  • Render TOP — Point Sprite MAT で描画したジオメトリを最終的に画像化する 3D レンダリング TOP

前処理・後処理MAT 🎯


Info情報 📊

MAT は Info CHOP / Info DAT に接続することで、シェーダコンパイル状況やクック情報を取得できます。

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からの累計クック回数
  • cook_time: 直近クックに要した時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 現在の警告数 (シェーダコンパイル警告含む)
  • errors: 現在のエラー数 (シェーダコンパイルエラー含む)

トラブルシューティング ⚠️

よくある問題と解決策 🔧

❌ Problem: スプライトが表示されない / 真っ黒な点しか出ない
✅ Solution:

  • Color Map に有効な TOP が割り当てられているか確認。未割当だと Color × Alpha のみで描画され、Color が 0,0,0 なら真っ黒になる
  • Geometry COMP の Material パラメータが Point Sprite MAT を正しく参照しているか、ノードビューで接続を目視確認
  • ポイントの pscale 属性が 0 になっていないか SOP 側で確認 (Point Sprite は pscale × Constant Point Size で最終サイズが決まるため pscale=0 は無描画)

❌ Problem: スプライトのサイズが想定より小さい / 大きすぎる
✅ Solution:

  • Sizing Model がピクセル単位 (Constant/Attenuate) かワールド単位 (Perspective Correct) かを確認。ワールド単位のつもりでピクセル値を入れていると桁が合わない
  • Attenuate Point Scale0 なら距離減衰は効かず固定サイズ、1 なら完全に距離依存。中間値で固定と減衰がブレンドされる
  • pscale 点属性が想定の値かを Info CHOP または Attribute Create SOP で確認 (最終サイズは pscale × pointsize)

❌ Problem: Add ブレンディング (加算合成) で粒子が白飛びしないように調整したい
✅ Solution:

  • Common Page の Source Color = Source Alpha / Destination Color = One で標準的な加算スプライト合成になる
  • Alpha パラメータを下げる、または Color Map の輝度を抑えて 1 枚あたりの寄与を減らす
  • Level TOPHSV Adjust TOP を Color Map の前段に挟んで brightness を事前抑制する

❌ Problem: スプライトに深度の前後関係が乱れる / 後ろの粒子が手前を遮る
✅ Solution:

  • Common Page の Write Depth Values をオフにする (粒子は深度バッファに書込まないのが定石。これで透過粒子の重なりが正しくなる)
  • Depth Test 自体はオンのまま (Depth Buffer を読むだけ、書込まない)。完全に深度無視したいなら Depth Test もオフ
  • 粒子同士のソート問題が残る場合は、上流の SOP / GPU パーティクル側でカメラ距離による Z ソートを行う

❌ Problem: Texture Array の w 座標で配列内のテクスチャを切替えたいが、全部 0 番が出る
✅ Solution:

  • 対象 SOP の uv 属性が 3 成分 (vector3) になっているか確認。デフォルトの uv は 2 成分 (vec2) なので w が常に 0 になる
  • Attribute Create SOPuvvector3 として再作成し、uv[2] = rand($PT) * (N - 0.01) (N=配列サイズ) で各点に異なる値を割当
  • Extend WHold に設定して配列外参照を防ぐ (Repeat だと境界でカラーマップが折返す)

参考資料 📚

その他 🔗

公式リソース 📖

この記事はLLMと共に内容を執筆、更新しています。
最新バージョンとの項目差異など、情報の不一致を見つけた心優しい方はXもしくはInsta、メールなどよりサイト管理者までご連絡ください😎


まる。

お仕事のご依頼はDM又はメールにて。
━━━━━━━━━━━━━━━━━
Python/Touchdesigner/M5Stackをこよなく愛すフルスタックエンジニア。
専門は生理心理学、趣味はヨガやサウナ、EMS電気風呂などヘルスケア全般。
脳波や筋電、心拍を中心とした生体情報のセンシング&インタラクティブアートづくりがライフワーク。

普段はワントゥーテンという会社で空間演出エンジニアをしています。
リファラル採用お繋ぎできますので、我こそはという尖った方は経歴と希望職種添えてDMください(エンジニア以外、営業職等もOK)。
ご飯行きましょう。

↓日常垢
Instagram:@malmal0v0

まる。をフォローする
その他の記事はこちら
Math Combine POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED Select TOP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
ZED POP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Window COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】
Widget COMP 完全ガイド | 使い方・パラメータ解説【TouchDesigner】

タイトルとURLをコピーしました