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

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

Pack TOP のデータパック機能を示すサムネイル

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

概要 📖 – 高精度データを8ビット画像に詰め込む

Pack TOPは、入力テクスチャの各チャンネルを32ビット浮動小数として8ビット固定小数の画像に詰め込み、またその逆方向に展開する TOPです。パック時は各チャンネルが1つの8ビット画素に変換され、出力幅は入力幅にチャンネル数を掛けた値になります。アンパック時は詰め込まれた8ビット画素を元の浮動小数チャンネルへ復元します。

主な用途 🎯

  • 32ビット浮動小数のチャンネルを8ビット画像に詰めてメモリ転送量を削減
  • GPU から CPU へのデータ読み戻し (リードバック) を軽量フォーマットで実行
  • 高精度データテクスチャを8ビット形式で保存・伝送し、受信側でアンパックして復元
  • フィードバックや遅延処理で大量の数値データを8ビット画像として蓄積
  • パックした画像を後段のシェーダ処理に渡し、アンパックで元の精度に戻す前処理

データフロー 🔄

入力: TOP テクスチャ (各チャンネルを32ビット浮動小数として扱う)

Pack Type でパック/アンパックの方向を選択

出力: パック時は幅が チャンネル数倍 の8ビット画像 / アンパック時は復元された浮動小数テクスチャ

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Pack Page 📋

Pack Type .packtype 🎛️

Pack Type (パックの方向) — パック (詰め込み) とアンパック (展開) のどちらを実行するか、また展開時に何チャンネルとして扱うかを決定するメニューパラメータです。

項目 内部名 説明
Pack .pack 入力テクスチャの全チャンネルを32ビット浮動小数として扱い、8ビット固定小数の画像へ詰め込む。出力幅は 入力チャンネル数 × 入力幅、高さは据え置き。どのピクセルフォーマットの入力でも動作
Unpack R .unpackr 入力を Red チャンネルだけの情報とみなし、各8ビット画素を1つの32ビット浮動小数 Red 画素へ復元
Unpack RG .unpackrg 画素を RGRGRG… の並びとみなして展開し、32ビット浮動小数の R+G 画素へ復元
Unpack RGB .unpackrgb 画素を RGBRGBRGB… の並びとみなして展開し、32ビット浮動小数の RGB 画素へ復元
Unpack RGBA .unpackrgbA 画素を RGBARGBARGBA… の並びとみなして展開し、32ビット浮動小数の RGBA 画素へ復元

Common Page 🔧

Output Resolution .outputresolution 🖼️

出力解像度の決定方式

項目 内部名 説明
Use Input .useinput 入力 TOP の解像度をそのまま継承
Eighth .eighth 入力解像度の 1/8
Quarter .quarter 入力解像度の 1/4
Half .half 入力解像度の 1/2
2X .2x 入力解像度の 2 倍
4X .4x 入力解像度の 4 倍
8X .8x 入力解像度の 8 倍

Resolution .resolution 📐

カスタム解像度の幅・高さ指定 (Output Resolution = Custom の時のみ有効):

  • Resolution W: 出力幅 (ピクセル単位)。Output ResolutionCustom Resolution の時に有効
  • Resolution H: 出力高 (ピクセル単位)。同上

Resolution Menu .resmenu 📋

よく使う解像度プリセットのドロップダウン:

  • Resolution Menu: よく使う解像度のプリセットを選ぶドロップダウン。選択すると Resolution W / Resolution H に値が自動セットされる

Use Global Res Multiplier .resmult 🔢

プロジェクト全体の解像度倍率の適用:

  • Use Global Res Multiplier: Edit>Preferences>TOPs の Global Resolution Multiplier をこの TOP に適用するかどうか。VRAM の少ない環境で全 TOP 解像度を一括で半分・四分の一に下げる運用に便利

Output Aspect .outputaspect 📏

出力アスペクト比の決定方式

項目 内部名 説明
Use Input .useinput 入力 TOP のアスペクト比を継承
Custom Aspect .custom Aspect1 / Aspect2 で手動指定

Aspect .aspect 📐

カスタムアスペクト比の指定 (Output Aspect = Custom Aspect の時のみ有効):

  • Aspect1: 横方向アスペクト値 (Output Aspect = Custom Aspect の時のみ有効)
  • Aspect2: 縦方向アスペクト値 (同上)

Input Smoothness .inputfiltertype 🎚️

入力テクスチャのサンプリング方式

項目 内部名 説明
Nearest Pixel .nearest 最近傍ピクセルサンプリング (ピクセル値をそのまま使う、データ用途では必須)
Interpolate Pixels .linear バイリニア補間 (滑らか、ただしパック画像では値が混ざるため非推奨)
Mipmap Pixels .mipmap ミップマップ補間 (縮小時のモアレ抑制)

Fill Viewer .fillmode 🖥️

ビューア内でのテクスチャの収め方

項目 内部名 説明
Use Input .useinput 入力 TOP の Fill Viewer 設定を継承
Fill .fill ビューアいっぱいに引き伸ばす (アスペクト無視)
Fit Horizontal .width 横幅に合わせて収める (上下に余白)
Fit Vertical .height 縦幅に合わせて収める (左右に余白)
Fit Best .best アスペクト保持で画像が切れない最大サイズ
Fit Outside .outside アスペクト保持で外側まで覆う (はみ出しあり)

Viewer Smoothness .filtertype 🎛️

ビューア表示時のサンプリング方式

項目 内部名 説明
Nearest Pixel .nearest 最近傍ピクセルサンプリング (ピクセル単位での確認向け)
Interpolate Pixels .linear バイリニア補間 (滑らか、デフォルト)
Mipmap Pixels .mipmap ミップマップ補間 (縮小ビュー時のモアレ抑制)

Passes .npasses 🔁

オペレータの反復実行回数:

  • Passes: TOP の処理を何パス繰り返すかの整数値。前回パスの結果が次回パスの入力になる

Channel Mask .chanmask 🎨

処理対象のチャンネルマスク (R/G/B/A 個別トグル):

  • Channel Mask: R / G / B / A 各チャンネルのオン/オフトグル。オフのチャンネルは処理を受けず入力値がそのまま通過 (デフォルトは全選択)

Pixel Format .format 🎨

出力テクスチャのピクセルフォーマット (ビット深度・チャンネル構成)

項目 内部名 説明
Use Input .useinput 入力 TOP のフォーマットを継承
8-bit fixed (RGBA) .rgba8fixed 標準 8 ビット固定小数 RGBA (デフォルト、軽量)
sRGB 8-bit fixed (RGBA) .srgba8fixed sRGB ガンマ補正済 8 ビット RGBA
16-bit float (RGBA) .rgba16float 16 ビット浮動小数 RGBA (HDR・中間処理向け)
32-bit float (RGBA) .rgba32float 32 ビット浮動小数 RGBA (最高精度、メモリ大)
10-bit RGB with 2-bit Alpha .rgb10a2fixed 10-10-10-2 ビット固定小数 (バンディング抑制)
16-bit fixed (RGBA) .rgba16fixed 16 ビット固定小数 RGBA
11-bit float (RGB) .rgba11float 11-11-10 ビット浮動小数 RGB (アルファは常に 1、負値不可)
16-bit float (RGB) .rgb16float 16 ビット浮動小数 RGB (アルファなし)
32-bit float (RGB) .rgb32float 32 ビット浮動小数 RGB (アルファなし)
8-bit fixed (Mono) .mono8fixed 8 ビット固定小数モノクロ
16-bit fixed (Mono) .mono16fixed 16 ビット固定小数モノクロ
16-bit float (Mono) .mono16float 16 ビット浮動小数モノクロ
32-bit float (Mono) .mono32float 32 ビット浮動小数モノクロ
8-bit fixed (RG) .rg8fixed 8 ビット固定小数 R+G 2 チャンネル
16-bit fixed (RG) .rg16fixed 16 ビット固定小数 R+G
16-bit float (RG) .rg16float 16 ビット浮動小数 R+G
32-bit float (RG) .rg32float 32 ビット浮動小数 R+G
8-bit fixed (A) .a8fixed 8 ビット固定小数アルファ単体
16-bit fixed (A) .a16fixed 16 ビット固定小数アルファ単体
16-bit float (A) .a16float 16 ビット浮動小数アルファ単体
32-bit float (A) .a32float 32 ビット浮動小数アルファ単体
8-bit fixed (Mono+Alpha) .monoalpha8fixed 8 ビット固定小数モノクロ+アルファ
16-bit fixed (Mono+Alpha) .monoalpha16fixed 16 ビット固定小数モノクロ+アルファ
16-bit float (Mono+Alpha) .monoalpha16float 16 ビット浮動小数モノクロ+アルファ
32-bit float (Mono+Alpha) .monoalpha32float 32 ビット浮動小数モノクロ+アルファ

実践アイデア 💡

Example 1: 浮動小数の軽量読み戻し 📉

GLSL TOP (32-bit float data) → Pack TOP (Pack) → CHOP to TOP / TOP to CHOP で CPU 取得

GLSL TOP が生成した32ビット浮動小数のデータテクスチャを Pack TOP で8ビット画像に詰め込み、GPU から CPU へ読み戻す際の転送量を抑える定番フロー。受信側でアンパックすれば元の精度に戻せます。

  1. GLSL TOP で数値計算結果を32ビット浮動小数テクスチャとして出力
  2. Pack TOP の Pack TypePack に設定し、出力を8ビット RGBA 画像に変換
  3. Pixel Format8-bit fixed (RGBA) にして転送サイズを最小化
  4. CPU 側で値を取得後、必要なら別の Pack TOP の Unpack RGBA で元の浮動小数に復元

Example 2: パック画像のアンパック復元 🔄

Movie File In TOP (packed image) → Pack TOP (Unpack RGBA) → 浮動小数テクスチャ

別ソースから受け取った、または保存しておいた8ビットのパック済み画像を Pack TOP のアンパックモードに通して、元の32ビット浮動小数テクスチャへ復元する用途。データ伝送やキャッシュ運用で使うパターンです。

  1. パック済みの8ビット画像を入力として接続
  2. Pack TOP の Pack TypeUnpack RGBA (元のチャンネル数に合わせて R / RG / RGB / RGBA を選択) に設定
  3. Input SmoothnessNearest Pixel にして画素値が補間で混ざらないようにする
  4. 復元された浮動小数テクスチャを後段の処理に渡す

Example 3: 数値データの蓄積 💾

Feedback TOP → Pack TOP (Pack) → 8ビット蓄積画像 → 次フレームで再利用

シミュレーションやパーティクルの状態など大量の数値データを、フィードバックループ内で8ビットのパック画像として蓄積し、メモリ使用量を抑えながら毎フレーム更新していく応用例です。

  • 状態データを保持するテクスチャを用意
  • Pack TOP の Pack TypePack にして8ビット形式で蓄積
  • 次フレームでアンパックして読み出し、更新後に再度パックして書き戻すループを構成

関連オペレータ 🔗

類似機能OP 🔍

  • Reorder TOP — チャンネルの並べ替え・再配置を行うデータ操作系 TOP
  • Channel Mix TOP — RGBA チャンネル間で値を混合・再マッピングする TOP

組み合わせ推奨OP 🔄

  • GLSL TOP — パック対象の浮動小数データテクスチャを生成する前段として使用
  • CHOP to TOP — CHOP データをテクスチャ化して Pack に渡す前段
  • Cache TOP — パックした8ビット画像を複数フレーム保持して再利用

前処理・後処理TOP 🎯


Info CHOP情報 📊

Pack TOPは Info CHOP による詳細情報取得に対応しています。

TOP固有情報 🖼️

  • resx: TOP の出力解像度 X (ピクセル単位)
  • resy: TOP の出力解像度 Y (ピクセル単位)
  • aspectx: アスペクト比 X
  • aspecty: アスペクト比 Y
  • depth: 3D テクスチャ / テクスチャ配列の深度 (2D テクスチャでは 1)
  • gpu_memory_used: TOP が消費している GPU メモリ量 (MB 単位)

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始からのクック回数
  • cook_time: 最後のクック時間 (ミリ秒)
  • cook_frame: 最後にクックされたフレーム番号
  • warnings: 警告数
  • errors: エラー数

TOP 共通の情報チャンネル 📡

  • resolution_w: 出力テクスチャの横ピクセル数 (パック時は 入力幅 × チャンネル数)
  • resolution_h: 出力テクスチャの縦ピクセル数
  • aspect_x: 出力テクスチャの横アスペクト値
  • aspect_y: 出力テクスチャの縦アスペクト値
  • depth: テクスチャの色深度 (ピクセルフォーマットに依存)

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

よくある問題と解決策 🔧

❌ Problem: アンパックしても元の値に戻らない
✅ Solution:

  • Pack Type のアンパック種別 (R / RG / RGB / RGBA) が、パック時のチャンネル数と一致しているか確認
  • Input SmoothnessNearest Pixel に設定し、画素値が補間で混ざらないようにする
  • 途中に Level TOP 等のガンマ・色補正が挟まっていないか確認 (パック画像は補正してはいけない)

❌ Problem: 出力画像が想定より横に広い
✅ Solution:

  • パック時の出力幅は 入力幅 × チャンネル数 になる仕様であることを確認 (これは正常動作)
  • 後段で扱いやすくしたい場合は Pixel Format や入力チャンネル数を見直す
  • 表示確認だけなら Fill ViewerFit Best にして全体を確認

❌ Problem: 色が崩れた帯状の画像になる
✅ Solution:

  • パック済み画像はそのまま見ると意味のあるビット列のため、崩れた見た目になるのは正常
  • 中身を確認したい場合はアンパックして浮動小数に戻してから表示
  • 誤って sRGB 8-bit fixed (RGBA) 等のガンマ補正フォーマットを使っていないか確認 (データ用途では 8-bit fixed (RGBA) を使用)

参考資料 📚

その他 🔗

公式リソース 📖

この記事は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をコピーしました