薛山
滴水波紋是視覺特效里最基礎的效果之一,在很多渲染項目中都有大量使用,不過滴水波紋效果往往需要液體物理模擬才能實現,而即便是想要避免物理模擬,傳統思路也需要使用動態繪畫等方法來實現近似的效果,那么,有沒有既不需要建模,也不需要物理模擬和動態繪畫的方法呢?
簡單來說,滴水波紋其實就是部分頂點的上下起伏,而這種起伏在著色器編輯器里就可以用“置換”來表達,所以在著色器里我們只需要定義哪些位置需要“置換”,而置換的強度變化又是怎樣就行。
首先,我們新建一個平面,并給它賦予一個7級的表面細分修改器,接下來在材質屬性里將置換設置為“置換與凹凸”或“僅置換”,這是Cycles渲染器實現置換效果的前提。然后就進入著色器編輯器界面。因為我們的滴水波紋效果是從中心向四周擴散,所以首先我們要獲得從中心到四周的距離,這時候就要用“紋理坐標”連接“矢量算法”的“距離”,如果你想要自定義中心點的位置,可以在視圖里新建一個空物體,并設置為“紋理坐標”的“物體”。
接下來,我們需要連接“乘加”“分數”和“顏色漸變”,這三個節點的功能就是定義一圈圈的滴水波紋的發生位置、頻率和高低落差,最后用“置換”節點連接“材質輸出”的“置換”,完成后可以得到如圖1那樣有一圈圈均勻高低起伏的滴水波紋圖樣。

那么問題來了,滴水波紋都是隨著傳播距離的增大而逐漸消失的,這種均勻分布顯然不符合視覺邏輯,因此我們還需要在“矢量算法”的“距離”后方單獨接一個顏色漸變,以它作為乘數,讓距離中心點越遠的位置乘以一個越小的數字,從而實現中心高、四周低的波紋形態。
這時候的波紋看上去顯得有些單調,沒有水花激蕩的感覺,為了增加波紋的隨機性,可以在最前端的“紋理坐標”后添加一個“噪波紋理”,并以“線性光”進行混合,具體的設置和效果可參考圖2。

不過,使用置換來制作滴水紋理的缺點也很明顯,就是必須在Cycles渲染視圖下才能被正確應用,其他任何視圖模式都不行,考慮到越是擬真,就越需要使用大量頂點數據,所以這個方法對電腦硬件配置的要求更高。
如果你的電腦性能一般,或者并不想消耗太多的時間來等待Cycles渲染,那么換個思路,利用幾何節點來制作滴水波紋效果,因為幾何節點是不挑渲染器的,EEVEE也能正常工作。
節點設計的邏輯其實和方法一相同,只是細節設計上有些不一樣,首先我們還是新建一個平面,然后在幾何節點編輯器里添加7級以上的“表面細分”,再連接“設置位置”,我們的幾何節點功能就需要從“設置位置”的“偏移量”來入手。
接下來,我們要用到“矢量算法”的“距離”節點,但這次是和“位置”進行連接,而“距離”的另一個數據接口可以連接空物體,這時候可以直接把空物體拖進幾何節點里進行連接,但注意要選擇“相對”。
然后我們需要一個“減法”“乘法”和“正弦”,同樣是控制滴水波紋的頻率和位置,然后連接“矢量算法”的乘法,注意這里我們只需要在Z軸上做乘法就行,否則會出現偏移誤差。而這一步完成后我們就又可以得到如圖3所示的均勻分布滴水波紋了。

與著色器方案一樣,到這一步的時候我們需要解決的問題就是如何添加隨機性,并且降低滴水波紋的邊緣區域高度,隨機性我們同樣可以使用“噪波紋理”來解決,但這次添加的位置就不是在節點的最前端了,而是在“正弦”后,將“噪波紋理”和“矢量算法”的“縮放”通過“矢量算法”的“乘法”進行連接,這樣一來我們就獲得一個表面細節豐富的水面效果。
至于邊緣高度降低,需要在“距離”節點后加入一個“算法”的“相減”,這樣可以得到一個中心高、四周低的效果,然后再接一個“算法”的“相乘”并通過“合并XYZ”進行連接,就能得到如圖4那樣的滴水波紋效果啦!

從效果來說,兩者都有著比較強的可控性和可玩性,對于大多數Blender玩家來說應該都沒有太大的難度,考慮到無論著色器的置換還是幾何節點,在動畫制作中都起著舉足輕重的作用,因此我們還是認為這兩種方法都值得大家學習。當然,如果硬要二選一的話,能夠同時支持各種渲染器甚至實體視圖也能預覽的幾何節點方案可以更優先學習。
對了,可能有讀者朋友會覺得直接使用置換修改器,并添加環狀木紋作為紋理也能實現類似效果,從方法來說的確是可以的,但由于系統自帶的紋理不能做動畫,因此我們需要額外制作一個黑白相間的圓環動畫來作為置換紋理才能真正實現,但這個方法不能即時調整參數,所以我們并沒有推薦。