薛山
說到屏幕保護(hù)程序,或許很多年輕人都會覺得不明所以,作為CRT時代的標(biāo)配,當(dāng)你長時間不使用電腦但又不關(guān)機(jī)的時候,屏幕保護(hù)程序會主動顯示一些預(yù)設(shè)的動態(tài)畫面,不讓屏幕長期顯示同一畫面而導(dǎo)致熒光物質(zhì)老化。但在進(jìn)入LCD時代之后,屏幕保護(hù)程序反倒會加大背光工作壓力,因此漸漸就淡出了歷史舞臺。不過,作為一個從Windows 98開始用電腦的“小萌新”,屏幕保護(hù)程序就是我電腦萌芽階段的一個特殊記憶,尤其是那個在三維空間里不斷自動生長的水管,讓人印象深刻,那么在Blender里,我們是否能復(fù)刻這個經(jīng)典的3D屏保效果呢?
3D水管這個屏保最大的特點就是沿XYZ方向隨機(jī)增長,這個設(shè)計如果是以傳統(tǒng)的建模概念來說,最直觀的方法就是只能先建好模型,再利用“建形”修改器來還原這個模型的生長過程。但這個方法有一些弊端,其中最明顯的就是形態(tài)固定,因為你是先完成了建模,再進(jìn)行還原,所以無法實現(xiàn)真正的隨機(jī)化,而Windows XP的3D水管屏保每次都是不一樣的,因此,最好的復(fù)現(xiàn)方法還是利用幾何節(jié)點,也就是通過數(shù)學(xué)手段來解決這個問題。
注意,這次的教程需要用到3.1及以上版本的Blender,3.0版會缺少一個重要的節(jié)點。而在打開Blender之后大家可以直接利用默認(rèn)立方體來新建幾何節(jié)點,因為水管的生長在二維空間來看就是線段的增長,因此我們需要使用“網(wǎng)格直線”來作為基礎(chǔ),然后讓它每一個頂點的位置都以1個單位,隨機(jī)向正負(fù)XYZ方向移動。
邏輯上梳理清楚之后,接下來就該想辦法操作了。因為是隨機(jī)方向,所以我們需要一個“隨機(jī)值”來作為算法的起點,總計有6個移動方向,我們只需要讓這個隨機(jī)值除以6,就能在6個方向中隨機(jī)選擇其一,因為每一個頂點都會計算一次,所以理論上就能讓每一個頂點都隨機(jī)沿正負(fù)XYZ方向移動了。
所以,如圖1所示,我們需要先引入6個矢量,代表了XYZ軸各自±1單位的移動量,接下來就需要利用“隨機(jī)值”,通過每六分之一個單位,也就是1/6=0.167來進(jìn)行“吸附”,這會讓每次在0到1之間生成的隨機(jī)值都是0.167的整數(shù)倍,相當(dāng)于做了一次六選一。

接下來我們只需要按順序,讓每兩個矢量進(jìn)行混合,并使用“相等”來讓它們以1/6、2/6、3/6、4/6、5/6作為系數(shù),這個步驟就是讓它們按生成的隨機(jī)數(shù)來進(jìn)行匹配,在六個矢量方向中選擇一個,具體設(shè)置可參考圖2。

在得到這個看起來很復(fù)雜的六選一算法后,我們需要在網(wǎng)格直線后添加一個“設(shè)置位置”,它的功能就是調(diào)整每個頂點的位置,這時候如果我們直接把圖2得到的結(jié)果輸出到“位置”,增加網(wǎng)格直線的數(shù)量后會得到一個立體的菱形,而不是一個不斷增長的線段,這就是為什么我們要用3.1版Blender的原因,因為從這個版本開始才有“累積場”這個節(jié)點,它的作用就是讓每一個頂點的矢量增加都建立在前一次計算之上,如果沒有這個節(jié)點,在每一個頂點的矢量計算之前都會把位置重置回原點,所以圖像才會呈現(xiàn)為一個立體菱形,而在如圖3所示正確設(shè)置“累積場”之后,再增加網(wǎng)格直線的頂點數(shù)量,就會得到我們想要的效果了。

FpddZsKpd84dix4sK67FZFOr1vZFat38Rb6/MRoKP1s=
最關(guān)鍵的是我們可以通過修改“隨機(jī)值”的隨機(jī)種,獲得完全不同的走向圖,這就實現(xiàn)了我們最開始的目的:隨機(jī)變化的水管增長。
剛剛我們實現(xiàn)了水管的走向,但這時候我們并不能真正地看到“水管”,所以還需要繼續(xù)在幾何節(jié)點里進(jìn)行設(shè)置,首先需要使用“網(wǎng)格→曲線”和“曲線→網(wǎng)格”,再利用“曲線圓環(huán)”作為“輪廓曲線”來呈現(xiàn)水管形狀。
但這時候你可能會發(fā)現(xiàn)水管的細(xì)節(jié)有一些瑕疵,這是因為曲線精度不夠所致,所以我們需要在“網(wǎng)格→曲線”和“曲線→網(wǎng)格”之間添加一個“細(xì)分曲線”來解決這個問題。
如果你也是Windows XP老玩家的話,應(yīng)該還記得這個“水管”并非純粹只是管道,在管道轉(zhuǎn)彎位置其實還有一個小圓球,那這個東西如何添加呢?其實也很簡單,因為我們之前通過算法,已經(jīng)得到了一條不斷隨機(jī)彎折的線段,只需要在這條線段的每個頂點上,通過“實例化于點上”來放置一個經(jīng)緯球或棱角球,問題就得以解決了,再給“管道”和球體各自添加材質(zhì),最終效果就實現(xiàn)啦,具體可參考圖4。

如果要在Blender 3.1版本之前來做這個經(jīng)典的屏保效果,可能還真只有先建模這一個方法可行,而幾何節(jié)點的出現(xiàn)讓這個過程變得更加簡潔明了,而且還有了更隨機(jī)化的效果,的確非常有趣。同時需要注意的是,幾何節(jié)點的功能其實一直都在快速更新中,很多技巧都是新版本更迭后才出現(xiàn)的,這也就需要大家保持專注力,多研究新版本的特性,才能學(xué)到更多有用的玩法。