




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Unity3D Built-in Shader詳解一Unity3D的Shader Unity里面的Shaders是使用一種叫ShaderLab的語(yǔ)言編寫的,它同微軟的.FX文件或者NVIDIA的CgFX有些類似。傳統(tǒng)意義上的vertex shader和pixel shader 還是使用標(biāo)準(zhǔn)的Cg/HLSL 編程語(yǔ)言編寫的。(因此Unity文檔里面的Shader,都是指用ShaderLab編寫的代碼) 然后我們來(lái)看下Unity3D自帶的60多個(gè)Shader。 這些Shader被分為五個(gè)大類:Normal,Transparent,Transparent Cutout,Self-lllum
2、inated,Reflective。由于數(shù)量比較多,將分幾個(gè)篇幅一一介紹。 (一) Normal Shader Family 這個(gè)家族一共9個(gè)Shader,都是針對(duì)不透明的對(duì)象的。 (1) Vertex-Lit: 最簡(jiǎn)單的一種Shader之一,所有照射在該物體上的光在一個(gè)Pass里面渲染完,光源只在頂點(diǎn)計(jì)算。所以不會(huì)有任何基于像素渲染得效果,比如說(shuō):normal mapping,light cookies和shadows.這個(gè)shader對(duì)模型的剖分(將一個(gè)物體從幾何描述變?yōu)槎噙呅伪硎镜倪^程)非常敏感,如果你將一個(gè)點(diǎn)光源放在很靠近一個(gè)立方體的一個(gè)頂點(diǎn)那里,并且對(duì)立方體使用這個(gè)sha
3、der,光源只會(huì)在角落計(jì)算?;谙袼毓庹盏膕hader對(duì)剖分沒有要求,在表現(xiàn)圓形高光上效果也很好。如果上述情況時(shí)你想要的效果,你可以考慮使用一個(gè)基于像素光照的shader或者增加模型的剖分。(增加頂點(diǎn)數(shù)) 總的來(lái)說(shuō),這個(gè)shader的渲染代價(jià)比較小。這個(gè)shader包含了2個(gè)subshader,分別對(duì)應(yīng)可編成管線和固定管線。是所有硬件都支持的一個(gè)最基本的shader。如果設(shè)備支持可編成管線,那使用可編成管線的subshader,否則使用固定管線的。 shader-NormalVertexLit-0.jpg (35.07 KB)2011-1-5 17:52 (2) Diffuse: D
4、iffuse基于一個(gè)簡(jiǎn)單的光照模型-Lambertian,光照強(qiáng)度隨著物體表面和光入射角夾角的減小而減小(即光垂直于表面時(shí)強(qiáng)度最大)。光照的強(qiáng)度只和該角度有關(guān)系,和攝像機(jī)無(wú)關(guān)。由于這是一個(gè)基于像素光照的shader,因此他有這類shader的優(yōu)勢(shì),同時(shí)他需要設(shè)備支持可編程管線,如果設(shè)備不支持,則自動(dòng)使用Vertex-Lit這個(gè)Shader。 總的來(lái)說(shuō),這個(gè)shader渲染代價(jià)比較小。 shader-NormalDiffuse-0.jpg (33.9 KB)2011-1-5 17:52 (3) Specular Specular 使用和Diffuse相同的光照模型,但是添加了一個(gè)和觀察
5、角度相關(guān)的反射高光。這個(gè)被稱為Blinn-Phong光照模型。他包含了一個(gè)反射強(qiáng)光,這個(gè)反射高光物體表面角度,光的入射角度以及觀察者角度都有關(guān)系。這種高光計(jì)算方法實(shí)際上是對(duì)實(shí)時(shí)光源模糊反射的一種具有可行性的模擬。模糊的等級(jí)通過inspector里面Shininess這個(gè)變量控制。 主紋理的alpha通道被用來(lái)當(dāng)作Specular Map來(lái)使用(有時(shí)候也稱gloss map),它定義了物體的反光率。紋理中alpha里面全黑 的部分將完全不反光(即反光率為0%)。而全白的的部分反光率為100%。這個(gè)Map在你的物體在不同的部分有不同的反光率的時(shí)候非常有用。比如說(shuō),銹跡斑斑的金屬會(huì)反光率低,而磨光的
6、金屬反光率比較高??诩t的反光率比皮膚高,而皮膚的反光率比棉質(zhì)衣服高。一個(gè)精心制作的Specular Map將會(huì)讓玩家身臨其境。如果目標(biāo)設(shè)備不支持可編程管線,則自動(dòng)使用Vertex-Lit這個(gè)Shader。 這個(gè)shader的渲染代價(jià)會(huì)比較大。 shader-NormalSpecular-0.jpg (37.48 KB)2011-1-5 17:52 (4)Bumped Diffuse 同Diffuse Shader一樣,這個(gè)Shader基于Lambertian光照模型,同時(shí)使用了normal mapping技術(shù)來(lái)增加物體表面細(xì)節(jié)。相對(duì)于通過增加剖分來(lái)表現(xiàn)物體表面細(xì)節(jié)的方式,normal
7、 mapping并不改變物體的形狀,而是使用一張稱為Normal Map的特殊紋理來(lái)達(dá)到這種效果。在normal map中,每個(gè)象素的顏色代表了該像素所在物體表面的法線,然后通過這個(gè)法線(而不是通過物體模型計(jì)算而來(lái)的法線)來(lái)計(jì)算光照。可以說(shuō)Normal Map在計(jì)算光照的過程中“高效地修改”了整個(gè)模型。 如何創(chuàng)建Normal maps:你可以通過導(dǎo)入一張普通的灰度圖(白色表示凸起,黑色表示凹進(jìn))Unity會(huì)自動(dòng)將它轉(zhuǎn)換為Normal Map。 技術(shù)細(xì)節(jié):這里使用Normal map是一種“Tangent space Normal Map”,Tangent space(正切空間)是一個(gè)跟隨模型物
8、體表面的空間。在這個(gè)空間中,z軸始終從表面指向外面。Tangent space Normal Map相對(duì)于另一種被稱為“Object space Normal Map”來(lái)說(shuō)有點(diǎn)復(fù)雜,但是他有一些優(yōu)勢(shì)。1)可以使用在各種奇形怪狀的表面 2)便于在同一物體不同區(qū)域或者不同物體間復(fù)用 具體關(guān)于Tangent Space Normal Map和Object Space Normal Map的區(qū)別,下次再講。 如果調(diào)用這個(gè)shader失敗,則會(huì)調(diào)用Diffuse這個(gè)shader,一般而言,該shader渲染代價(jià)低。 shader-NormalBumpedDiffuse-0.jpg (38.97 KB)2
9、011-1-5 17:52(5) Bumped Specular 和Specular一樣的光照模型,相比Specular而言,它使用一張Tangent Space Normal Map來(lái)描述物體表面法向量的變化,來(lái)增加物體細(xì)節(jié)。(關(guān)于normal map具體見Bumpped Diffuse)如果調(diào)用失敗,則使用Specular這個(gè)shader,一般而言,這個(gè)shader的渲染代價(jià)會(huì)比較大。 shader-NormalBumpedSpecular-0.jpg (41.02 KB)2011-1-5 17:52(6) Parallax Diffuse Parallax Normal mapped與傳
10、統(tǒng)的normal mapped一樣,但是對(duì)“深度”的模擬更佳。額外的深度效果是通過Height Map(高度圖)來(lái)實(shí)現(xiàn)的。Height Map在Normal map的alpha通道里面保存。全黑表示么有高度,而白色表示有高度。通常這用來(lái)表現(xiàn)石頭或者磚塊間的裂縫。 Parallax mapping的技術(shù)很簡(jiǎn)單,因此會(huì)有些人工痕跡或者不太正常的效果出現(xiàn)。尤其是,急劇陡峭的高低轉(zhuǎn)換在高度圖里面應(yīng)該避免。在inspector里面調(diào)整height數(shù)值來(lái)調(diào)整高度的范圍,有時(shí)候會(huì)造成物體不真實(shí),凌亂的情況。因此建議使用高度變化平緩的高度圖或者將高度數(shù)值設(shè)置比較低,讓表面看起來(lái)比較平緩。 這個(gè)shader的渲
11、染代價(jià)相比bumped diffuse而言更大。如果調(diào)用這個(gè)Shader失敗,則自動(dòng)使用Bumped Diffuse。 shader-NormalParallaxDiffuse-0.jpg (39.5 KB)2011-1-5 17:52(7) Parallax Specular 與Bumped Spcular相比,增加了一張Height Map來(lái)描述深度細(xì)節(jié)。關(guān)于Height Map,見parallax Diffuse。如果調(diào)用失敗,則調(diào)用Bumped Specular這個(gè)Shader。shader-NormalParallaxSpecular-0.jpg (41.77 KB)2011-1-5
12、 17:52 (8) Decal 這個(gè)Shader在unity文檔里面的描述和Unity3.0有明顯的實(shí)現(xiàn)區(qū)別,文檔由于比較老,07年寫的,官網(wǎng)下的Built-in Shader里面,decal是使用可編程管線實(shí)現(xiàn)的,就是說(shuō),如果你的機(jī)器不支持可編程管線,會(huì)使用diffuse,因?yàn)閐iffuse也不需要可編程管線,所以只能使用vertex-lit。這個(gè)Shader除了主紋理之外,這個(gè)Shader還是用了第二張紋理用來(lái)描述細(xì)節(jié)。第二張用來(lái)Decal(貼花)的紋理使用alpha通道來(lái)確定是否覆蓋主紋理。貼花用的紋理只是對(duì)主紋理的補(bǔ)充。比如說(shuō)你有一個(gè)磚砌的墻壁,你可以使用一個(gè)磚
13、塊的紋理作為主紋理,然后使用帶有alpha通道的Decal紋理在墻壁的不同地方涂鴉。 shader-NormalDecal-0.jpg (40.83 KB)2011-1-5 17:52(9) Diffuse Detail 這是一個(gè)普通的diffuse shader加上一些額外數(shù)據(jù)的shader。它允許你定義第二張紋理,稱為Detail Texture。當(dāng)camera靠近的時(shí)候,Detail Texture逐漸顯示出來(lái),一般用于地形。比如說(shuō),當(dāng)你使用一張低分辨率的紋理拉升到整個(gè)地形上的時(shí)候。隨著camera逐漸拉近,低分辨率的紋理開始模糊,這不是我們想要的效果。為了避免這個(gè)效果,創(chuàng)建一張Deta
14、il 紋理會(huì)將地形tile化。在這種模式下,隨著camera逐漸拉近,額外的細(xì)節(jié)將會(huì)出現(xiàn)以避免出現(xiàn)模糊的效果。 Detail 紋理是覆蓋在主紋理上面的。Detail紋理中深色的部分將會(huì)使得主紋理變深,而淡色的部分將會(huì)使主紋理變亮,Detail紋理通常是淺灰色。(與Decal里面Decal紋理不同的是,Decal紋理是RGBA,通過alpha控制Decal Texture與Main Texture的融合,而Detail的紋理是RGB,直接是兩張紋理的rgb通道分別相乘再*2,就是說(shuō),Detail紋理中顏色數(shù)值 = 0.5不會(huì)改變主紋理顏色,>0.5會(huì)變亮,<0.5加深) Unity
15、Built-in Shader詳解二這次主要討論Unity自帶的Shader中Transparent Shader Family 這個(gè)家族的Shader一共7種,原理和類型與Normal中的上差不多,只不過這些Shader是用在半透明或者全透明的物體上面的。他們的主紋理接受RGBA4個(gè)通道。如果你的模型一部分是半透明,一部分是不透明的。請(qǐng)分開使用兩張材質(zhì),半透明的材質(zhì)這個(gè)家族的Shader。這個(gè)家族的Shader的內(nèi)容和Normal中同名的幾乎一樣,只是添加了半透明效果,因此不再做重復(fù)介紹。
16、 通過讀取紋理中的alpha值,這個(gè)Transparent家族的shader可以讓模型變成半透明或者全透明的。在alpha中,0表示全透明,255表示全白。如果你的主紋理不包含alpha通道,那么這個(gè)物體將會(huì)變成不透明的。 在游戲中使用半透明的物體是比較有技巧性的,因?yàn)樗麄兘?jīng)常會(huì)導(dǎo)致排序問題。比如說(shuō),如果你透過兩個(gè)窗口觀察物體,發(fā)覺物體很異樣,恭喜你,你正在經(jīng)歷著每個(gè)人都會(huì)遇到的使用半透明對(duì)象的問題。一條具有普遍性的規(guī)則是:有些時(shí)候一個(gè)半透明的對(duì)象會(huì)很詭異的繪制在另外一些對(duì)象前面,尤其當(dāng)這些對(duì)象是互相交叉的,或者一個(gè)把另一個(gè)包圍的抑或是。為此
17、,當(dāng)你需要半透明對(duì)象的時(shí)候,你應(yīng)該使用它們,但是不要太過于依賴半透明對(duì)象(考慮到性能問題)。你也應(yīng)該讓你的設(shè)計(jì)者們了解到排序可能會(huì)出現(xiàn)問題,讓他們做好為此調(diào)整的準(zhǔn)備。(1)Vertex-Lit 這個(gè)家族中最簡(jiǎn)單的Shader,同樣有固定管線和可編程管線兩個(gè)SubShader,適用于所有的硬件。所有的光只在頂點(diǎn)計(jì)算。除了支持半透明,其他特性和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、的對(duì)象使用的,但他們并不能滿足我們?nèi)康囊蟆?#160; Transparent Cutout Shader Family是對(duì)半透明對(duì)象Shader的一類補(bǔ)充,與Transparent Shader Family有所區(qū)別的是:Cutout Shader Faimily中的Shaders不允許繪制部分透明的區(qū)域。就是說(shuō),使用這種Shader繪制出來(lái)的對(duì)象,要么是全透明,要么是半透明。使用這個(gè)家族Shader的對(duì)象通常用來(lái)轉(zhuǎn)換和接受陰影。半透明對(duì)象中常有的排序問題在使用這類Shader的時(shí)候不存在。 這個(gè)家
24、族里面的所有Shader都定義了一個(gè)Alpha Cutout的數(shù)值,紋理中alpha大于Alpha Cutout數(shù)值的,被認(rèn)為是不透明的,否則就是全透明的。通過這個(gè)alpha cutoff數(shù)值,我們可以控制哪些區(qū)域全透明,哪些區(qū)域不透明。(也可以用來(lái)做一些動(dòng)畫的控制,你懂的) 這個(gè)家族只包含了6個(gè)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《收玉米》(教案)2024-2025學(xué)年數(shù)學(xué)一年級(jí)下冊(cè)
- 2025年股權(quán)投資協(xié)議業(yè)績(jī)對(duì)賭
- 2025年收購(gòu)公司合同模板
- 三年級(jí)上冊(cè)數(shù)學(xué)教案-第3單元 長(zhǎng)方形和正方形 1 長(zhǎng)方形和正方形 第1課時(shí)(蘇教版)
- 2025年美發(fā)店合伙經(jīng)營(yíng)合同
- 2025年公司銷售員合同模板
- (高清版)DB45∕T 560-2021 甘蔗中耕施肥培土機(jī)作業(yè)質(zhì)量
- Unit 2 An Accident Lesson 2 Let's practice(教學(xué)設(shè)計(jì))-2024-2025學(xué)年北師大版(三起)英語(yǔ)六年級(jí)上冊(cè)
- 統(tǒng)編版四年級(jí)上冊(cè)語(yǔ)文第五單元習(xí)作 《生活萬(wàn)花筒》公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 期中重難點(diǎn)檢測(cè)卷(試題)-小學(xué)數(shù)學(xué)三年級(jí)上冊(cè)人教版(含解析)
- 全國(guó)水利工程監(jiān)理工程師培訓(xùn)教材質(zhì)量控制
- 中國(guó)傳統(tǒng)成語(yǔ)故事(英文版)
- 鑄造廠總降壓變電所及廠區(qū)配電系統(tǒng)設(shè)計(jì)
- 點(diǎn)心主管工作職責(zé)
- 航拍中國(guó)優(yōu)秀課件
- 《做自己的心理醫(yī)生 現(xiàn)代人的心理困惑和自我療愈策略》讀書筆記思維導(dǎo)圖PPT模板下載
- 小學(xué)音樂組集體備課計(jì)劃
- 稿件修改說(shuō)明(模板)
- 血液透析安全注射臨床實(shí)踐專家共識(shí)解讀
- GB/T 41873-2022塑料聚醚醚酮(PEEK)樹脂
- SB/T 10940-2012商用制冰機(jī)
評(píng)論
0/150
提交評(píng)論