TD 雜談10 | 使用TOP節點製作彈力

2021-01-14 第五雜談會



寫在前面的廢話 -


前段時間,當我打開之前講過的使用Spring CHOP實現彈力線條的源文件,認真地看了下裡面密密麻麻的節點、一行行的代碼,當時我的內心:這誰做的啊,這麼麻煩,這麼多沒用的節點和代碼,我不寫一行代碼重做它好了。


翻了一下《代碼本色》中Processing的實現原理和代碼,原理和之前使用Spring CHOP的做法一樣,但發現使用TD的一些TOP節點實現起來更加方便。下面就一起打開TD,不用一行代碼實現彈力的效果吧。


就是這玩意


主要都是使用TOP節點計算



- 視頻教程 -


第一次錄製視頻教程



- 製作思路 -


我們還是以之前TD雜談02 - Spring CHOP中的彈力線條效果為例,這次主要是使用TD中的一些TOP節點去計算彈力,製作思路也是和之前講解的思路一致,最終互動效果類似下方視頻。


最終效果

主要步驟:一、製作25*3的點(列數自己確定)二、滑鼠與線條的觸發事件三、計算彈力(主要)四、音樂添加與觸發



· 製作一排點並渲染成線條


像之前講過的一樣,我們需要製作一排線(這裡是25 * 3),每根線有3個頂點,只使用中間頂點來計算彈力即可。


使用漸變方式為Horizontal和Vertical的兩個Ramp TOP,接入Reorder,分別輸出R和G通道,B通道設置為zero,我們將會得到25 * 3沿x、y的點。然後把點轉成線條渲染出來。

這裡需要注意的是,所有TOP的Pixel Format要設置成32bit,不然無法儲存更多的數據。


轉成線條、調整位置



· 滑鼠與線條的觸發事件


完成了基本的線條之後,我們先來實現滑鼠與每根線的觸發事件,在TD裡面實現這個可以通過寫代碼或者使用Render Pick,使用TOP計算本質上也是和寫代碼一樣,都是通過兩點間的距離公式來判斷滑鼠當前位置觸發了哪根線條。


兩點間的距離公式


因為只需要用到x位置,把滑鼠的x坐標轉成TOP,使用Crop將中間的點提取出來並設置成32 bit float(Mono),接下來就是使用公式了。使用Subtract對兩個數據相減,再使用Math進行平方和開方,移動滑鼠接近每根線條,對應像素位置圖像顯示越黑(值越小),最後使用Threshold設置觸發距離,並把觸發信號轉成0和1。


主要調的參數


做到這裡,觸發信號基本已經完成,因為現在信號是0和1的狀態,我們需要使線條根據滑鼠移動的快慢決定彈力的大小和滑鼠移動的方向決定線條初始彈動的方向,這一步驟我們把彈力實現出來後再製作,這樣就方便觀看。接下來就到了最關鍵的步驟,計算彈力。



· 計算彈力


在開始製作前,先看一下Processing中的一個關於彈力的案例,我們根據裡面核心的代碼用TD的節點去實現。

https://processing.org/examples/springs.html


Processing中關於彈力的案例


force = -k * (tempypos - rest_posy);  // f=-ky accel = force / mass;                 // Set the acceleration, f=ma == a=f/m vely = damp * (vely + accel);         // Set the velocity tempypos = tempypos + vely;           // Updated position


這個案例計算彈力用到的公式主要是上面這幾行代碼,tempypos是初始位置,對應到TD中的就是最開始時製作的線條中間點的x,rest_posy是滑鼠的Y值,對應的是線條中間點的x加上滑鼠移動產生差值的數據。k是彈力常數,mass是質量,damp是阻尼係數。接下來我們通過使用TOP節點一步步實現每一行代碼。


f=-ky a=f/m


先把代碼裡的公式用節點連出來,把初始位置和上一步做完的觸發信號(force)相減,然後再乘以彈力常數,除以質量,第一行和第二行代碼在一個math裡面計算了。


初始狀態下,力和加速度是為零的,根據彈力運動的狀態來看,我們能想到最終TOP裡面的數據是初始位置加上一個來回閃動並在一定時間內歸零的數據,而要讓數據動起來,我們需要在初始位置後面添加一個Feedback。



vely = damp * (vely + accel)


這一步我們需要計算速度,初始狀態下,速度也是為0,所以需要在這裡使用constant創建一個為0的速度,在代碼中,先拋開阻尼係數不管,vely = vely + accel,想要在數據動的時候每幀都加上原來的速度,我們需要再添加一個feedback,把最終相加的速度(add)給到feedback中。


到這一步,把數據和初始位置相加,移動滑鼠,我們會發現TOP裡面的顏色一直跳動不會停下來,這是因為阻尼係數還沒有添加上去。



添加阻尼係數這一步需要注意,阻尼係數是在加速度相加之後再運算的,所以乘以阻尼係數需要在feedback後面進行運算,而不是在add節點後面。(最開始我就在這翻車了)


tempypos = tempypos + vely


最後把第一個feedback(這個feedback的target需要接入後面這個add)和速度相加(add),移動滑鼠,線條的彈力就完成了。


數據需要閃動並逐漸消失



· 滑鼠控制力的大小和方向


現在線條的彈力和方向都是一致的,我們把前面剩下的滑鼠速度控制力的大小,左右控制方向添加上。


這一步其實和使用Feedback CHOP獲取滑鼠前後幀數據是一樣的,但在TOP裡面使用的不是Feedback,而是使用Cache存儲前一幀的數據再相減。需要注意的是Cache中的always cook要打開。


因為前面的觸發數據是0和1的數據,我們把滑鼠前後幀的數據拉伸為同等的解析度,和觸發數據相乘就能實現根據滑鼠移動速度作為力的大小。


到這裡我們已經達到不寫一行代碼實現了之前使用Spring CHOP做的效果的目標了。



· 音樂添加和觸發


前面的觸發信號都做好了,音樂觸發這裡就很簡單了。把音樂文件夾的Table拉到Audio Play參數中的Dat List中,使用觸發信號調用Audio Play的play方法。等等,不是說不寫一行代碼嗎... ...好吧,打臉了,要寫一行,因為這方法是最方便了。

play(index, start=True, loop=False, delaySeconds=0.0, pan=None, rolloff=None, volume=None, fadeSeconds=0.0)

還是寫了一行代碼


說起音樂播放這事,想起自己當時真的是愚蠢。之前使用Spring CHOP做的那版,我是這樣做的:有多少個音樂文件就用代碼創建多少個 Audio File In,然後把輸出都組合起來給到Audio Device Out。


用了超級多節點


整個案例製作就完成了,對比兩種方法,使用TOP計算更加方便,不需要做太多的數據轉化,也不需要寫太多代碼,在運行上效率也更快。


之前使用Spring CHOP做的那一版有很多節點可以簡化掉的,畢竟是剛學TD不久的時候製作的,有時間再優化一下。


使用CHOP做的,裡面還有很多節點

使用TOP做的,更加方便



- 結語 -


這次分享就到此結束了,公眾號後臺回復」SpringTOP「可獲取TD文件下載地址。


以後我們會繼續與大家分享一些關於使用TOP做一些公式、算法運算的技巧,敬請關注。




Touchdesigner · Notch · Arduino · Blender


相關焦點

  • 環狀彈力帶的使用技巧
    環狀彈力帶環狀彈力帶,現在許多健身房及運動康復機構都可以看到的功能性訓練小工具。
  • 7.2 彈力
    二、彈力大小與形變量之間的關係三、彈簧測力計的使用一 彈性、塑性和彈性限度使用 (1)使用前:①觀察量程和分度值;②調零;③輕輕拉動掛鈎幾次,防止彈簧卡殼。(2)使用時:①測力時,要使彈簧的伸長方向與所測拉力方向__一致____,避免彈簧與外殼發生摩擦;②測量時,所測力__不能__超出彈簧測力計的量程;③讀數時,視線要與指針水平,且與刻度盤板面__垂直__。
  • 【龍渲】maya&mr程序紋理節點製作「黑暗料理」
    如何用maya&mr程序紋理節點製作「黑暗料理」模型方面很簡單,基本就是我用一些基本體搭建而成,我本人不太喜歡作模型,所以能用最簡單的方式達到想要的效果就可以。下圖是賦予上圖模型的完整節點圖:通過上面的節點圖可以看出,通過置換節點會讓簡單的平面模型產生如下效果變化過程。可以看到是用了上述節點使一個簡單的平面發生了很多變化,在外形上的變化歸功於使用了Noise的置換節點。這裡有一個技巧,用同樣作為置換節點的Noise+ramp調節成顏色節點賦予到shader的顏色信息上,就可以產生如上圖的效果。
  • 重力,彈力和摩擦力自學攻略√
    一.本章基本內容《課程標準》有這樣的說明:通過常見事例和實驗,了解重力,彈力和摩擦力.通過實驗探究,學會重力,彈力和摩擦力的應用.本章即是在此要求基礎上編撰而成的.本章內容包括一,二,三節,分別介紹了重力,彈力,摩擦力的基本知識及其應用;是學習槓桿等簡單機械的基礎.
  • Blender材質編輯器Color Ramp節點的使用方法
    Blender自帶的渲染器Cycles功能很強大,可以製作幾乎所有物理世界的材質效果。要學習它的功能,需要下很大功夫,其中Color Ramp節點是一個必學內容。這裡我們先要回顧一下,顏色是怎樣在電腦中顯示的。
  • 陽離子組合彈力布怎麼樣
    陽離子組合彈力布怎麼樣 2016-11-08 10:08:13 來源:全球紡織網 陽離子組合彈力布面料經向以200D陽離子FDY長絲抱40D氨綸包覆絲為主原料
  • 《彈力》說課稿
    一、說教材(過渡句:首先來說一說我對教材的理解)本節課選自高中物理人教版必修1第三章第2節,本節主要從彈力的產生,及其大小、方向、作用點等幾點詳細剖析了彈力的相關知識,其實在初中學生已經接觸過彈力,所以學習本節課之前,學生已經有了較好的知識基礎,但高中階段的彈力,重點是彈力的產生、幾種彈力的方向以及彈力的大小,比初中階段的知識更複雜,更深入,學生學習本節課之後
  • 燈魚雜談 | 長鬚飄飄——龍鬚燈
    長鬚丹屬魚類體長在5到10釐米比較多,但也有超過12釐米的大型種。這類魚還有一個特點是許多種類耐鹽能力很強,可以在汽水中生活。雖然數量比較多,但長鬚丹們作為觀賞魚進口的種類並不多,批量進口的只有龍鬚燈(E. caudiocellatus)和印度金線燈(E. metallicus)兩種。
  • 一條彈力帶 輕鬆在家練肌群
    動作說明每條腿訓練動作 8-10 次,左右各練一遍為一組,每個動作訓練 3-5 組;Ankle Plantar Flexion 踝蹠屈訓練發力部位: 腓腸肌、比目魚肌、脛骨後肌訓練好處彈力帶的一端繞在你的足弓外緣。 用你的另一隻腳踩著鬆開的彈力帶上。 抬起,旋轉和彎曲一隻腳的腳趾(腳尖離地); 儘可能地保持你的腳跟在地面上。
  • 學霸們都會的物理——彈力(八年級下冊)
    3.彈力:物體由於發生形變而產生的力叫做彈力.4.我們常說的壓力、支持力、拉力都屬於彈力.產生彈力的條件:一是兩個物體相互接觸,二是物體間發生擠壓或拉伸等.(3)使用方法:使用前應觀察彈簧測力計的量程和分度值,被測力的大小不能超過其量程;檢查彈簧測力計的指針是否指在零刻度線上,如果不在,應該把指針調節到零刻度線上;測量時,應使彈簧測力計受力方向沿著彈簧的軸線方向;讀數時,視線必須與刻度盤垂直.
  • 彈力緞是真絲面料嗎?真絲彈力緞的優缺點
    彈力緞是真絲面料嗎?真絲彈力緞的優缺點 2017-05-19 11:21:20 來源:全球紡織網 彈力緞是真絲面料嗎?是的!那麼它的成分是什麼呢?94%桑蠶絲,6%氨綸。
  • [名師課件] 力·彈力與胡克定律·教案
    2.能夠正確判斷彈力的有無和彈力的方向,正確畫出物體受到的彈力。  3.掌握利用胡克定律計算彈簧彈力的方法。  二、重點、難點分析  1.彈力是在物體發生形變後產生的,了解彈力產生的原因、方向的判斷和大小的計算是本節教學的重點。
  • 彈力彈性熱熔膠膜類型介紹
    彈力彈性熱熔膠膜指的就是熱熔膠膜具有一定的彈力性能,不僅本身表現出良好的彈性,在粘接後,不僅不會影響到材質本身的彈力,還能增加複合材料成品的彈性。彈力彈性熱熔膠膜更適合用在一些彈力材料以及對彈力有要求的複合行業中。
  • 醫用彈力襪是什麼材質做的 醫用彈力襪按壓力分級
    醫用彈力襪是什麼材質做的 醫用彈力襪按壓力分級 2021-01-12 15:30:44 來源:全球紡織網 醫用彈力襪是什麼材質做的?
  • 初中物理7-2《彈力》知識點詳解
    二、什麼是彈力?物體由於發生彈性形變而產生的力叫做彈力,把尺子壓彎,把橡皮筋拉長,尺子、橡皮筋就會產生彈力的作用。壓力、支持力和拉力都屬於彈力。1、彈力的大小同一個物體彈性形變越大,彈力就越大。古代人用弓箭或者駑打獵。
  • 經典力學:接觸彈力
    ,由於要恢復原狀,對跟它接觸的物體會產生力的作用,這種力叫作彈力。①.彈力產生的條件彈力產生在直接接觸並發生形變的物體之間。任何物體都能發生形變。②.彈力有無的判斷a.直接判定。對於形變較明顯的情況,由形變情況直接判斷。b.利用「假設法」判斷。
  • 美國經濟狀況偏向悲觀 白銀TD能否繼續上漲?-白銀TD
    因美元下探,且投資者寄望於有關美國新冠病毒援助計劃的談判最終會取得破位,白銀td周四走強,再次站上5000元大關。周五(12月4日)亞洲市場盤中,美指基本持穩,白銀t+d小幅度回落,目前白銀t+d行情交投於4969元/千克,今天白銀t+d開盤報5019元/千克。
  • 神奇的彈力科學世界
    今天我們走進彈力的世界,讓我來個大家介紹一下它背後的科學故事吧!彈力是什麼?介紹彈力的知識之前,我們先來看一下究竟什麼是彈力。很多人會說彈力不就是可以彈動物體產生的力麼,當然研究科學知識我們必須要講究嚴謹倆個字,我們先很嚴謹的描述一下什麼是彈力:彈力的本質是分子間的作用力。
  • 高中物理《彈力》教案
    彈力·教案一、 教學目標【知識與技能】1.知道常見的形變,了解物體的彈性;2.知道彈力產生的條件;3.知道壓力、支持力、繩的拉力都是彈力,能在力的示意圖中畫出它們的方向。【過程與方法】通過探究彈力的存在,能提高在實際問題中確定彈力方向的能力,體會假設推理法解決問題的巧妙。【情感態度與價值觀 】觀察和了解形變的有趣現象,感受自然界的奧秘,感受學習物理的樂趣,建立把物理學習與生活實踐結合起來的習慣。
  • 《科學養生》 - 生命彈力--中國數字科技館
    文章數 打開微信,點擊底部的「發現」,使用但是,我們也發現,不同的生命其彈力是不同的。就拿人的生命來說吧,勾踐歷經磨難臥薪嘗膽終成功,曼德拉牢底坐穿譜寫生命的凱歌。但在同樣的環境條件下,經歷同樣的考驗,有的生命凋謝了。這說明即使是同一類的生命也存在差別。橡皮筋從靜止到繃斷,這就是它的彈力區間。不同的生命體的彈力區間是不同的。