鹹魚了一個月的我
終于又來更新了

(再不更新就……就要明年了)
(渴望力量麼?)
如圖所示,這次帶來的是Grasshopper + Processing的工作流,至于為什麼會有這樣一個小衆的工作流,是因為我(不想學AE)比較熟悉Grasshopper的操作,就想結合Rhino和Processing兩者的特點快速制作(鬼畜)動畫。
封面鬼畜但是……全程無高能
所有的 代碼和GH檔案 都可以在公衆号背景回複“Grasshopper + Processing”下載下傳
也可以在www.openprocessing.org/sketch/815918 檢視Processing部分
萬能的.txt
衆所周知,Rhino有着非常直覺的曲線繪制和編輯能力,我通過Rhino畫線來規劃畫面内素材的運動軌迹,利用Grasshopper來做出一些随機效果和運動速率的控制,并且把軌迹轉換成點的坐标,把所有的坐标轉化為字元串,寫入txt檔案,最後用Processing讀取這個txt檔案,運作就可以得到動畫了。(.txt幾乎可以連結所有的非實時工作流,傻瓜且有效)
曲線軌迹 /勻速分布 / 變速分布
Grasshopper部分:當我們指定一個圖檔在Processing的畫布中運動時,無時不刻要指定它的位置:image(img,a,b)。要獲得這個位置,我們就要獲得軌迹上的點,而點的疏密則直接決定了運動的速率。我們通過Graph Mapper就可以改變點的分布(更複雜的運動速率可以用Rich Graph Mapper或者V-Ray Graph來控制),每一幀Processing都讀取一個點的位置并畫出圖像,進而實作動畫。
Rich Graph Mapper和V-Ray Graph
在這樣一個工作流中,有幾個關鍵點:
1、畫布和坐标系:要想在Gh和Processing中實作一緻的效果,那就要統一畫布大小。這裡Rhino的機關并不重要,隻要把“畫框”的長寬數值保持和Processing中size(width,height)相同即可,這個“畫框”并不是真實存在畫面中的,隻是為了标定畫面的界限而畫的一個矩形。至于坐标系,在Rhino的Top視圖中,Y軸是向上的,而在Processing的畫布中Y軸是向下的,為了統一畫面和坐标的關系,我們在Top視圖的Y軸<0的那側進行設計,最後輸出時把點的Y軸作相反數處理即可。
2、點數和幀速率:點的數量決定了總的幀數,Processing中的預設fps是60,修改幀速率的話使用frameRate(fps)的函數即可,而 總的點數÷幀速率=動畫持續的時間,這些參數都可以根據設計的需求去調整,使得動畫達到最佳的狀态。
在Grasshopper中預覽效果
在曲線上取點以及用Graph Mapper都是GH裡的新手操作,我就不多贅述了,要點在于資料的排列順序要和Processing中代碼的讀取順序相比對,字元串方面要把坐标裡的括号去掉,資料間用逗号分隔,最後一條線合并成一行,并導出。
處理坐标資料并編織圖檔的其他屬性的資料
處理完字元串之後就可以右鍵點選Panel,儲存成txt格式
有了.txt檔案之後就進入到了Processing部分(也是入門水準,大概看完半本Learning Process就能看懂這個代碼)。孝吾已經把注釋寫的很詳細了,我就簡單解釋一下用法。
最近新換的暗黑皮膚
首先是代碼中的檔案名要和檔案夾中的一緻,大家自己替換圖檔素材的時候不要忘記這點。其次代碼中我們定義了XYZ三軸的坐标、繞這三軸的旋轉角度、XY二軸上的縮放、以及RGB三種顔色的蒙版,一共11種參數(當然你也可以自定義修改),但是有些情況GH并不會輸出這麼多種參數,我們隻要寫入txt檔案中的即可,剩下參數用預設值去替代。
int Datalength = 4; //一組資料的長度
複制
比如我在Rhino中輸出了坐标的三個值、縮放大小,這樣每個素材就有4個資料,我就要以4為間隔去讀取數組,剩下資料就要用預設值填充。如果Rhino輸出的單個元素資料類型的長度改變,這個Datalength就要做對應修改。
ImgList[i].play(Img_Path[i][Rate],Img_Path[i][Rate+1],Img_Path[i][Rate+2], 0,0,0, Img_Path[i][Rate+3]*0.3,Img_Path[i][Rate+3]*0.3, 255,255,255);
複制
調試好代碼以後用saveFrame("###.png")函數進行每一幀圖檔的存儲,最後用Processing自帶的Movie Maker插件就可以進行輸出視訊,注意選擇和程式中相同的FPS設定。
你說這AE它不香麼?