版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Unity 內(nèi)置的Shader,都是單面效果,想必導(dǎo)入 Mesh 的同學(xué)都碰到過這樣的痛苦,布料飄起的背面部分看起來透過車窗看到是路面.各種。有些文章教導(dǎo)大家 把模型做出厚度來吧,這種做法實(shí)在太那個(gè)啥了.其實(shí)用改寫 Shader 的方法可以很方便的實(shí)現(xiàn)雙面材質(zhì)。Unity 里有 3 種 Shader 方式:1.Fixed Function Shaders 2.Vertex and Fragment Shaders3. Surfahaders關(guān)于這部分的詳細(xì)介紹,請(qǐng)參考的。這三種方式里,都可以通過直接在 Shader 代碼頭部添加一個(gè) Cull off 語句,實(shí)現(xiàn)強(qiáng)制雙面渲染。但是直接用 Cul
2、l off 的方式 有個(gè)的缺陷,這材質(zhì)從兩面看無論貼圖、顏色、反光、照明情況,都是一模一符合大多數(shù)實(shí)際情況的。在第 1 和第 2 種 Shader 里,是可以通過在一個(gè)渲染子程序里用兩個(gè)渲染 Pass 來實(shí)現(xiàn)雙面不同效果的,這部分很多,寫起來也很簡單直接。這里主要的是第三種也是最常用的 Surfahader 的雙面不同效果的實(shí)現(xiàn)。Surfahader 是不能寫在 Pass 里的,所以要實(shí)現(xiàn)它的雙面不同效果就要用其他變通的辦法。首先去 Unity一個(gè)內(nèi)置 Shader 的代碼包,/download_unity/builtin_shaders.zip如下:打開后看見一堆.shader 文件,可以用
3、任何文本編輯器打開??梢钥匆娤到y(tǒng)內(nèi)建的 Shader 基本都是 Surface 方這里隨便打開一個(gè) Normal-BumpSpec.Shader 這是普通的高光-凹凸貼圖材質(zhì)代碼1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.Shader Bumped Specular Properties _Color (Main Color, Color) = (1,1,1,1)_SpecColor (Specular Color, Color) = (0.5, 0.5, 0.5, 1)_Shininess (Shininess, Range (0.0
4、3, 1) = 0.078125_Maex (Base (RGB) Gloss (A), 2D) = white _BumpMap (Normalmap, 2D) = bump SubShader Tags RenderType=Opaque LOD 400CGPROGRAM#pragma surfaurf BlinnPhongssler2D _Maex;ler2D _BumpMap;fixed4 _Color;half _Shininess;21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.struct Input float2 uv
5、_Maex;float2 uv_BumpMap;void surf (Input IN, inout SurfaceOutput o) fixed4 tex = tex2D(_Maex, IN.uv_Maex);o.Albedo = tex.rgb * _Color.rgb; o.Gloss = tex.a;o.Alpha = tex.a * _Color.a; o.Specular = _Shininess;o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap); ENDCGFallBack Specular簡單解說一下幾個(gè)關(guān)鍵行:第一行
6、 Shader Bumped Specular 指定了這個(gè) shader 出現(xiàn)在 Unity 系統(tǒng)Shader 菜單里的名字,如果要修改系的源代碼,最好把這個(gè)名字改掉,否則和系統(tǒng)內(nèi)建 Shader 重名啦。我是這樣寫的: Shader Hogs shaders/BumpSpec_Twoside ,這個(gè) shader 會(huì)出現(xiàn)在 Hogs shaders 組里,系統(tǒng)會(huì)自動(dòng)完成這個(gè)加載。第二行 Properties 后面的一組以下劃線開頭的變量表示了這個(gè)渲染器需要設(shè)置的參數(shù)。對(duì)于一個(gè)高光-凹凸材質(zhì)質(zhì)顏色、反光顏色、反光率、材質(zhì)貼圖和法線貼圖,這 5 個(gè)變量就對(duì)應(yīng)這 5 個(gè)東西啦,詳細(xì)請(qǐng)參考系統(tǒng)手冊(cè)。
7、在第 11 行 LOD 400 后面加上一行:Cull off,這個(gè)材質(zhì)就會(huì)自動(dòng)雙面渲染了 Cull off 表示雙面都渲染,不寫默認(rèn)不渲染背面。你也可以寫上 Cull front,不渲染正面。改完這行 ,把第一行改成你希望的名字,把這個(gè) shader 文件拷貝到工程的 assets 目錄效果如圖:,系統(tǒng)就能自動(dòng)加雙面是雙面了,但是哪有兩面是一樣亮、一樣高光區(qū)域的,全透光的磚墻,這種雙面很少會(huì)用到吧。如何做到雙面不同效果呢?前面說了 Surfahader 是不能寫兩個(gè) pass 渲染不同面的,但其實(shí) surface 方式可以寫多個(gè)渲染過程,根本不念,Surfa Call backhader 可
8、以這樣寫:渲染正面的代碼Call front渲染的代碼就可以實(shí)現(xiàn)雙面不同的控制了。根據(jù)這個(gè)原理,其實(shí)只要把系統(tǒng)內(nèi)建 shader 的源代碼代碼一份,就能實(shí)現(xiàn)另一面不同效果了。以下供參考1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.Shader Hogs shaders/BumpSpec_Twoside Properties /正面 5 個(gè)參數(shù)_Color (Main Color, Color) =
9、 (1,1,1,1)_SpecColor (Specular Color, Color) = (0.5, 0.5, 0.5, 1)_Shininess (Shininess, Range (0.03, 1) = 0.078125_Maex (Base (RGB) Gloss (A), 2D) = white _BumpMap (Normalmap, 2D) = bump 拷貝 改名 也是 5 個(gè)_BackColor (Back Main Color, Color) = (1,1,1,1)_BackSpecColor (Back Specular Color, Color) = (0.5, 0.
10、5, 0.5, 1)_BackShininess (Back Shininess, Range (0.03, 1) = 0.078125/_BackMaex (Back Base (RGB) Gloss (A), 2D) = white _BackBumpMap (Back Normalmap, 2D) = bump SubShader Tags RenderType=Opaque LOD 400Cull back/開始渲染正面 CGPROGRAM/表明是 surface 渲染方式 主渲染程序是 surf 光照模型是 BLinnPhong#pragma surfaurf BlinnPhongs
11、sler2D _Maex;ler2D _BumpMap;fixed4 _Color;half _Shininess;struct Input float2 uv_Maex;float2 uv_BumpMap;void surf (Input IN, inout SurfaceOutput o) fixed4 tex = tex2D(_Maex, IN.uv_Maex);o.Albedo = tex.rgb * _Color.rgb; o.Gloss = tex.a;o.Alpha = tex.a * _Color.a; o.Specular = _Shininess;o.Normal = Un
12、packNormal(tex2D(_BumpMap, IN.uv_BumpMap);ENDCG45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.Cull front/開始渲染 CGPROGRAM#pragma surfa其實(shí)和就是拷貝了一份正面渲染的代碼 除了變量名要改urf BlinnPhongssler2D _BackMaex;ler2D _BackBumpMap;fixed4 _BackColor;half _BackShininess;struct Input float2
13、uv_BackMaex;float2 uv_BackBumpMap;void surf (Input IN, inout SurfaceOutput o) fixed4 tex = tex2D(_BackMaex, IN.uv_BackMaex);o.Albedo = tex.rgb * _BackColor.rgb; o.Gloss = tex.a;o.Alpha = tex.a * _BackColor.a; o.Specular = _BackShininess;o.Normal = UnpackNormal(tex2D(_BackBumpMap, IN.uv_BackBumpMap);
14、 ENDCGFallBack Specular這是個(gè)雙面可以分別指定的高光-凹凸材質(zhì),注意幾個(gè)要點(diǎn):properties 部分只能出現(xiàn)一次,所以這是不能直接拷貝的。因?yàn)橐獮殡p面指定不同的參數(shù),雙面的參數(shù)變量名這個(gè)里都是程序猿,沒必要多解釋了。我簡單的把用于正面的 5 個(gè)參數(shù)前面都加上了一個(gè) Back 用于。在 CG 代碼也要對(duì)應(yīng)的應(yīng)用相應(yīng)的參數(shù),的渲染代碼就用剛才全部加了 Back 的那 5 個(gè)參數(shù)。正面代碼段用 Cull back 開始以下是渲染效果:的代碼用 Cull front 開始一面是磚墻一面是木板。了沒這個(gè)模式下,雙面也完全可以指定不同的材質(zhì),基本上你不用學(xué)習(xí)很多內(nèi)建 Shader
15、 和 CG 語法,通過簡單的 co組合出無窮的雙面材質(zhì)來了。再一是二是一下,其實(shí)常用的雙面效果,除了透明的材質(zhì)以外,無非是兩種:和正面同樣紋理,但是不需要高光、反射,只需要一個(gè)相對(duì)黯淡的被環(huán)境光照亮的材質(zhì),比如磚墻木顯示為單身或其他紋理,但也不需要高光、反射,只需要被環(huán)境光照亮,比如汽車建筑物等第一種情況,可以沿用正面紋理,但是以普通的 Diffuse 方式第二種情況,不指定或者單獨(dú)指定紋理,也以普通的 Diffuse 方式的渲染都可以借用系統(tǒng)內(nèi)建 Shader 的 Diffuse 渲染代碼來實(shí)現(xiàn),方式一的代碼:兩種情況,代碼1.2.3.4.5.6.7.8.9.10.11.12.13.14.1
16、5.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.Shader Hogs shaders/BumpSpec_Twoside1 Properties _Color (Main Color, Color) = (1,1,1,1)_SpecColor (Specular Color, Color) = (0.5, 0.5, 0.5, 1)_Shininess (Shininess, Range (0.03, 1) = 0.078125_Maex (Base (RGB) Gloss (A
17、), 2D) = white _BumpMap (Normalmap, 2D) = bump _BackColor (Back Main Color, Color) = (1,1,1,1)SubShader Tags RenderType=Opaque LOD 400Cull backCGPROGRAM#pragma surfaurf BlinnPhongssler2D _Maex;ler2D _BumpMap;fixed4 _Color;half _Shininess;struct Input float2 uv_Maex;float2 uv_BumpMap;void surf (Input
18、 IN, inout SurfaceOutput o) fixed4 tex = tex2D(_Maex, IN.uv_Maex);o.Albedo = tex.rgb * _Color.rgb; o.Gloss = tex.a;o.Alpha = tex.a * _Color.a; o.Specular = _Shininess;o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap);ENDCGCull frontCGPROGRAM#pragma surfaurf Lambert43.44.45.46.47.48.49.50.51.52.
19、53.54.55.56.57.58.sler2D _Maex;fixed4 _BackColor;struct Input float2 uv_Ma;ex;void surf (Input IN, inout SurfaceOutput o) fixed4 c = tex2D(_Ma o.Albedo = c.rgb;o.Alpha = c.a;ex, IN.uv_Maex) * _BackColor; ENDCGFallBack Specular渲染的運(yùn)算就直接借用了系統(tǒng)的 Diffuse Shader,只不過紋理是沿用正面的紋理,只增加了一個(gè)的顏色環(huán)境光亮度,與紋理混合實(shí)現(xiàn)效果。渲染效果如
20、下:方式二代碼:代碼1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.Shader Hogs shaders/BumpSpec_Twoside2 Properties _Color (Main Color, Color) = (1,1,1,1)_SpecColor (Specular Color, Color) = (0.5, 0.5, 0.5, 1)_Shininess (Shininess, Range (0.03, 1) = 0.078125_Maex (Base (RGB) Gloss (A), 2D) = white _Bum
21、pMap (Normalmap, 2D) = bump _BackColor (Back Main Color, Color) = (1,1,1,1)_BackMaex (Back Base (RGB) Gloss (A), 2D) = white SubShader Tags RenderType=Opaque LOD 400Cull backCGPROGRAM#pragma surfaurf BlinnPhongssler2D _Maex;ler2D _BumpMap;22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.此方式下fixed4 _Color;half _Shininess;struct Input
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)體草莓經(jīng)銷商合作合同書版B版
- 智慧教育與學(xué)生自主學(xué)習(xí)能力的提升探索
- 2025年度高空作業(yè)安全責(zé)任免除協(xié)議范本兩份4篇
- 教育變革背景下學(xué)生自主學(xué)習(xí)的挑戰(zhàn)與機(jī)遇
- 2025年度裝配式建筑混凝土構(gòu)件生產(chǎn)與承包合同范本4篇
- 校園心理健康課程的學(xué)生反饋分析
- 推動(dòng)校園文化建設(shè)學(xué)校藝術(shù)及文化設(shè)施的采購計(jì)劃
- 環(huán)保材料在建設(shè)綠色校園中的應(yīng)用研究
- GRC施工合同范本
- 技術(shù)創(chuàng)新引領(lǐng)下的工業(yè)互聯(lián)網(wǎng)平臺(tái)發(fā)展趨勢分析
- 新媒體論文開題報(bào)告范文
- 2024年云南省中考數(shù)學(xué)試題含答案解析
- 國家中醫(yī)藥管理局發(fā)布的406種中醫(yī)優(yōu)勢病種診療方案和臨床路徑目錄
- 2024年全國甲卷高考化學(xué)試卷(真題+答案)
- 汽車修理廠管理方案
- 人教版小學(xué)數(shù)學(xué)一年級(jí)上冊(cè)小學(xué)生口算天天練
- (正式版)JBT 5300-2024 工業(yè)用閥門材料 選用指南
- 三年級(jí)數(shù)學(xué)添括號(hào)去括號(hào)加減簡便計(jì)算練習(xí)400道及答案
- 蘇教版五年級(jí)上冊(cè)數(shù)學(xué)簡便計(jì)算300題及答案
- 澳洲牛肉行業(yè)分析
- 計(jì)算機(jī)江蘇對(duì)口單招文化綜合理論試卷
評(píng)論
0/150
提交評(píng)論