Touch Designer 直播挑戰 Vol.6|花海綻放實作(Replicator 進階技巧)
直播挑戰#6 課程筆記
課程概覽
本集直播為 TouchDesigner 每週挑戰系列,講者分享個人創作歷程(從網頁互動、Creative Coding 到 TouchDesigner 沉浸式視覺),並展示近期每日創作作品,最後重點實作「花海綻放」效果。核心技巧為使用 Replicator 結合 CHOP 資料驅動,實現大量花朵的個別參數控制(位置、顏色、綻放程度、旋轉等),效能優於傳統 Instancing。
課程大綱 / Agenda
- 開場與個人創作分享(大學時代網頁直播 → NYU Creative Coding → TouchDesigner)
- 近期每日創作展示(Launchpad 粒子、蒲公英、磁場粒子、雲霧室模擬、仙女棒二次粒子)
- 今日實作主題:Replicator 驅動的花海綻放效果
- 步驟教學:從單朵花模板 → 大量複製 → 資料綁定 → 後期特效
- 課程推廣與結語
核心概念與理論
- Replicator:用於大量重複產生 COMP(Base),適合需要個別參數差異的複製(優於 Instancing 的等比例限制)。
- 資料驅動參數:使用 CHOP(Noise、Pattern 等)產生一包多通道資料,再透過 Python Callback 將每個 sample 綁定到對應複製體的參數。
- 模組化思維:將常用設定(燈光、材質、後期)封裝成 Base,創作時重複利用可大幅提升效率。
- 效能考量:使用「數字」模式 Replicator(而非 Table)僅在數量變動時重建,提升即時性。
- 粒子與物理模擬延伸:本集雖聚焦花朵,但前半段展示粒子系統(Force、Noise、Feedback Loop)在視覺創作的強大應用。
示範案例
- Launchpad Army:MIDI Launchpad 驅動粒子海膽
- 蒲公英:聲音觸發粒子飄散 + Feedback Loop 控制受力
- 磁場粒子 / 雲霧室模擬:向量物理計算產生螺旋軌跡(速度 × 磁場外積)
- 仙女棒:粒子一次發射 + 死亡時二次分裂 + Leap Motion 手部追蹤控制
- 花海綻放:50~100 朵花個別控制位置、顏色、綻放、旋轉,曾用於 MonoLab 演出
步驟教學(Step-by-Step)
1. 製作單朵花模板(Base)
- 使用 Circle SOP 畫中心圓(花心)。
- 另一 Circle SOP 作為花瓣原型 → Copy SOP 複製到第一個 Circle 的點上。
- Rotate to Vector 讓花瓣朝向徑向(位置向量)。
- Merge 花瓣 + 花心 → Geometry COMP。
- 加入 Constant CHOP 控制「Bloom」(綻放程度)→ 連接至花瓣 Circle 的 Translate X(配合 Anchor 達成由內向外綻放)。
- 轉成表面(Connectivity → Surface)方便上 PBR 材質。
- 加入 Noise SOP + Normal(可選折紙感)。
- 加入 PBR Material(Base Color 用 Ramp 漸層)。
- Collapse 成 Base 名為
template_flower。
2. 準備控制資料(CHOP)
- Constant CHOP 集中所有全域控制(flower_count、scale 等)。
- Noise CHOP × 2(X、Y 位置)→ Samples 設為 flower_count。
- Noise CHOP(顏色 Seed)→ 單 sample。
- Pattern CHOP(Bloom 綻放序列)→ Length = flower_count。
- Merge 所有資料 → Null CHOP 名為
null_flowers(集中管理)。
3. 使用 Replicator 複製
- 放入 Replicator COMP。
- Master Operator →
template_flower。 - Active → 勾選 flower_count 通道。
- 在
template_flower的 Parameters → Custom 加入:- Position (float 2:X/Y)
- Bloom (float 1)
- Seed (float 1)
- 開啟 Replicator Callbacks → On Replicate 中寫 Python:
for i, c in enumerate(items):
c.par.Position1.expr = f"op('null_flowers')['posx'][{i}]"
c.par.Position2.expr = f"op('null_flowers')['posy'][{i}]"
c.par.Bloom.expr = f"op('null_flowers')['bloom'][{i}]"
c.par.Seed.expr = f"op('null_flowers')['seed'][0]"
- 按 Recreate All Operators(或綁 Keyboard In 快捷重置)。
4. 渲染與後期
- Render TOP → Geometry 填
*flower*/*(抓所有複製花朵)。 - 加入 Camera、Light、Environment Light(HDRI from Poly Haven)。
- Post-Process:
- Edge + Blur + Add → 發光邊緣
- Bloom TOP → 整體發光
- Halftone(參考 BDM 教學)→ 網點印刷風
- Chromatic Aberration → 彩虹光暈
5. 進階控制(可選)
- 用 ABS Time 或 LFO 驅動 Pattern 的 Position → 自動輪流綻放。
- 加入旋轉 Noise → 每朵花不同轉速。
- 音樂訊號 → 控制 Bloom 或整體 Scale。
常見問題 & 解決方案
- Replicator 不更新 → 按 Recreate All Operators,或檢查 Callback 是否拖入 Callback DAT。
- Python 報錯 → 確認
null_flowers路徑正確、通道名稱一致;可用 GPT 除錯。 - 效能卡頓 → 使用數字模式 Replicator;避免過多 Noise SOP;將材質簡化。
- 顏色不變化 → PBR Base Color 需設為白色才吃 Ramp;確認 Seed Noise 範圍足夠。
- 花朵重疊 → 增加位置 Noise Amplitude 或 Frequency。
練習任務
- 完成基礎花海(30 朵花,可綻放)。
- 加入音樂反應(Audio Device In → 影響 Bloom 或 Scale)。
- 改變花瓣形狀(使用自訂 SOP 如 Heart、Star)。
- 嘗試 Halftone 或其他後期濾鏡,截圖分享。
- (進階)用 Leap Motion 或滑鼠控制其中一朵花的特殊參數。
總結
本集展示了 TouchDesigner 在「大量個別化物件控制」上的強大潛力。透過 Replicator + CHOP 資料綁定 + Python Callback,能以極高自由度與效能創造複雜動態視覺。講者強調模組化與每日創作的重要性:持續累積小模組,最終能快速組合出驚人作品。適合已具基礎的學員挑戰,結合課程可大幅降低學習門檻。期待大家實作後分享成果!
