Shader 學習工具篇 可視化公式工具ZGrapher


    大家好,我是怒風,本篇介紹公式可視化公式工具ZGrapher,嘗試通過可視化的方式分析一下Shader中應用的公式,以求幫助初學者快速理解Shader編程中的一些常用公式

本篇的目的兩個,

第一,介紹可視化公式工具ZGrapher,

第二,探討下在學習中的交流和分享的重要性.

物體邊緣外發光的特效,是Shader學習入門的一個很好的例子,下面我們通過來ZGrapher來幫我們很好理解這個特效的原理,

half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));  

o.Emission= _RimColor.rgb * pow (rim, _RimWidth);

簡化成公式就是  pow(1-max(0,dot(viewDir,normal)),_RimPower)*RimScale

這個公式,最基礎的原理就是向量的點積,我們知道兩個歸一化向量的點積等於夾角的余玄值。而余弦值在0到90°范圍內,又與角度的大小成反比,下面我們來看一下如何分析這個公式

A、忘記了Cos函數是什么的同學可以復習一下,其中0-90度 角度越大值越小,成反比

1

 

image

視線所看到的物體邊緣是“視線與頂點法向量的夾角越大越趨於邊緣”,由於我們的余弦值向量之間夾角反比,其實很難理解。

x

(該圖來自https://blog.csdn.net/puppet_master/article/details/53548134 puppet_master)

為了使我們更容易理解,我們希望得到 值與夾角成正比關系,為此我們通過1-cos來實現。我們在公式里看看是不是成了正比

2

為了使我們的邊緣過渡更加明顯,我們對rim系數做指數變換使得曲線值更加陡峭

3

 

4

最后,我們在乘以一個倍數。使我們的邊緣更加明顯,這樣我們就完成了邊緣外發光的效果的分析

5

通過這個例子我們通過公式編輯器來可視化 分析 Shader中的數學公式,幫助我們理解其中正真的原理是什么

至此我們通過 工具幫我們分析了這個外發光的公式,但是我們真正掌握和理解了嗎?

愛因斯坦說過一句話 “如果你不能用最簡單的語言來描述,那你就是沒有真正領悟”

    話雖這么說但是從理解到不理解,探索本質是一個不斷求索的過程,沒有人能夠一步到位找到捷徑,除非說你是天才。比如說關於向量點積的應用,把我們剛才所說的重點歸一化向量夾角的余玄值,把這種數學語言落實到我們的程序開發中,變成一種通俗易懂的語言,又是什么呢?其實就是比較兩個單位向量的相似度,也就是兩個向量的夾角越小,價值越大,通過這一句“兩個向量的相似度”,替代了以前我們需要兩個數學概念的語義。這樣我們就很容易理解,物體外發光效果,原理是因為視線與頂點法向量的相似度越小,越小視線所看到的物體的越是邊緣,同樣的道理是視線與頂點法向量的相似度越大,說明該頂點,越處於我們眼睛的正前方,也就是正對着我們的頂點。那么如果我們想要做物體的積雪效果,那么積雪的頂點的法向量一定是與下雪方向的向量的相似度越高。

      那么為什么我們剛開始學習這個點積的時候,沒有找到關於歸一化向量的相似度的概念呢?原因在於我們的交流和分享還不夠,比如遇到了一個問題,如果大家能夠積極的討論分享,評論留言,也許問題會有更好答案和解決的方法,僅此而已。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM