Procedural做動畫|Displace的其他玩法
會長之前做的2D的爆炸效果
我發覺,很適合拿來做Procedural Fx的showcase
今天就跟大家分享一下
Displacement是一切的基礎
大家都知道,Displacement是「透過Texture來影響物件」的一種方法
而這種方法是Procedural的
這意味著,可以隨時調節中間數值來改變最終成品,甚至做動畫
爆炸球效果的Base,只是一個8粒點的基礎正方形
到底這過程一共用了甚麼Modifier?
又為甚麼要用這些Modifier呢?
會長把流程大致歸類成4大步驟,先簡單闡述一次,其後再深入討論今次的技術點
開始製作!
第一步:添加Subdivision

基礎正方形只有8粒點,我們的第一步就是要增加更多的點
這部分也稱做「增加物件的resolution」
第二步:用Noise來做Displacement
Displacement允許使用數值來改變物件表面的高低
通常會配搭一張Texture來使用

考慮到之後要做動畫,所以使用Procedural的Noise來做texture
(而且noise是內建的,不用外接圖片,方便)
這裡其實使用一些複雜的做法,並不是普通的Displacement
包括了使用Vertex Group來做Displace,而不是一般直接用Texture
文章後半部會講解更多
第三步:用Weight Mask來做出不同Layer

大家所看見的「很多顏色的爆炸球」,其實就只是「很多個不同顏色的球」而已
我們這裡要做的,主要就是根據Texture的強度
用Vertex Weight Mask的方式製造出不同層次的球
第四步:使用Controller製作動畫

先幫大家釐清概念
Texture驅動Displace Modifier,Displace Modifer又在影響最終物件
所以如果我們在Texture做動畫,那麼最終物件也會動起來
而為了方便控制Texture,我們需要用到Controller
無論是WeightEdit Modifier,還是Displace Modifier,都可以選用一個Object來輸入材質座標

用什麼來做Controller?
任何object都可以
不過Blender有Empty,基本上就是After Effect裡的Null
Empty雖然也屬於Object,但沒有可以用來render的點線面,你不會在最後render看見它
所以可以盡情拿來當Controller
搭配Controller,輕鬆控制材質變化
用物件的location(移動座標)控制材質的coordinate(座標),做出「流動」的效果
用物件的scale(比例)控制材質的size(大小),做出密度上的變化
講述完「簡單流程」了
接下來,就是稍微比較深奧的技術探討
技巧一:使用多於一個Displace Modifier
會長使用了兩個Displace Modifier,而且兩次Displace都是用了同一個來源
一般的理解,這樣做或許是為了達到雙倍的效果
但⋯
為什麼不選擇直接把Modifier強度拉大,而要選擇用兩個Displace Modifier?
因為兩者效果不同

若是使用單個Displacement,單純增加強度的話
只會得到「在同一個方向上,越來越極端的變化」
但若使用多次Displacement
因為前一次的Displace已經造成了表面凹凸不平,導致其後Displace計算的方向也會有改變
相等於在Displace途中「重新取樣」了一次
令Displace不再只有「直上直落」,而是懂得轉彎,營造更「球型」的效果
技巧二:使用Vertex Group來做Displacement
不是直接使用材質來驅動Displace
而是先把材質圖轉化成Vertex Weight,再使用裝有Weight的Vertex Group來進行Displace

這個方法,比傳統方法步驟更多,更繁複
為什麼要經過Vertex Group而不直接用圖?
這有兩個原因
首先是一個有關準確性的顧慮:
我們無法確保每次Displace中,每粒點都被輸入相同的強度
在多次Displace的情況,每次的重新計算都可能存有誤差
有時我們想要誤差
例如「一張Texture,多次Displace」的做法
就是在利用,每次重新計算產生的「方向上的誤差」
而有時我們不想要誤差
例如因多次「重新計算」而產生的副作用:「位置上的誤差」
直用Texture能有更「狂亂不羈」的效果,但我們這次用較「圓潤穩定」的
我們用「多次Displace」+「Vertex Group做法」的互相配合
就能做到
在保留「方向變化」的前提下,避免因多次Displace可能造成的「位置誤差」
而且Vertex Group做法還有另一個優點,就是⋯⋯
與Mask Modifier的連動

Vertex Group做法也能配合整體Workflow
Mask Modifier的Workflow(Mask Modifier需要使用到Vertex Weight信息)
可以透過調整Mask的Threshold,來「Hide」掉低於/高於某個數值的點
使用Driver功能
把各Layer的Mask Threshold數值,串連到一個新Empty上
就能做出控制各Layer「覆蓋程度」的Controller了!
以上就是本篇分享的主要內容了
在完結之前,會長也想向大家分享更多Procedural能做到的事
Procedural Fx能達到的高度
大家或許早已認識,但會長還是想簡短分享兩個Procedural Fx的大師
他們分別在2D風格與寫實風格,都達到一定境界
Cody Winch
研究各種2D風格的Procedural特效,會長這次的爆炸球效果,也是學了這位前輩
他的2D風格爆炸教學,也已經收錄在站內的「教學整合」
Simon Thommes
用Procedural Texture混合做出像真火焰,而且免費下載
有關Procedural的更多內容,可以留意會長的另一篇文章
單用Procedural能到什麼程度|年度Nodevember
裡面有介紹到Nodevember
一個「以Procedural為核心技術」的一年一度的社群創作活動

