薛山
一般來說,3D建模的可逆性都相對不強,也就是當我把立方體變成異型之后,想要變回來,或者再變成其他形狀就比較麻煩,基本上沒有退路可循。不過,隨著修改器設計的不斷發展,我們在Blender里已經可以實現相當豐富、隨時可調整的功能,比如平滑邊緣,就不一定要在模型上自己手動做平滑,而是通過修改器對范圍、幅度、強度進行程序化的控制,簡單來說就是給予我們更多的控制空間,賣了一劑“后悔藥”。事實上在結合修改器+材質著色器的基礎上,我們甚至不需要建模,就能生成很多的3D模型,而且對模型的形態有著隨時可調整的巨大優勢。那么,究竟要如何實現呢?我們本期就以一顆“螺絲釘”來說起吧。
如圖1,看起來就是平平無奇的一顆螺絲釘,但其實在編輯模式下查看,你會發現它只是一個由4頂點組成的平面,換言之,這并不是一個傳統方法建模形成的圖像,而是通過著色器設計,利用置換原理所構成的形狀,具體怎么操作呢?我們一步步來看!
我們需要新建一個平面,然后將渲染器設置為Cycles,在平面材質中將表(曲)面置換設置為“置換與凹凸”,如圖2。這一步非常關鍵,也比較容易被新手遺忘,所以要單獨強調一遍。






然后切換到“渲染”模式,因為只有在此模式下才能看到置換效果。我們先給平面設置一個表面細分修改器,級數雖是越高越好,但越高意味著最終渲染的多邊形就越多,對硬件要求也越高,所以要量力而行,本教程最終渲染時設置為8。
然后進入著色器編輯器,使用紋理坐標連接矢量運算,并將矢量運算選擇為“長度”,再連接映射范圍,并通過置換模塊連接到材質輸出的“置換”上,這時候通過調整映射范圍的數值就能看到平面變成了向上的錐形,這時候再在映射范圍和置換之間添加一個RGB曲線,調整成螺絲釘的形狀,就能看到如圖3的效果樣式了。
我們既可以通過RGB曲線來調整螺絲釘的形狀,也能通過映射范圍的“到最大值”來調整圓滑度,這就是“程控”的意義所在,通過一組著色器設置,就能輕松讓每一顆螺絲釘都有些微的差別,這不正符合現實生活嗎,畢竟世上沒有完全相同的兩片樹葉。到這一步,你的著色器編輯器應該是如圖4所示的設定。
所謂“十字紋”,就是讓原本升起來的部分又以十字紋的形狀下陷回去,從而形成我們想要的形狀,這時候需要新建一個分離XYZ,并用X、Y分別連接一個運算模塊并選擇為“絕對”,然后用運算模塊的“最大值”功能連接,再緊接一個相減,并通過顏色漸變來輸出。然后再在分離XYZ之前加入一個矢量運算并選擇為正片疊底,嘗試設置X、Y的矢量值,可獲得如圖5的效果。
將本步驟新建的功能模塊全部復制一遍,但把矢量運算的X、Y值進行替換,然后把這兩個模塊組用正片疊底相乘,這樣就能形成一個十字形了。雖然我們也有更簡單的方法來形成這個十字,但教程所使用的方案可以讓十字形邊緣呈坡狀,而不是垂直下落,視覺上更符合真實場景,而且也可以通過調整參數來改變坡度角度,程控更自由。
最后再將本步驟所做的功能模塊,用正片疊底與第一步制作的模塊在置換之前相乘,這樣就能實現如圖1的螺絲釘形狀了。
考慮到要在多個“螺絲”上使用這一組著色器,建議將用于置換的模塊全部以Ctrl+G進行編組,并為映射范圍的“到最大值”、2個相減模塊的數值以及置換模塊的縮放值添加組輸入的快捷連接,并按功能重新命名為容易理解的名稱,比如“到最大值”就是“螺紋大小”,減法的數值就是螺絲頂面的“圓滑度”,而置換的縮放就是控制螺絲的“高度”。這樣一來,如圖6,我們的著色器編輯器一下就簡單明了了很多,反復使用時也不容易混淆了。

在今年開始做Blender系列文章時我就說過,置換是Blender著色器里非常重要的功能,它可以在零建模的基礎上實現3D圖像的輸出,而且Blender在2.93 alpha版本就開始重推幾何節點,這也是一個全新的,足以讓人腦洞大開的新功能。雖然玩法有不同,但關鍵邏輯是互通的,著色器置換考驗的其實就是用戶的空間想象力,怎樣通過紋理位置的數學計算來置換出形形色色的形狀,而且顯然,我們的螺絲只完成了上半部分,螺絲最重要的螺紋部分并沒有完成,那么聰明的你想不想嘗試自己研究一下呢?你能在我們下期教程推出前自己搞定嗎?我拭目以待!