第二十一期【ASE練習(xí)】子函數(shù)與重映射筆記
前言
比如我們經(jīng)常會(huì)用到溶解這個(gè)算法,但是我們需要在每一個(gè)shader里都必須在連一變嗎?那很無(wú)聊,所以子函數(shù)這個(gè)東西就出現(xiàn)了,它可以再一個(gè)預(yù)設(shè)里提前準(zhǔn)備好,

它可以在任何shader里進(jìn)行調(diào)用,就相當(dāng)于你寫的方程式,提前丟在這,用到這個(gè)方程式就讓它過(guò)來(lái),

軟溶解的方程式
就相當(dāng)于我們提交制作好子函數(shù),然后隨便在這里用用就可以了,
子函數(shù)如何制作


以后我們可以把我們做的功能,以功能形式劃分,都做成子函數(shù),這樣的話我們就可以不用在每一個(gè)shader里重新制作一遍了,

先做一個(gè)軟溶解

輸出它的RGB的顏色著色通道,

noise圖

加1

在加一個(gè)0-1

乘以一個(gè)-2
以上就是溶解過(guò)程

有的圖它黑的地方可能是0,白的地方可能是1,1和1比大小的時(shí)候,可能會(huì)差一點(diǎn)溶解不掉,或者說(shuō)我們的軟邊或我們的光邊,會(huì)差一點(diǎn)溶解不掉,所以這里用一下重映射,


這里有四個(gè)輸入,老的最小值,老的最大值,新的最小值,新的最大值,

我們把老的0到1的區(qū)間,映射到1到0.5區(qū)間,

這樣的話就沒(méi)有溶解不掉的問(wèn)題,這個(gè)溶解進(jìn)程就是0-1表達(dá)式明確的,假如是0到1.05是溶解進(jìn)程的話,那就是表達(dá)不明確,為什么是1.05,1.05是干嘛的,我們要向準(zhǔn)確的表達(dá)溶解進(jìn)程,我們這可以做一個(gè)重映射,讓它更好理解,
因?yàn)橐刂栖浻策?,我們需要一個(gè)光滑階梯函數(shù)


光滑階梯函數(shù)輸入之后,我們需要一個(gè)數(shù)值,設(shè)置為0.51到1之間,軟硬度的控制,


當(dāng)溶解進(jìn)程為0.5的時(shí)候

位置為0.51的時(shí)候,它是硬邊的,1的時(shí)候是軟邊的
在外面公開(kāi)出來(lái)的時(shí)候,0.51是硬邊的,1是軟邊的,表達(dá)不明確,用重映射
找一個(gè)數(shù)值作為他的重映射
把這個(gè)區(qū)間設(shè)置成0-1區(qū)間,0的時(shí)候是硬邊,1的時(shí)候是軟邊,我們現(xiàn)在這個(gè)0-1的老區(qū)間就要映射到0.51到1的區(qū)間,這樣我們就可以說(shuō)0的時(shí)候是硬邊,1的時(shí)候是軟邊,就不會(huì)像剛才說(shuō)的0.51是硬邊,1是軟邊,它這個(gè)表達(dá)就不是很清楚,
溶解的這張作為A通道乘上主紋理,快捷鍵V
使用組合通道RGB一連
透明通道一連,我們就得到軟溶解的效果,最后輸出
我們是把它連完了,我們作為它的子函數(shù)我們不能就此停手,繼續(xù)
這張圖我們要在節(jié)點(diǎn)里面獲取它的輸入端,我們要給它指令,要給它賦,
這個(gè)是我們作為子節(jié)點(diǎn)要調(diào)整它的地方,
輸入端的名字,為什么要先給大家連著看,因?yàn)橹苯舆@么連啥都看不見(jiàn),先核算計(jì)算有沒(méi)有問(wèn)題,
noise也需要?jiǎng)討B(tài)的輸入,連不上的原因是,左邊變量類型是Float,右邊的是Tex,所以不一樣連不上,
變量類型改為2D紋理,
這樣就可以連上了,
這些可以調(diào)整在子函數(shù)的順序,



搜我們的子函數(shù),
子函數(shù)的input對(duì)應(yīng)的是這里面的

子函數(shù)順序變了,它這個(gè)順序也就變了

它也未必輸出是Color

它也可以是其他類型,連上啥就是啥,


是這個(gè)紋理對(duì)象,




