
概要 📖 – レンズ歪みを画像に適用
Stype TOPは、カメラトラッキング由来のレンズ歪みパラメータを CHOP から受け取り、入力画像に適用するレンズ歪み補正 TOPです。歪み係数を持つ CHOP を CHOP Node パラメータで指定すると、その k1 / k2 / centerx / centery / pawidth / paheight チャンネルが画像へのレンズ歪み処理に使われ、実写とバーチャルカメラの見た目を揃える用途に役立ちます。
主な用途 🎯
- カメラトラッキングシステム由来のレンズ歪み (歪曲収差) パラメータを入力画像に適用する処理
- 実写映像と CG レンダリング (
Render TOP等) のレンズ歪みを揃えて合成精度を高める前段処理 - バーチャルプロダクション / AR 合成での実写カメラとバーチャルカメラのレンズ整合 (マッチムーブ)
- レンズの歪み係数 (
k1/k2) と光学中心 (centerx/centery) を CHOP リファレンス経由でフレーム単位に駆動 - ピクセルアスペクト (
pawidth/paheight) を含むレンズメタデータを反映した画像補正
データフロー 🔄
入力: 補正対象テクスチャ (実写映像 / CG レンダリング)
↓CHOP Nodeが指す CHOP のk1/k2/centerx/centery/pawidth/paheightチャンネルを参照してレンズ歪みを適用
↓
出力: 歪みが反映 / 補正されたテクスチャ
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Stype Page 📋
CHOP Node .chop 🎛️
レンズ歪みパラメータを供給する CHOP の指定:
- CHOP Node:
CHOP Node(歪みパラメータ供給元) — レンズ歪みパラメータを出力する CHOP への参照を指定します。k1/k2(歪み係数) /centerx/centery(光学中心) /pawidth/paheight(ピクセルアスペクト) のチャンネルを持つ CHOP を指定する必要があります
Padding .padding 🖼️
ソース画像の余白 (パディング) の扱い:
- Padding:
Padding(余白指定) — ソース画像に付加されている余白 (パディング) の有無を示し、それに応じて出力をクロップします
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 倍 |
| Fit Resolution | .fit |
指定解像度に縦横比を保持して収める |
| Limit Resolution | .limit |
指定解像度を上限としてクランプ |
| Custom Resolution | .custom |
Resolution パラメータで任意指定 |
Resolution .resolution 📐
カスタム解像度の幅・高さ指定 (Output Resolution = Custom 等の時のみ有効):
- Resolution W: 出力幅 (ピクセル単位)。
Output ResolutionがCustom Resolution/Fit Resolution/Limit Resolutionの時に有効 - Resolution H: 出力高 (ピクセル単位)。同上
Resolution Menu .resmenu 📋
よく使う解像度プリセットのドロップダウン:
- Resolution Menu: NTSC / PAL / HDTV 720 / HDTV 1080 / 4K UHD 等のプリセットから選択すると
Resolution W/Resolution Hが自動セットされる
Use Global Res Multiplier .resmult 🔢
プロジェクト全体の解像度倍率の適用:
- Use Global Res Multiplier: Project Settings の Global Resolution Multiplier をこの 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 |
ミップマップ補間 (縮小ビュー時のモアレ抑制)。入力が 32-bit float の場合は最近傍のみ使用される |
Passes .npasses 🔁
オペレータの反復実行回数:
- Passes: TOP の処理を何パス繰り返すかの整数値。前回パスの結果が次回パスの入力になる
Channel Mask .chanmask 🎨
処理対象のチャンネルマスク (R/G/B/A 個別トグル):
- Channel Mask:
R/G/B/A各チャンネルのオン/オフトグル。オフのチャンネルは TOP の処理を受けず入力値がそのまま通過。デフォルトでは全チャンネルが選択される
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: 実写にレンズ歪みを適用 🎥
Video Device In TOP (実写映像) → Stype TOP (CHOP Node = 歪みパラメータ CHOP) → Composite TOP
カメラトラッキングシステムから供給されるレンズ歪みパラメータを実写映像に適用し、後段の合成で CG とレンズの見た目を揃えるための基本パイプライン。Video Device In TOP で取り込んだ実写を Stype TOP に通し、歪み係数を反映してから合成する。
Video Device In TOPでカメラの実写映像を取り込むk1/k2/centerx/centery等の歪みチャンネルを持つ CHOP を用意Stype TOPを後段に接続しCHOP Nodeにその CHOP を指定Composite TOPで CG レイヤーと重ねて整合を確認
Example 2: CG を実写レンズに合わせる 🎬
Render TOP (CG) → Stype TOP (実写カメラのレンズ歪みを適用) → Over TOP で実写と合成
バーチャルプロダクションで Render TOP が生成した歪みのない CG に、実写カメラと同じレンズ歪みを Stype TOP で付与し、実写プレートと自然になじませる用途。歪みパラメータはトラッキング由来の CHOP からフレーム単位で駆動する。
Render TOPでバーチャルカメラ視点の CG をレンダリングStype TOPを後段に接続しCHOP Nodeに実写カメラの歪みパラメータ CHOP を指定Over TOPで実写プレートの上に CG レイヤーを重ねる- 歪みが揃ってエッジが破綻しないかをビューアで確認
Example 3: 歪みを毎フレーム駆動 🎛️
歪みパラメータ CHOP → Stype TOP (CHOP Node 参照) → Null TOP
ズームやフォーカス送りでレンズ歪みが時間変化するショットに対し、歪みチャンネル (k1 / k2 等) を持つ CHOP を CHOP Node で参照することで、フレームごとに変化する歪みを画像へ反映するパイプライン。下流は Null TOP で経路を固定して取り回す。
- ショットの各フレームで変化する歪み係数を CHOP に用意
Stype TOPのCHOP Nodeにその CHOP を参照させる- 再生しながら歪みの変化が画像に追従するかを確認
Null TOPを後段に置いて下流の参照経路を安定させる
関連オペレータ 🔗
類似機能OP 🔍
- Lens Distort TOP — 汎用のレンズ歪み付与 / 補正 TOP (トラッキング由来の専用 CHOP を前提としない手動の歪み調整)
- Corner Pin TOP — 四隅指定による台形補正・遠近変形 (歪み係数モデルではなく頂点ベースの幾何補正)
組み合わせ推奨OP 🔄
- Render TOP — 実写と合成する CG の生成元として上流に配置
- Video Device In TOP — 補正対象の実写映像入力として上流に配置
- Composite TOP — 歪みを揃えた実写と CG を後段で合成
- Over TOP — アルファを用いた重ね合わせ合成 (実写プレート上に CG レイヤー)
前処理・後処理TOP 🎯
- 前処理: Video Device In TOP、Movie File In TOP、NDI In TOP、Render TOP
- 後処理: Composite TOP、Over TOP、Crop TOP、Out TOP
Info CHOP情報 📊
Stype TOPは Info CHOP による詳細情報取得に対応しており、解像度・アスペクト比・ピクセルフォーマット・クック時間などをチャンネル出力として取り出せます。
TOP固有情報 🖼️
resx: TOP の出力解像度 X (ピクセル単位)resy: TOP の出力解像度 Y (ピクセル単位)aspectx: アスペクト比 Xaspecty: アスペクト比 Ydepth: 3D テクスチャ / テクスチャ配列の深度 (2D テクスチャでは 1)gpu_memory_used: TOP が消費している GPU メモリ量 (MB 単位)
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: 歪みがまったく適用されない
✅ Solution:
CHOP Nodeが正しい CHOP を参照しているか確認 (空欄や存在しないパスでは何も起きない)- 参照先 CHOP が
k1/k2/centerx/centery/pawidth/paheightのチャンネルを実際に出力しているか確認 - 上流に補正対象の画像入力 (Video Device In TOP 等) が接続されているか確認
❌ Problem: 出力の端が切れる / 余白が出る
✅ Solution:
Paddingの設定がソース画像の余白量と合っているか確認Paddingは専用 CHOP を参照していない場合にのみ有効なため、CHOP 参照の有無を見直す- 後段で Crop TOP を使って必要な領域だけ切り出す
❌ Problem: 実写と CG の歪みが揃わない
✅ Solution:
- 実写側と CG 側で同一の歪みパラメータ CHOP を参照しているか確認
- 光学中心 (
centerx/centery) とピクセルアスペクト (pawidth/paheight) の値が実カメラのメタデータと一致しているか確認 - 解像度やアスペクト比が両系統で揃っているか (
Output Resolution/Output Aspect) を確認
参考資料 📚
その他 🔗
- TouchDesigner Wiki — Category:TOPs
- TouchDesigner Wiki — Pixel Formats 解説
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group
公式リソース 📖
- TouchDesigner公式ドキュメント – Stype TOP
- TouchDesigner公式ドキュメント – Lens Distort TOP (汎用のレンズ歪み調整)
- TouchDesigner公式ドキュメント – Render TOP (合成元の CG 生成)

