你們好,我是怒風,本篇介紹公式可視化公式工具ZGrapher,嘗試經過可視化的方式分析一下Shader中應用的公式,以求幫助初學者快速理解Shader編程中的一些經常使用公式編程
本篇的目的兩個,編輯器
第一,介紹可視化公式工具ZGrapher,函數
第二,探討下在學習中的交流和分享的重要性.工具
物體邊緣外發光的特效,是Shader學習入門的一個很好的例子,下面咱們經過來ZGrapher來幫咱們很好理解這個特效的原理,學習
half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal)); spa
o.Emission= _RimColor.rgb * pow (rim, _RimWidth);.net
簡化成公式就是 pow(1-max(0,dot(viewDir,normal)),_RimPower)*RimScaleorm
這個公式,最基礎的原理就是向量的點積,咱們知道兩個歸一化向量的點積等於夾角的餘玄值。而餘弦值在0到90°範圍內,又與角度的大小成反比,下面咱們來看一下如何分析這個公式blog
A、忘記了Cos函數是什麼的同窗能夠複習一下,其中0-90度 角度越大值越小,成反比開發
視線所看到的物體邊緣是「視線與頂點法向量的夾角越大越趨於邊緣」,因爲咱們的餘弦值向量之間夾角反比,其實很難理解。
(該圖來自https://blog.csdn.net/puppet_master/article/details/53548134 puppet_master)
爲了使咱們更容易理解,咱們但願獲得 值與夾角成正比關係,爲此咱們經過1-cos來實現。咱們在公式裏看看是否是成了正比
爲了使咱們的邊緣過渡更加明顯,咱們對rim係數作指數變換使得曲線值更加陡峭
最後,咱們在乘以一個倍數。使咱們的邊緣更加明顯,這樣咱們就完成了邊緣外發光的效果的分析
經過這個例子咱們經過公式編輯器來可視化 分析 Shader中的數學公式,幫助咱們理解其中正真的原理是什麼
至此咱們經過 工具幫咱們分析了這個外發光的公式,可是咱們真正掌握和理解了嗎?
愛因斯坦說過一句話 「若是你不能用最簡單的語言來描述,那你就是沒有真正領悟」
話雖這麼說可是從理解到不理解,探索本質是一個不斷求索的過程,沒有人可以一步到位找到捷徑,除非說你是天才。好比說關於向量點積的應用,把咱們剛纔所說的重點歸一化向量夾角的餘玄值,把這種數學語言落實到咱們的程序開發中,變成一種通俗易懂的語言,又是什麼呢?其實就是比較兩個單位向量的類似度,也就是兩個向量的夾角越小,價值越大,經過這一句「兩個向量的類似度」,替代了之前咱們須要兩個數學概念的語義。這樣咱們就很容易理解,物體外發光效果,原理是由於視線與頂點法向量的類似度越小,越小視線所看到的物體的越是邊緣,一樣的道理是視線與頂點法向量的類似度越大,說明該頂點,越處於咱們眼睛的正前方,也就是正對着咱們的頂點。那麼若是咱們想要作物體的積雪效果,那麼積雪的頂點的法向量必定是與下雪方向的向量的類似度越高。
那麼爲何咱們剛開始學習這個點積的時候,沒有找到關於歸一化向量的類似度的概念呢?緣由在於咱們的交流和分享還不夠,好比遇到了一個問題,若是你們可以積極的討論分享,評論留言,也許問題會有更好答案和解決的方法,僅此而已。