Roughness與Anisotropy的本質思考?

mp.weixin.qq.com
圖標

這篇是建立在前一篇推送的基礎上的,只有看完全面全部的基礎知識才能看明白這一篇在幹嘛。

最終還是做圈狀劃痕,之前剖析了原理,但用了很簡單的實現方法。這一篇講的方法會複雜一些,需要對SD這個軟體有一定的認知才能跟上。

或者不想了解這麼麻煩的東西,可以直接下載這裡我已經改好的節點用。

下載地址

為什麼要用scratches_generator節點?為什麼要魔改?

官方節點效果

官方節點參數

因為這個節點效果豐富(可直可彎),可控參數非常多,能滿足各種需求(不管你是直是彎),是幾乎完美的解決方案。我很愛van♂這個節點。

但是這個節點默認情況下, 亮度的變化跟方向沒有關係,只能當做凹凸貼圖使用,不符合我們前一篇文章分析的技術實現,不能當做各向異性旋轉貼圖使用。

所以我們需要通過自己的雙手來魔改這個節點的 內部 構造,讓它的每一段線的亮度都跟旋轉方向掛鉤。

下面就是具體操作

丨複製官方自帶節點到個人庫文件夾


首先我們複製一份文件出來修改,這樣所有的節點以及參數都是沒有上鎖可以修改的。

找到系統的Scatches Generator節點,右鍵顯示該節點在硬碟上的位置,點擊打開目錄。

複製這個pattern_scratches_generator.sbs文件到你自己設置的庫文件路徑中。這個自己個人看著設置就行了。

丨規範文件與名稱等


複製完以後,你再去創建Scratches Generator節點,會發現有兩個相同的節點。後面的是我們剛複製的。創建這個後面新複製的。

ctrl + e 進入這個節點內部。同時,刪除我們不需要的生成normal通道的graph

重命名label並儲存這個sbs文件,以和之前的官方節點進行區分。

丨具體操作步驟


打開我們複製的sbs文件以後,這裡可以自由移動編輯任何節點和參數了。

選中這裡的fx map節點,ctrl + e進入內部

這個iterate節點包含了很多執行邏輯。我們就要修改這個節點。

選中之後,點擊Iterations屬性後面的圖標,對具體的節點樹進行調整。

節點看起來不少,但我們只關心旋轉和亮度相關的節點。

搜索color,找到顏色最終輸出的set節點。

搜索rotation,找到旋轉信息輸入的get節點。

把這兩個節點連接在一起,就可以起作用了。我修改了一些參數,先去除節點本身的扭曲效果,讓觀察更直觀。

然後單獨調節旋轉屬性,這個時候,劃痕的亮度已經和旋轉角度產生關係了,但是由於數值的問題,前面的很多亮度是負值,看不到,所以我們再改一下節點,讓結果更容易觀察。

給patternRotation節點再加0.5,結果輸出到patternColor里去。

這一次,我們觀察到的亮度隨角度變化效果和上一篇文章中的效果一致,我們的目標達成了。

這裡還有特別重要的一點要注意。當我把劃痕的粗細度改得非常粗的時候,劃痕的亮度看起來是有漸變的。由於我們的亮度表徵的是旋轉角度,所以這種亮度的漸變是我們絕對不想要的。

漸變產生的地方是在這個線性漸變上,我們使用一個純白色節點替換就可以了。

這樣每一根劃痕的亮度都是統一的,是我們想要的效果。

丨實際使用


實際使用中,我們需要把旋轉隨機值拉滿。這樣獲得的效果和上一次推送中我製作的效果非常近似了。

不過這一次,我們獲得了官方節點定義的功能加成buff,有非常多的屬性可以調節。

比如來一點扭曲 .

還有非常多的隨機值參數,都可以讓你做出更加豐富自然的結果。

丨扭曲效果似乎斷裂了?為什麼?


如果你們仔細看我上一張截圖,會感覺圖片里的劃痕有些斷裂。

這並不是計算bug,而恰恰相反是算得非常準確的結果。

我重新調節了一些參數。可以看到劃痕方向發生轉折的時候,亮度會發生連續的變化,這是完全符合預期的。這一張截的是比較符合我們人的直覺的效果。

也有一些情況,亮度會發生突變。這也是因為劃痕旋轉方嚮導致的。在這張圖中,方向向上的劃痕,亮度已經接近於1了,角度越往下轉越接近於1,直到超過某個臨界值,亮度超過1,重新變回 零點幾的亮度,看起來就非常黑,好像是斷開了一樣。

然而我們把滑鼠指在這些特別黑的區域,可以看到亮度還是有0.02左右,並不是純黑色,只是非常黑而已。

也就是說,這個節點算出來的劃痕亮度,並不是以某一根劃痕為單位的;而是能夠細分到劃痕上很小的折線上去。著實是非常厲害了。我第一次發現這個現象的時候,大腦都暴走了,這是怎麼做到的。一定是魔法吧!

丨實現原理簡單剖析


當我把劃痕的segments屬性,也就是段數,調得比較低的時候;發現每一根劃痕其實都是直線。也就是說我們看上去那些圓滑的曲線,都是由非常多的直線構成的,當你的直線數量足夠多足夠密集以後,看上去也就是曲線了。

這裡面蘊含了優秀的數學思想。

那麼這套節點就相當於是分兩個步驟來完成效果了。第一步,先用很多小直線連成一條劃痕;第二步,對劃痕最大量散布。

我花了很多時間研究並且復現了官方節點的玩法。實際上邏輯就是下面圖裡表述的。本質是兩個for循環。一個for循環讓很多短線形成單一划痕,另一個for循環再重複這些已經做好的單一划痕。

寫在最後。本來想詳細剖析一下這個節點的工作原理。在寫這篇文章的過程中發現,光講實現的操作,已經要花這麼多篇幅來講了,那麼一套原理與節點剖析下來,篇幅會相當相當可怕,而且關心這些知識的人真的非常少。感覺很不划算。就不弄啦。


推薦閱讀:
相关文章