寫材質跟寫程式非常不同,因為他們是不同的機制。
一般情況下,程式**是順序執行的,有跳轉有迴圈。
但是材質不一樣。
材質是對每個畫素(有時是每個頂點)並行運算的。
乙個物體表面有多少畫素,這個材質就會被同時執行多少遍。
材質裡面沒有迴圈。如果材質裡加上迴圈,可能直接把顯示卡給燒掉了(哈哈,這裡不嚴謹了~)。
因為每個畫素都要執行一遍,假設材質裡有迴圈,每個迴圈的次數是100(好像並不太多),那麼要執行的指令數是沒有迴圈時的100倍(這裡又不太嚴謹了。。)!
材質中確實可以放bool型別的引數,但是這個引數是static的。含義就是只能在編輯期修改,執行期不能修改。
還有switch,也是static的。
這是官方文件:
簡單來說,編譯shader需要對每乙個分支進行編譯,如果執行期允許修改,那可能會導致需要編譯的shader太多,出現shader大**。
如果你使用過staticboolparameter,那你可能會注意到,每次修改這個型別的變數,都會導致重新編譯。
理解這些,對你寫材質有幫助。
本文首發於翰者學堂
UE4材質中的SphereMask
spheremask是個神奇的東東。看名字就知道大概什麼意思,球形遮罩。從演示中可以看出,當鏡頭距離越來越近時,材質開始發光。鏡頭邊遠時,材質發光變弱,直到完全不發光。spheremask有四個輸入引數。a 待檢查的位置。b 圓心的位置。radius 半徑。hardness 硬度,0是完整過渡,10...
UE4材質中的Sin函式
根據中學所學知識,sin 0 0,sin 0,sin 2 1,sin 3 2 1,等等。sin函式的週期為2 取值範圍為 1 1。ue4材質中的sin函式,其取值範圍也是 1 1,但是不同的是,其週期為1。官方並沒有說明為何這樣設計,原因可能是為了方便在材質中進行運算。材質中顏色的取值範圍也是0 1...
青春是什麼樣的味道?
青春是怎樣的乙個經歷?青春在我們的心裡又留下了怎樣的感覺?青春是酸的 是甜的 更是苦的。那你的青春你是怎樣的味道?不知何時我們的已經忘記了自己的目標,作為一名今年就畢業的大學生的我。我們的青春裡面充滿了酸甜也有苦。在上大學的期間,我們常常會因為自己的高考的不如意而進入這樣的一所大學而怨天尤人,每天都...