![Unity3D內(nèi)部Shader詳解_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/5/841971ac-73c1-4b19-b254-7e25d0544796/841971ac-73c1-4b19-b254-7e25d05447961.gif)
![Unity3D內(nèi)部Shader詳解_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/5/841971ac-73c1-4b19-b254-7e25d0544796/841971ac-73c1-4b19-b254-7e25d05447962.gif)
![Unity3D內(nèi)部Shader詳解_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/5/841971ac-73c1-4b19-b254-7e25d0544796/841971ac-73c1-4b19-b254-7e25d05447963.gif)
![Unity3D內(nèi)部Shader詳解_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/5/841971ac-73c1-4b19-b254-7e25d0544796/841971ac-73c1-4b19-b254-7e25d05447964.gif)
![Unity3D內(nèi)部Shader詳解_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/5/841971ac-73c1-4b19-b254-7e25d0544796/841971ac-73c1-4b19-b254-7e25d05447965.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、Unity3D Built-in Shader詳解一Unity3D的Shader Unity里面的Shaders是使用一種叫ShaderLab的語言編寫的,它同微軟的.FX文件或者NVIDIA的CgFX有些類似。傳統(tǒng)意義上的vertex shader和pixel shader 還是使用標準的Cg/HLSL 編程語言編寫的。(因此Unity文檔里面的Shader,都是指用ShaderLab編寫的代碼) 然后我們來看下Unity3D自帶的60多個Shader。 這些Shader被分為五個大類:Normal,Transparent,Transparent Cutout,Self-lllum
2、inated,Reflective。由于數(shù)量比較多,將分幾個篇幅一一介紹。 (一) Normal Shader Family 這個家族一共9個Shader,都是針對不透明的對象的。 (1) Vertex-Lit: 最簡單的一種Shader之一,所有照射在該物體上的光在一個Pass里面渲染完,光源只在頂點計算。所以不會有任何基于像素渲染得效果,比如說:normal mapping,light cookies和shadows.這個shader對模型的剖分(將一個物體從幾何描述變?yōu)槎噙呅伪硎镜倪^程)非常敏感,如果你將一個點光源放在很靠近一個立方體的一個頂點那里,并且對立方體使用這個sha
3、der,光源只會在角落計算?;谙袼毓庹盏膕hader對剖分沒有要求,在表現(xiàn)圓形高光上效果也很好。如果上述情況時你想要的效果,你可以考慮使用一個基于像素光照的shader或者增加模型的剖分。(增加頂點數(shù)) 總的來說,這個shader的渲染代價比較小。這個shader包含了2個subshader,分別對應可編成管線和固定管線。是所有硬件都支持的一個最基本的shader。如果設備支持可編成管線,那使用可編成管線的subshader,否則使用固定管線的。 shader-NormalVertexLit-0.jpg (35.07 KB)2011-1-5 17:52 (2) Diffuse: D
4、iffuse基于一個簡單的光照模型-Lambertian,光照強度隨著物體表面和光入射角夾角的減小而減小(即光垂直于表面時強度最大)。光照的強度只和該角度有關系,和攝像機無關。由于這是一個基于像素光照的shader,因此他有這類shader的優(yōu)勢,同時他需要設備支持可編程管線,如果設備不支持,則自動使用Vertex-Lit這個Shader。 總的來說,這個shader渲染代價比較小。 shader-NormalDiffuse-0.jpg (33.9 KB)2011-1-5 17:52 (3) Specular Specular 使用和Diffuse相同的光照模型,但是添加了一個和觀察
5、角度相關的反射高光。這個被稱為Blinn-Phong光照模型。他包含了一個反射強光,這個反射高光物體表面角度,光的入射角度以及觀察者角度都有關系。這種高光計算方法實際上是對實時光源模糊反射的一種具有可行性的模擬。模糊的等級通過inspector里面Shininess這個變量控制。 主紋理的alpha通道被用來當作Specular Map來使用(有時候也稱gloss map),它定義了物體的反光率。紋理中alpha里面全黑 的部分將完全不反光(即反光率為0%)。而全白的的部分反光率為100%。這個Map在你的物體在不同的部分有不同的反光率的時候非常有用。比如說,銹跡斑斑的金屬會反光率低,而磨光的
6、金屬反光率比較高??诩t的反光率比皮膚高,而皮膚的反光率比棉質衣服高。一個精心制作的Specular Map將會讓玩家身臨其境。如果目標設備不支持可編程管線,則自動使用Vertex-Lit這個Shader。 這個shader的渲染代價會比較大。 shader-NormalSpecular-0.jpg (37.48 KB)2011-1-5 17:52 (4)Bumped Diffuse 同Diffuse Shader一樣,這個Shader基于Lambertian光照模型,同時使用了normal mapping技術來增加物體表面細節(jié)。相對于通過增加剖分來表現(xiàn)物體表面細節(jié)的方式,normal
7、 mapping并不改變物體的形狀,而是使用一張稱為Normal Map的特殊紋理來達到這種效果。在normal map中,每個象素的顏色代表了該像素所在物體表面的法線,然后通過這個法線(而不是通過物體模型計算而來的法線)來計算光照??梢哉fNormal Map在計算光照的過程中“高效地修改”了整個模型。 如何創(chuàng)建Normal maps:你可以通過導入一張普通的灰度圖(白色表示凸起,黑色表示凹進)Unity會自動將它轉換為Normal Map。 技術細節(jié):這里使用Normal map是一種“Tangent space Normal Map”,Tangent space(正切空間)是一個跟隨模型物
8、體表面的空間。在這個空間中,z軸始終從表面指向外面。Tangent space Normal Map相對于另一種被稱為“Object space Normal Map”來說有點復雜,但是他有一些優(yōu)勢。1)可以使用在各種奇形怪狀的表面 2)便于在同一物體不同區(qū)域或者不同物體間復用 具體關于Tangent Space Normal Map和Object Space Normal Map的區(qū)別,下次再講。 如果調(diào)用這個shader失敗,則會調(diào)用Diffuse這個shader,一般而言,該shader渲染代價低。 shader-NormalBumpedDiffuse-0.jpg (38.97 KB)2
9、011-1-5 17:52(5) Bumped Specular 和Specular一樣的光照模型,相比Specular而言,它使用一張Tangent Space Normal Map來描述物體表面法向量的變化,來增加物體細節(jié)。(關于normal map具體見Bumpped Diffuse)如果調(diào)用失敗,則使用Specular這個shader,一般而言,這個shader的渲染代價會比較大。 shader-NormalBumpedSpecular-0.jpg (41.02 KB)2011-1-5 17:52(6) Parallax Diffuse Parallax Normal mapped與傳
10、統(tǒng)的normal mapped一樣,但是對“深度”的模擬更佳。額外的深度效果是通過Height Map(高度圖)來實現(xiàn)的。Height Map在Normal map的alpha通道里面保存。全黑表示么有高度,而白色表示有高度。通常這用來表現(xiàn)石頭或者磚塊間的裂縫。 Parallax mapping的技術很簡單,因此會有些人工痕跡或者不太正常的效果出現(xiàn)。尤其是,急劇陡峭的高低轉換在高度圖里面應該避免。在inspector里面調(diào)整height數(shù)值來調(diào)整高度的范圍,有時候會造成物體不真實,凌亂的情況。因此建議使用高度變化平緩的高度圖或者將高度數(shù)值設置比較低,讓表面看起來比較平緩。 這個shader的渲
11、染代價相比bumped diffuse而言更大。如果調(diào)用這個Shader失敗,則自動使用Bumped Diffuse。 shader-NormalParallaxDiffuse-0.jpg (39.5 KB)2011-1-5 17:52(7) Parallax Specular 與Bumped Spcular相比,增加了一張Height Map來描述深度細節(jié)。關于Height Map,見parallax Diffuse。如果調(diào)用失敗,則調(diào)用Bumped Specular這個Shader。shader-NormalParallaxSpecular-0.jpg (41.77 KB)2011-1-5
12、 17:52 (8) Decal 這個Shader在unity文檔里面的描述和Unity3.0有明顯的實現(xiàn)區(qū)別,文檔由于比較老,07年寫的,官網(wǎng)下的Built-in Shader里面,decal是使用可編程管線實現(xiàn)的,就是說,如果你的機器不支持可編程管線,會使用diffuse,因為diffuse也不需要可編程管線,所以只能使用vertex-lit。這個Shader除了主紋理之外,這個Shader還是用了第二張紋理用來描述細節(jié)。第二張用來Decal(貼花)的紋理使用alpha通道來確定是否覆蓋主紋理。貼花用的紋理只是對主紋理的補充。比如說你有一個磚砌的墻壁,你可以使用一個磚
13、塊的紋理作為主紋理,然后使用帶有alpha通道的Decal紋理在墻壁的不同地方涂鴉。 shader-NormalDecal-0.jpg (40.83 KB)2011-1-5 17:52(9) Diffuse Detail 這是一個普通的diffuse shader加上一些額外數(shù)據(jù)的shader。它允許你定義第二張紋理,稱為Detail Texture。當camera靠近的時候,Detail Texture逐漸顯示出來,一般用于地形。比如說,當你使用一張低分辨率的紋理拉升到整個地形上的時候。隨著camera逐漸拉近,低分辨率的紋理開始模糊,這不是我們想要的效果。為了避免這個效果,創(chuàng)建一張Deta
14、il 紋理會將地形tile化。在這種模式下,隨著camera逐漸拉近,額外的細節(jié)將會出現(xiàn)以避免出現(xiàn)模糊的效果。 Detail 紋理是覆蓋在主紋理上面的。Detail紋理中深色的部分將會使得主紋理變深,而淡色的部分將會使主紋理變亮,Detail紋理通常是淺灰色。(與Decal里面Decal紋理不同的是,Decal紋理是RGBA,通過alpha控制Decal Texture與Main Texture的融合,而Detail的紋理是RGB,直接是兩張紋理的rgb通道分別相乘再*2,就是說,Detail紋理中顏色數(shù)值 = 0.5不會改變主紋理顏色,>0.5會變亮,<0.5加深) Unity
15、Built-in Shader詳解二這次主要討論Unity自帶的Shader中Transparent Shader Family 這個家族的Shader一共7種,原理和類型與Normal中的上差不多,只不過這些Shader是用在半透明或者全透明的物體上面的。他們的主紋理接受RGBA4個通道。如果你的模型一部分是半透明,一部分是不透明的。請分開使用兩張材質,半透明的材質這個家族的Shader。這個家族的Shader的內(nèi)容和Normal中同名的幾乎一樣,只是添加了半透明效果,因此不再做重復介紹。
16、 通過讀取紋理中的alpha值,這個Transparent家族的shader可以讓模型變成半透明或者全透明的。在alpha中,0表示全透明,255表示全白。如果你的主紋理不包含alpha通道,那么這個物體將會變成不透明的。 在游戲中使用半透明的物體是比較有技巧性的,因為他們經(jīng)常會導致排序問題。比如說,如果你透過兩個窗口觀察物體,發(fā)覺物體很異樣,恭喜你,你正在經(jīng)歷著每個人都會遇到的使用半透明對象的問題。一條具有普遍性的規(guī)則是:有些時候一個半透明的對象會很詭異的繪制在另外一些對象前面,尤其當這些對象是互相交叉的,或者一個把另一個包圍的抑或是。為此
17、,當你需要半透明對象的時候,你應該使用它們,但是不要太過于依賴半透明對象(考慮到性能問題)。你也應該讓你的設計者們了解到排序可能會出現(xiàn)問題,讓他們做好為此調(diào)整的準備。(1)Vertex-Lit 這個家族中最簡單的Shader,同樣有固定管線和可編程管線兩個SubShader,適用于所有的硬件。所有的光只在頂點計算。除了支持半透明,其他特性和Normal里面的Vertex-Lit一致。 shader-TransVertexLit-01.jpg (30.51
18、KB)2011-1-6 08:33 (2)Transparent Diffuse 同Normal中的Diffuse,支持了alpha。 shader-TransDiffuse-02.jpg (29.46 KB)2011-1-6 08:33
19、(3)Transparent Specular 同Normal Specular,支持了半透明 shader-TransSpecular-03.jpg (30.4 KB)2011-1-6 08:33 (4) Transparent Bumped Diffuse 同Normal中的Bump
20、ed Diffuse shader-TransBumpedDiffuse-04.jpg (33.31 KB)2011-1-6 08:33 (5) Transparent Bumped Specular 同Normal里面的Bumped Specular,支持半透明 shader
21、-TransBumpedSpecular-05.jpg (34.91 KB)2011-1-6 08:33 (6)Transparent parallax Diffuse 同Normal parallax Diffuse,支持半透明 shader-TransParallaxDiffuse-06.jpg (36.25 KB)2011-1-6 08:33 &
22、#160; (7) Transparent Parallax Specular 同Normal Parallax Specular,支持半透明。 shader-TransParallaxSpecular-07.jpg (36.25 KB)2011-1-6 08:33Unity Built-in Shader詳解三上次講的是Transparent Shader Family,他們是繪制半透明
23、的對象使用的,但他們并不能滿足我們?nèi)康囊蟆?#160; Transparent Cutout Shader Family是對半透明對象Shader的一類補充,與Transparent Shader Family有所區(qū)別的是:Cutout Shader Faimily中的Shaders不允許繪制部分透明的區(qū)域。就是說,使用這種Shader繪制出來的對象,要么是全透明,要么是半透明。使用這個家族Shader的對象通常用來轉換和接受陰影。半透明對象中常有的排序問題在使用這類Shader的時候不存在。 這個家
24、族里面的所有Shader都定義了一個Alpha Cutout的數(shù)值,紋理中alpha大于Alpha Cutout數(shù)值的,被認為是不透明的,否則就是全透明的。通過這個alpha cutoff數(shù)值,我們可以控制哪些區(qū)域全透明,哪些區(qū)域不透明。(也可以用來做一些動畫的控制,你懂的) 這個家族只包含了6個Shader,分別是 (1) Transparent Cutout Vertex-Lit shader-TransCutVertexLit-01.jpg (33.02 KB)2011-1-6 08:39 (2)Transparent Cutout Diffuse shader-TransCutDiffuse-02.jpg (32.03
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 五年級下冊聽評課記錄表
- 魯教版地理七年級下冊7.1《自然特征與農(nóng)業(yè)》聽課評課記錄
- 生態(tài)修復資源共享合同(2篇)
- 甲乙方協(xié)議書(2篇)
- 2025年硫酸黏菌素類產(chǎn)品合作協(xié)議書
- 七年級數(shù)學上冊第29課時和、差、倍、分問題聽評課記錄新湘教版
- 新版華東師大版八年級數(shù)學下冊《17.3.2一次函數(shù)的圖象1》聽評課記錄21
- 統(tǒng)編版初中語文八年級下冊第五課《大自然的語言》聽評課記錄
- 七年級(人教版)集體備課聽評課記錄:1.2.1《有理數(shù)》
- 人教部編版歷史七年級下冊第15課 《明朝對外的關系》 聽課評課記錄10
- 2024變電站無人機巡檢系統(tǒng)規(guī)范第1部分:技術規(guī)范
- 機動車商業(yè)保險條款(2020版)
- 《大小比較》(說課課件)二年級下冊數(shù)學西師大版
- 張五常子女和婚姻合約中的產(chǎn)權執(zhí)行問題
- 口腔粘膜常見疾病
- 校園安全派出所
- 餐廳值班管理培訓
- XXXX無線維護崗位認證教材故障處理思路及案例分析
- 酒店春節(jié)營銷方案
- 營銷管理方案中的定價策略與盈利模式
- 2024年西寧城市職業(yè)技術學院高職單招(英語/數(shù)學/語文)筆試歷年參考題庫含答案解析
評論
0/150
提交評論