Hello . 大家好!今天帶來的是美術向的Unity Shader視差遮蔽映射與局部差異導數函數小教學,我是麥田。
一、視差映射
什麼是視差映射?即視差貼圖。遊戲/影視中使用的一種改進法線貼圖技術。也可以理解為高度圖。
舉個不恰當的例子,一隻鴿子以為自己是一隻老鷹在天上飛的很高。往下看,下麵群山溝壑。受製於我們手機性能的影響,我們就要想辦法去解決這種問題。又或者我需要表達高度的地方,通過曲麵細分或者置換出麵的話,實在太貴了。
這時我們就可以根據實際情況來選擇這方麵的優化方式。視差,其實就是通過切線空間中的視角(相對於法線的角度)和該點處的高度圖的值的函數,來渲染多邊形上某個點的紋理坐標來實現的。
在較陡的視角下,紋理坐標的位移更大,由於視線變化而產生的視差效應給人眼造成了深度錯覺。
二、”上才藝“
1、打開Unity,我用的版本是2019.3.6,安裝好Amplify Shader Editor;
2、版本選擇1.8,最新版本的確實舒服,最重要的是老版本在視差映射方麵MAC上有BUG;
3、然後我們在場景內創建一個平麵 ;
4、Ctrl+Shift+F,選中Cramea,快速切換攝像機角度朝地45度;
5、創建一個Shader文件;
6、準備好一套圖,Base,Normal,AO,Height等等。
OK,正文開始,可以看一下這裏的設置,前向渲染,層級2000。

首先,我們創建一個Texture Object和UV,注意一下,是Object,不是Sample Texture,然後將Height貼圖給它,UV需要指認為獲取Height。(下圖)



獲取一個View Dir(視口方向),設置到切線空間。
這裏補充一下,圖表封裝的還是非常好的,View Dir在代碼裏都是要手擼的。View Dir的原理圖長這樣。

View Dir原理圖

創建一個核心節點視差遮擋映射,圖表已經給你封裝好了,就是這個,讓你免去計算的痛苦。

其基本原理即為獲取到Height貼圖的數據(0-1),進行V方向偏移,記錄獲取到的數據進行步進采樣。
具體算法請參見網易大佬的知乎兩篇譯文,裏麵有詳細的計算方式和實現原理。
創建以下內容,將獲取到的高度UV給到視差遮擋映射。並且創建一個Range,最大值給1,暴露到材質麵板。

三、”上才藝x2“
創建DDX與DDY這兩個函數

DDX&DDY節點輸出相對於屏幕空間xy坐標的指定輸入值的偏導數。
這又是什麼玩意?
簡單的說就是三角麵上一個像素的位置上對屏幕坐標x和y方向的導數,也就是該點位置的表麵相對於屏幕平麵的傾斜程度的度量。
具體解釋鏈接:http://www.aclockworkberry.com/shader-derivative-functions/
鏈接中解釋的是GLSL中的用法,兩者其實是一樣的,這裏的dFdX即為DDX,同理dFdy即為DDY。
看到下圖我們能理解,DDX與DDY的計算方式了,GPU光柵的時候,會將他們變成2×2像素的塊。通過獲取塊中像素值之間的差異來計算出導數,即為右邊減去左邊,底下減去上麵。所以,導數是逐像素計算的。

那麼應用場景在哪裏?Unity3D引擎中的MipMap就是這樣計算而來。

介紹完了核心的視差遮蔽映射與局部差異導數函數,下麵我們就來繼續完善我們想做的東西吧!

創建四個TexSample,將MipMode改為Derivative,再創建一個Range(快捷鍵1),暴露出DDX與DDY後,將DDX&DDY給到與其對應的數值。

最後我們將自定義後的UV傳遞給TexSample,以下為總節點圖:

最後我們來Game視圖看一下效果。

1.隻有法線無視差的效果
2.擁有了視差
我們看到,類似一個置換的效果,但是邊緣有拉伸鋸齒感(和高度圖有關)。

3.擁有了DDX&DDY
攝像機拉遠一點之後,就會計算局部差異導數函數,此時鋸齒感消失。

歸根結底,他還是一個Plane,並沒有改變平麵模型,但是是造成了視覺假象。
來源:Thepoly
熱門課程
專業講師指導 快速擺脫技能困惑相關文章
多種教程 總有一個適合自己專業問題谘詢
你擔心的問題,火星幫你解答《黑神話:悟空》作為一款現象級中國遊戲,其成功離不開多種先進計算機技術的支持。本文將深入解析該遊戲背後的關鍵技術,包括虛幻引擎......
在遊戲開發領域,Unity和Unreal Engine(虛幻引擎)都是備受推崇的遊戲引擎,但它們各自擁有不同的特點和優勢。
春節之後大量搶人!這6個行業是轉行首選,進去1年頂3年!火星畢業就能進
春節後求職,哪些行業進去能立馬漲薪?打破信息差很關鍵!
還沒畢業,就去幫電視台拍活動,作品被主任說“非常好”!猜猜是哪個專業呀?
回想過去,電子遊戲裏的草其實並不是真正的草。開發者們隻是簡單地把草的紋理直接貼在遊戲關卡的地板上
在火星的就業指導老師那裏,經常收到同學們這樣、那樣的提問。其中有一些共性問題,就業老師會根據自己豐富的經驗,為同學們給出合適的回答。