Unity 手把手教你實(shí)現(xiàn)有向距離場(SDF)圖像生成工具(1)【猴子都能學(xué)會(huì)】
????本文將采用Dead Reckoning算法實(shí)現(xiàn)一個(gè)有向距離場的生成工具,并實(shí)現(xiàn)一個(gè)如下的簡單變形效果,當(dāng)然對(duì)于SDF應(yīng)用遠(yuǎn)不止于此,諸如原神的臉部陰影之類的,這個(gè)網(wǎng)上很多就不在這里詳細(xì)講了。該算法的優(yōu)勢相較于遍歷全局耗時(shí)更少,雖有一定的精度下降,但相較于近似方法消除了產(chǎn)生的棱角,畢竟對(duì)于一張1024*1024的圖要遍歷全局的時(shí)間都?jí)蛳聵琴I杯奶茶再上來了,而采用該算法可以在2秒內(nèi)計(jì)算完成。

????首先先創(chuàng)建一個(gè)ComputeShader和一個(gè)腳本



現(xiàn)在我們打開腳本
繼承EditorWindow來寫一個(gè)簡單的工具界面
????我們將工具寫在”Tools/距離場圖像生成“下面,工具窗口名字叫做"距離場貼圖生成器",窗口尺寸為200*300;
????我們的工具的目的是將一張二值位圖,轉(zhuǎn)換成一張SDF圖,所以我們需要傳入的只有一張Texture2D,那現(xiàn)在我們就聲明一張public的Texture2D,并讓他在窗口中被繪制出來。


????接下來我們創(chuàng)建一個(gè)名叫ComputeSDF的函數(shù)來執(zhí)行SDF(有向距離場)的計(jì)算,并在OnGUI中去調(diào)用
????完成上面操作后讓我們來再次打開工具看看

????是不是多了個(gè)按鈕, 但我們能發(fā)現(xiàn)按了這個(gè)按鈕并沒有什么用,因?yàn)榈竭@里我們才寫完了工具界面,我們會(huì)在后面來實(shí)現(xiàn)計(jì)算SDF的功能。