Unity3D內建Shader翻譯一

2021-06-21 01:25:49 字數 2438 閱讀 1037

unity3d內建了很多shader,文件很詳細,自己翻一下.便於加深印象.

首先先解釋下unity3d的shader.unity裡面的shaders是使用一種叫shaderlab的語言編寫的,它同微軟 的.fx檔案或者nvidia的cgfx有些類似。傳統意義上的vertex shader和pixel shader 還是使用標準的cg/hlsl 程式語言編寫的。(因此unity文件裡面的shader,都是指用shaderlab編寫的**)

然後我們來看下unity3d自帶的60多個shader。 這些shader被分為五個大類:normal,transparent,transparent cutout,self-llluminated,reflective。由於數量比較多,將分幾個篇幅一一介紹。

(一) normal shader family

這個家族一共9個shader,都是針對不透明的物件的。

(2) diffuse:

diffuse基於乙個簡單的光照模型-lambertian,光照強度隨著物體表面和光入射角夾角的減小而減小(即光垂直於表面時強 度最大)。光照的強度只和該角度有關係,和攝像機無關。由於這是乙個基於畫素光照的shader,因此他有這類shader的優勢,同時他需要裝置支援可 程式設計管線,如果裝置不支援,則自動使用vertex-lit這個shader。

總的來說,這個shader渲染代價比較小。

(3) specular

specular 使用和diffuse相同的光照模型,但是新增了乙個和觀察角度相關的反射高光。這個被稱為blinn-phong光照模型。他包含了乙個反射強光,這個 反射高光物體表面角度,光的入射角度以及觀察者角度都有關係。這種高光計算方法實際上是對實時光源模糊反射的一種具有可行性的模擬。模糊的等級通過 inspector裡面shininess這個變數控制。

主紋理的alpha通道被用來當作specular map來使用(有時候也稱gloss map),它定義了物體的反光率。紋理中alpha裡面全黑 的部分將完全不反光(即反光率為0%)。而全白的的部分反光率為100%。這個map在你的物體在不同的部分有不同的反光率的時候非常有用。比如說,鏽跡 斑斑的金屬會反光率低,而磨光的金屬反光率比較高。口紅的反光率比**高,而**的反光率比棉質衣服高。乙個精心製作的specular map將會讓玩家身臨其境。如果目標裝置不支援可程式設計管線,則自動使用vertex-lit這個shader。

這個shader的渲染代價會比較大。

如果呼叫這個shader失敗,則會呼叫diffuse這個shader,一般而言,該shader渲染代價低。

(5) bumped specular

和specular一樣的光照模型,相比specular而言,它使用一張tangent space normal map來描述物體表面法向量的變化,來增加物體細節。(關於normal map具體見bumpped diffuse)如果呼叫失敗,則使用specular這個shader,一般而言,這個shader的渲染代價會比較大。

(7) parallax specular

與bumped spcular相比,增加了一張height map來描述深度細節。關於height map,見parallax diffuse。如果呼叫失敗,則呼叫bumped specular這個shader。

(8) decal

這個shader在unity文件裡面的描述和unity3.0有明顯的實現區別,文件由於比較老,07年寫的,官網下的 built-in shader裡面,decal是使用可程式設計管線實現的,就是說,如果你的機器不支援可程式設計管線,會使用diffuse,因為diffuse也不需要可程式設計 管線,所以只能使用vertex-lit。這個shader除了主紋理之外,這個shader還是用了第二張紋理用來描述細節。第二張用來decal(貼 花)的紋理使用alpha通道來確定是否覆蓋主紋理。貼花用的紋理只是對主紋理的補充。比如說你有乙個磚砌的牆壁,你可以使用乙個磚塊的紋理作為主紋理, 然後使用帶有alpha通道的decal紋理在牆壁的不同地方塗鴉。

(9) diffuse detail

這是乙個普通的diffuse shader加上一些額外資料的shader。它允許你定義第二張紋理,稱為detail texture。當camera靠近的時候,detail texture逐漸顯示出來,一般用於地形。比如說,當你使用一張低解析度的紋理拉公升到整個地形上的時候。隨著camera逐漸拉近,低解析度的紋理開始 模糊,這不是我們想要的效果。為了避免這個效果,建立一張detail 紋理會將地形tile化。在這種模式下,隨著camera逐漸拉近,額外的細節將會出現以避免出現模糊的效果。

detail 紋理是覆蓋在主紋理上面的。detail紋理中深色的部分將會使得主紋理變深,而淡色的部分將會使主紋理變亮,detail紋理通常是淺灰色。(與 decal裡面decal紋理不同的是,decal紋理是rgba,通過alpha控制decal texture與main texture的融合,而detail的紋理是rgb,直接是兩張紋理的rgb通道分別相乘再*2,就是說,detail紋理中顏色數值 = 0.5不會改變主紋理顏色,>0.5會變亮,<0.5加深)

Unity3D內建Shader翻譯三

上次講的是transparent shader family,他們是繪製半透明的物件使用的,但他們並不能滿足我們全部的要求。transparent cutout shader family是對半透明物件shader的一類補充,與transparent shader family有所區別的是 cuto...

unity 3D模型流光Shader

今天分享下unity中3d模型的一些shader。先來個最簡單的,就是上下滾動的純色流光。通過調整 centerrange來實現上下滾動。o.objz v.vertex.x 這裡使用模型的模型座標系模型被旋轉過所以這裡用的是x軸,同學如果想用得改下哈。flag saturate flag flag被...

Unity3D中的shader高階

unity3d shader 基礎知識 unity3d shader 官方教程翻譯 1.unity中配備了強大的陰影和材料的語言工具稱為shaderlab,以程式語言來看,它類似於cgfx和direct3d的效果框架語法,它描述了材質所必須要的一切諮詢,而不僅僅侷限於平面頂點 畫素著色。2.在uni...