薛山
上期我們的教學內容嚴格來說只進行了一半:只有螺絲帽,沒有螺絲釘,所以我們本期的目標就是使用Blender制作螺絲釘的效果,你可能會覺得“螺絲釘不就是一個柱體再加上螺旋凸出的圓環嗎?”沒錯,但在3D設計中,很多時候復雜的往往是看起來很簡單的效果,比如螺旋凸出的紋理怎么實現?使用傳統方法去手動選擇區域來擠出?這個方法只要稍微實踐一下就不難發現困難重重,因為需要重構網格,雖然可以如圖1使用內插角和三角面轉四角面來實現網格的45°旋轉,但螺旋紋理顯然不是以此角度進行旋轉的,旋轉的角度也完全不可控。顯然,我們需要一個可定制螺旋參數的著色器方案,這時候就要祭出我們在螺絲帽文章中大顯身手的“置換”大法啦!
與螺絲帽可以通過一個方形平面完全演化不同,螺絲釘無法通過這樣的方式實現,原因在于當我們使用置換功能將平面中的部分凸起呈柱狀時,這些柱體的側面都無法實現表面細分,如圖2所示,進入編輯模式可以看到在軟件眼里它依然只是一個平面,而不是柱體,所以柱體側面無法形成足夠多的有效頂點,我們即便是做出了選區也無法讓螺紋凸出來,所以我們必須手動做一個柱體,并做多次的環切。


注意,這一點很重要!環切必須手動做,不能使用表面細分修改器,因為簡單型表面細分修改器只是在每兩個頂點之間做N次切割,而主體的每一面其實是一個長矩形,這意味著短邊的切割得到的頂點將遠多于長邊,如圖3,這樣會明顯影響螺旋紋理的凸出效果,而我們的目標是如圖4的切割。
切割完成后再加載表面細分修改器,這時候就可以得到很好的效果了,細分等級越高越好,如果你有一臺強力電腦就能獲得更好的效果。建模時最好找一顆螺絲的實物或照片,看看螺絲釘的具體形狀,模仿著做一顆即可,建模的階段結束了,接下來是著色器環節,記得在做著色器之前先切換到Cycles渲染器,并把材質的置換選項調整為“凹凸與置換”或“僅置換”。
螺旋紋理看起來簡單,但如果利用數學思維在3D空間中選區卻需要花一點心思,我們使用的方法是以螺絲的X、Y軸位置信息為值來做反正切,然后結合映射范圍,最小值和最大值正好限制在360°的范圍以內,這樣就能獲得一個完整的無重疊的圓,然后得到的值與Z軸位置信息進行對比,并利用分數取倒數的方式來獲得螺旋形狀。
不過如圖5,這個方法獲得的螺旋形狀是斷層的,其實也有辦法繼續優化,但顯得過于復雜,這里可以用一個討巧的方法,復制上一段所做的全部著色器,但在前方加入一個矢量旋轉,設置為180°,并使用矢量加法給Z軸加上0.5,這樣就相當于把之前做的紋理旋轉了一圈并向上位移了一個單位,最后利用最大值將這兩個著色器組加到一起,就能形成一個完整的螺紋了。


如果想要調整螺紋的密度,可以在最前方紋理坐標后面跟一個矢量乘法,將X、Y設置為1,Z設置為更大的數,就能看到密度增加了。除此之外我們也只想螺紋在想要的地方出現,而不是整個螺絲釘全都有螺紋,這時候可以通過分離XYZ的Z,結合比較來得到區域,并與我們前面得到的著色器相乘,就可以限制螺紋出現的高度范圍了。
得到螺絲釘的紋理之后,接下來就只需要將其連接置換就能實現輸出了,這時候記得把置換的中間值設置為0,而且縮放值也不要設置得太大,基本上0.05以內就可滿足。這時候可以通過給縮放值打關鍵幀的形式來實現螺紋顯現的動畫效果,而且因為螺紋密度、寬度等全都可隨時調整,自由度遠高于建模方案,這時候再把我們上一期做好的螺絲帽加進來,如圖6的一顆完整螺絲就完成啦!


貫穿整個螺絲釘制作系列的關鍵,就是如何選出你想要的的區域來進行置換,對于新手而言,選區的思路很容易被限制在編輯模式下去找你想要的面,但問題在于這種方法找到的面只適用于順著網格走的圖樣,跳行擠出的情況下會出現不可逆的鋸齒,影響觀感。事實上單單看選區的自由度,著色器里提供的數學方案要遠比在3D空間直接尋找方便很多,而且可以打破網格的限制實現無級選區,自由度高,可控性強,是Blender學習過程中繞不開的必學重點之一。

本文著色器編輯器全覽