Unity引擎制作海面效果
??大家好,我是阿趙。
??繼續做海面效果,上次做完了漫反射顏色和水波動畫,這次來做法線和高光效果。
一、 高光的計算
??之前介紹過高光的光照模型做法,比較常用的是Blinn-Phong
??所以我這里也稍微連線實現了一下
??為了能看得更清楚高光的效果,我把漫反射顏色去掉,單獨看高光的部分:
??需要說明的是,現在這個效果,是配合著天空盒里面的太陽位置,還有我在場景里面的直射燈的角度,得到的一個好像太陽光在水面的光線反射效果,實際上只是對位置造成的效果,并不是真的寫個Shader就有這么理想的效果的。
??高光的光照模型很簡單,有幾個參數是控制高光顏色、高光的強度和范圍的。
??如果把漫反射顏色加上去,就會變成這樣:
??從性能上來說,如果做到現在這里就停手,其實效果也不錯,而且并沒有太多消耗性能的地方。可以作為一個簡化版的水面效果吧。
??接下來要開始添加法線的計算,后面還會添加各種深度效果。其實這些效果都是比較消耗性能的,我全部列舉出來其實只是為了說明技術點,所以可以根據自己的需要,一點一點的添加。
二、 法線貼圖采樣
??我這里的這些圖,都是在Unity的AssetStore里面下載的免費水的資源。效果其實并不是特別的好,不過用來學習也足夠了。
??這里用到了法線貼圖。其實沒什么特別的難點,由于之前做漫反射水波紋的時候,已經計算好了2個會動的UV坐標來采樣水波貼圖,所以現在同樣利用這兩個UV,來采樣法線貼圖:
??需要注意的是,由于是法線貼圖,所以要勾選Unpack Normal Map。
??勾選了之后,就可以設置參數調節法線貼圖的縮放,也就是凹凸程度了。
??接下來,把法線貼圖采樣得到的法線,輸入到之前計算高光模型的世界法線:
??把漫反射顏色去掉,單純看高光,現在的高光會變成這樣:
??由于UV是和波紋動畫一樣的,所以這個高光也會動起來。
??加上了漫反射顏色之后,水波紋和法線是同樣的UV采樣,所以完全是對得上的