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風格與寫實風格,都達到一定境界

研究各種2D風格的Procedural特效,會長這次的爆炸球效果,也是學了這位前輩

他的2D風格爆炸教學,也已經收錄在站內的「教學整合」

用Procedural Texture混合做出像真火焰,而且免費下載

有關Procedural的更多內容,可以留意會長的另一篇文章

單用Procedural能到什麼程度|年度Nodevember

裡面有介紹到Nodevember

一個「以Procedural為核心技術」的一年一度的社群創作活動