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

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

Font SOP の文字ジオメトリ生成機能を示す図

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

概要 📖 – 文字を平面ジオメトリ化

Font SOPは、指定したフォントとテキスト文字列から平面文字ジオメトリを生成する SOPです。出力は Bezier 曲線またはポリゴン形式の平面文字で、後段の Extrude SOP と組み合わせて立体タイポグラフィを構築します。

主な用途 🎯

  • フォントファイルからの平面文字ジオメトリ生成(システムフォント / TrueType / OpenType を読込み Bezier 曲線またはポリゴンに変換)
  • 立体タイポグラフィの素材作成(Extrude SOP / Sweep SOP の入力として、3D ロゴ・タイトル演出のベース形状に活用)
  • 動的テキスト表示(Text パラメータに Python 式や CHOP 参照を埋め込み、フレーム駆動でリアルタイムに文字を切替)
  • UV 付き文字メッシュの生成(Texture Coordinates を Orthographic に切替えると文字面に UV が貼られテクスチャマッピング可能)
  • 表現精度の段階切替(Bezier 曲線 / ポリゴン / 混在モードを Primitive Type で選択、Level of Detail で曲線分割数を調整)

データフロー 🔄

入力: なし(ジェネレータ系 SOP)

フォントファイル + Text 文字列を読込

字形を Bezier 曲線またはポリゴンに変換

Translate / Scale / Kerning で配置調整

出力: 平面文字ジオメトリ(SOP)

Tips

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

まる。
まる。

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


パラメータ解説 ⚙️

Page 📁

プリミティブ形式 .type 🧱

字形を表現するジオメトリ形式の選択

項目 内部名 説明
Bezier Curves and Polygons .bezierpoly 直線部分はポリゴン、曲線部分は Bezier 曲線で混在生成(メモリ効率最良)
Beziers Only .bezier すべての字形を Bezier 曲線で表現(曲線の滑らかさ重視)
Polygons Only .poly すべての字形をポリゴンで近似(Level of Detail で分割数を制御)

※ 注意: Bezier モードで Hole Faces をオンにすると、OpenGL の既知のバグにより穴(o / e / a 等の内側)が正しくシェーディングされない場合があります。安定したレンダリングが必要なら Polygons Only を選んでください。

引用元: 公式 docs

フォントと本文 🔤

Font .file 📁
Font (フォントファイル) — 表示に使うフォントファイルを指定します。
+ ボタンでファイルダイアログ、メニュードロップダウンでよく使うフォントの一覧から選択する形です。

Text .text 📝
Text (本文テキスト) — 生成する文字列を入力します。
\n で改行、\xxx で ASCII コード指定、バッククォート(`...`)で式評価という形式が使えます。
Python 式を直接書く場合は op('font1').par.text = 'hello world' のようにスクリプトから設定する手も使えます。

中央揃え 🎯

Center Text Horizontally .hcenter ↔️
Center Text Horizontally (水平中央揃え) — オンにするとテキストを X = 0 を中心に水平方向で中央揃えします。

Center Text Vertically .vcenter ↕️
Center Text Vertically (垂直中央揃え) — オンにするとテキストを Y = 0 を中心に垂直方向で中央揃えします。

位置・スケール 📐

Translate .t 🧭
Translate (平行移動) — 生成された文字ジオメトリ全体を X / Y / Z 方向に平行移動します。
内部名は tx / ty / tz の 3 要素。

Scale .s 🔍
Scale (スケール) — 文字ジオメトリを X / Y 軸方向にスケーリングします。
内部名は sx / sy。Z 方向のスケールはありません(Font SOP は平面ジオメトリのため)。

Kerning .kern ↔️
Kerning (カーニング / 字間調整) — X 方向は文字間隔、Y 方向は複数行時の行間です。
内部名は kernx / kerny。文字単位の手動調整が必要なら Model モードで個別操作する。

形状調整 ⚙️

Italic Angle .italic ↗️
Italic Angle (イタリック角度) — 指定した角度(度)で文字を傾斜させる擬似イタリック効果です。
本物のイタリック書体に置換するわけではなく、シアー変換で字形を傾けます。負値で左に傾斜。

Level of Detail .lod 🔬
Level of Detail (曲線分割数 / 詳細度) — Polygons Only モードまたは Bezier から変換される際の曲線分割数を制御します。
値を上げるほど滑らかな曲線になりますがポイント数とメモリ使用量が増加します。

Hole Faces .hole
Hole Faces (穴の生成) — 「o」「e」「a」などのアルファベット内側の閉領域を穴として生成します。
オフにすると穴部分が塗りつぶされたべた塗りの字形になります。

テクスチャ座標 .texture 🎨

文字ジオメトリへの UV 座標生成方式

項目 内部名 説明
Off .off UV 座標を生成しない(テクスチャマッピングを使わない場合)
Orthographic .ortho 正射影(平行投影)で UV を生成し、文字面に画像やパターンを貼れる状態にする

実践アイデア 💡

Example 1: 立体ロゴタイポグラフィ 🔤

Font SOP → Extrude SOP → Phong MAT → Geometry COMP → Render TOP

Font SOP でテキスト文字列から平面字形を生成し、Extrude SOP で法線方向に押し出して立体ロゴを構築する最頻出フロー。映像作品のタイトル演出や VJ 用 3D ロゴ、ライブステージのテキスト演出に直結する基本構成です。

  1. Font SOP を配置し、Font パラメータでフォントファイルを選択、Text に表示文字列を入力
  2. Center Text Horizontally / Vertically をオンにして原点を中心に揃え、後段の変形が扱いやすい状態にする
  3. Extrude SOP を後段に接続し、Depth パラメータで押し出し量を調整して立体化
  4. Phong MAT を作成し Geometry COMP の Material 設定で割り当て、Render TOP でカメラ越しにレンダリング

Example 2: フレーム駆動アニメ文字 ⏰

Font SOP (Text=expression) → Transform SOP → Geometry COMP → Render TOP

Font SOP の Text パラメータに me.time.frameop('null1')['chan1'] のような式を埋め込み、フレーム毎・CHOP 値毎に表示文字を切替えるリアルタイムテキストを構築する例。カウンターやタイマー、字幕、ライブイベントの観客名表示などで活用します。

  1. Font SOP の Text パラメータを右クリックして Expression モードに切替
  2. me.time.frame でフレーム番号表示、op('null1')['chan1'] で CHOP 値表示など、用途に応じて式を記述
  3. Transform SOP で位置調整し、Geometry COMP に格納してシーンに合成

Example 3: テクスチャ付き文字パネル 🎨

Font SOP (texture=ortho) → Phong MAT (Color Map=Movie File In TOP) → Render TOP

Texture Coordinates を Orthographic に設定すると文字ジオメトリに UV が生成され、Phong MAT の Color Map に動画やテクスチャを当てることで、文字面に映像が流れる演出を作れます。動的ロゴ・タイトル映像・タイポ動画の素材として有効です。

  1. Font SOP の Texture Coordinates パラメータを Orthographic に切替
  2. Phong MAT を作成し Color Map に Movie File In TOP やテクスチャ TOP を割り当て
  3. Geometry COMP 内に Font SOP を配置し、Material に Phong MAT を指定して Render TOP でレンダリング

関連オペレータ 🔗

類似機能OP 🔍

  • Text SOP — 別系統のテキスト SOP。スプライン制御で柔軟だが描画方式が異なる

組み合わせ推奨OP 🔄

  • Extrude SOP — Font SOP の最頻出後段。平面字形を法線方向に押し出して立体ロゴ化
  • Sweep SOP — 字形の輪郭線をパスに沿ってスイープし、パイプ状・チューブ状の文字を生成
  • Revolve SOP — 字形プロファイルを軸まわりに回転させて装飾的な回転体を生成
  • Phong MAT — Texture Coordinates と組み合わせて Color Map を文字面に貼り付け
  • Geometry COMP — Font SOP をシーンに組み込む標準コンテナ。Material 割当の窓口
  • Render TOP — Font SOP を含む Geometry COMP をカメラ越しにレンダリング

前処理・後処理SOP 🎯


Info CHOP情報 📊

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

ジオメトリ統計 📐

  • num_points: この SOP に含まれるポイント数
  • num_prims: この SOP に含まれるプリミティブ数
  • num_particles: この SOP に含まれるパーティクル数

GPU 転送タイミング 🎮

  • last_vbo_update_time: 別スレッドで SOP の CPU データを GPU 上のジオメトリデータに更新するのにかかった時間 (フレーム時間外)
  • last_meta_vbo_update_time: 別スレッドで metaball や NURBS のようなメタサーフェスジオメトリデータを GPU に更新するのにかかった時間 (フレーム時間外)

汎用オペレータ情報 🔄

  • total_cooks: プロセス開始以降にこのオペレータがクックされた合計回数
  • cook_time: 直近のクック所要時間 (ミリ秒)
  • cook_frame: このオペレータが最後にクックされたフレーム番号
  • warnings: このオペレータの警告数
  • errors: このオペレータのエラー数

クック統計 ⏱️

  • total_cooks: total_cooks — プロセス開始以降に Font SOP がクックされた合計回数
  • cook_time: cook_time — 直近のクック所要時間(ミリ秒)。Text を頻繁に変える場合の負荷指標
  • cook_frame: cook_frame — Font SOP が最後にクックされたフレーム番号

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

よくある問題と解決策 🔧

❌ Problem: フォントが見つからない・文字化けする
✅ Solution:

  • Font パラメータでフォントファイルのパスを再選択し、絶対パスで指定する
  • OS にインストールされたシステムフォント以外を使う場合は、プロジェクトフォルダに同梱して相対パス参照する
  • 日本語など多バイト文字は対応していないフォントだと表示されない。フォント側の収録字種を公式ビューアで確認する

❌ Problem: 「o」や「e」の穴が抜けない・シェーディングが破綻する
✅ Solution:

  • Hole Faces をオンにする(オフだと穴部分が塗りつぶされる)
  • Bezier モードで穴のシェーディングが崩れる場合は Primitive Type を Polygons Only に切替(OpenGL の既知のバグ回避)
  • 後段で Convert SOP を使ってメッシュタイプを Polygon に統一する

❌ Problem: テクスチャが文字面に反映されない
✅ Solution:

  • Texture Coordinates を Orthographic に切替えて UV を生成する(Off だと UV が無くテクスチャが貼れない)
  • Material 側の Color Map がフォント側ジオメトリと結ばれているか、Geometry COMP の Material パラメータを確認
  • Bezier モードで UV を貼る場合は、後段で Convert SOP で Polygon に変換してから貼ると安定する

❌ Problem: Text を毎フレーム書換えると重い
✅ Solution:

  • Level of Detail を必要最小限まで下げる(曲線分割数を減らしてポイント数を削減)
  • Primitive Type を Polygons Only から Bezier Curves and Polygons に切替(直線部分のポイント数が減る)
  • Info CHOP の cook_time を監視し、許容範囲を超える場合は表示文字数自体を抑制する

参考資料 📚

その他 🔗

公式リソース 📖

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