TouchDesigner 隨機數值技巧|用 tdu.rand() 生成高效輕量隨機值

學會在 TouchDesigner 中用 tdu.rand() 生成隨機數值!用 absTime.frame 持續更新隨機種子,或用物件路徑生成可重現隨機值,簡單快速又省資源,適合大量隨機參數控制需求。

Jun 29, 2025
🧰 TouchDesigner 工具庫 | Luxmin Institute on Patreon
我們把接案與展場現場累積下來的 TouchDesigner 元件、專案檔與製作系統,整理發佈在 Patreon,部分工具與 Demo 免費開放下載。
https://www.patreon.com/cw/LuxminInstitute
⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑
在 TouchDesigner 裡,要生成隨機數值有很多種方式,例如使用 Noise (CHOP)Pattern (CHOP),但其實也可以直接用 表達式(Expression) 寫 script,快速達成隨機效果。
以下這個寫法非常常用:
tdu.rand(absTime.frame + 0.1)

notion image

深入解析

  • tdu:TouchDesigner 內建的 Python 函式庫,提供許多實用工具。
  • rand():隨機函式,輸入 Seed 回傳對應的隨機值。
  • absTime.frame:顯示程式啟動後累積的幀數,持續增加,因此每一幀都會生成新的隨機種子。
  • +0.1:可以自由加上任何值,用於改變 Seed,產生不同的隨機值。
為什麼要用 absTime.frame 呢?因為這個值會不斷變動,就能讓隨機值持續更新。如果你放入一個固定數字,則只會生成一個固定的隨機值,不會隨時間改變。

實用技巧

其實 tdu.rand() 還有一個很好玩的用法:可以放入物件路徑或運算元參照,例如:
tdu.rand(me) tdu.rand(op('null1'))
這時候,它會根據你給的物件路徑,生成一個唯一且固定的隨機值。也就是說,只要物件路徑相同,哪怕你重啟 TD,這個隨機值也會維持不變,這點在需要為多個物件配置不同但可重現的隨機屬性時特別好用。
過去我通常會用 Noise (CHOP) 來生成隨機值,然後用 Export 的方式送到其他參數使用。不過相比之下,這種直接用表達式的方式更簡潔,雖然不如 Noise (CHOP) 那麼可控,但如果在專案裡需要大量隨機值時,減少 CHOP 使用也能有效提升專案效能。

總結

tdu.rand() 表達式生成隨機數值:
  • 簡單快速:幾行程式碼就搞定
  • 效能輕量:不用新增 CHOP
  • 靈活使用:根據時間或路徑自訂生成方式
下次想要快速做隨機控制,不妨試試這個方法!
 
⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑⭑
Luxmin Institute (互動研究院) on Patreon
教學講的是觀念,工具則是我們在真實展場裡跑過、改過、確定能用的東西。TD 元件、專案檔、校正與製作流程都陸續發佈在 Patreon 上,免費層可以先看 Demo 與公開工具,付費層取得完整檔案與更新:
https://www.patreon.com/cw/LuxminInstitute
最新的活動動態與報名資訊:
https://www.threads.com/@luxmin.institute
 
如有相關專案或其他需求,請洽 luxmin.art