![雙面渲染shader的制作_第1頁](http://file4.renrendoc.com/view/54f433acb7da248994359a18d3dae8bd/54f433acb7da248994359a18d3dae8bd1.gif)
![雙面渲染shader的制作_第2頁](http://file4.renrendoc.com/view/54f433acb7da248994359a18d3dae8bd/54f433acb7da248994359a18d3dae8bd2.gif)
![雙面渲染shader的制作_第3頁](http://file4.renrendoc.com/view/54f433acb7da248994359a18d3dae8bd/54f433acb7da248994359a18d3dae8bd3.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、Unity 內(nèi)置的Shader,都是單面效果,想必導(dǎo)入 Mesh 的同學(xué)都碰到過這樣的痛苦,布料飄起的背面部分看起來透過車窗看到是路面.各種。有些文章教導(dǎo)大家 把模型做出厚度來吧,這種做法實在太那個啥了.其實用改寫 Shader 的方法可以很方便的實現(xiàn)雙面材質(zhì)。Unity 里有 3 種 Shader 方式:1.Fixed Function Shaders 2.Vertex and Fragment Shaders3. Surfahaders關(guān)于這部分的詳細(xì)介紹,請參考的。這三種方式里,都可以通過直接在 Shader 代碼頭部添加一個 Cull off 語句,實現(xiàn)強(qiáng)制雙面渲染。但是直接用 Cul
2、l off 的方式 有個的缺陷,這材質(zhì)從兩面看無論貼圖、顏色、反光、照明情況,都是一模一符合大多數(shù)實際情況的。在第 1 和第 2 種 Shader 里,是可以通過在一個渲染子程序里用兩個渲染 Pass 來實現(xiàn)雙面不同效果的,這部分很多,寫起來也很簡單直接。這里主要的是第三種也是最常用的 Surfahader 的雙面不同效果的實現(xiàn)。Surfahader 是不能寫在 Pass 里的,所以要實現(xiàn)它的雙面不同效果就要用其他變通的辦法。首先去 Unity一個內(nèi)置 Shader 的代碼包,/download_unity/builtin_shaders.zip如下:打開后看見一堆.shader 文件,可以用
3、任何文本編輯器打開??梢钥匆娤到y(tǒng)內(nèi)建的 Shader 基本都是 Surface 方這里隨便打開一個 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簡單解說一下幾個關(guān)鍵行:第一行
6、 Shader Bumped Specular 指定了這個 shader 出現(xiàn)在 Unity 系統(tǒng)Shader 菜單里的名字,如果要修改系的源代碼,最好把這個名字改掉,否則和系統(tǒng)內(nèi)建 Shader 重名啦。我是這樣寫的: Shader Hogs shaders/BumpSpec_Twoside ,這個 shader 會出現(xiàn)在 Hogs shaders 組里,系統(tǒng)會自動完成這個加載。第二行 Properties 后面的一組以下劃線開頭的變量表示了這個渲染器需要設(shè)置的參數(shù)。對于一個高光-凹凸材質(zhì)質(zhì)顏色、反光顏色、反光率、材質(zhì)貼圖和法線貼圖,這 5 個變量就對應(yīng)這 5 個東西啦,詳細(xì)請參考系統(tǒng)手冊。
7、在第 11 行 LOD 400 后面加上一行:Cull off,這個材質(zhì)就會自動雙面渲染了 Cull off 表示雙面都渲染,不寫默認(rèn)不渲染背面。你也可以寫上 Cull front,不渲染正面。改完這行 ,把第一行改成你希望的名字,把這個 shader 文件拷貝到工程的 assets 目錄效果如圖:,系統(tǒng)就能自動加雙面是雙面了,但是哪有兩面是一樣亮、一樣高光區(qū)域的,全透光的磚墻,這種雙面很少會用到吧。如何做到雙面不同效果呢?前面說了 Surfahader 是不能寫兩個 pass 渲染不同面的,但其實 surface 方式可以寫多個渲染過程,根本不念,Surfa Call backhader 可
8、以這樣寫:渲染正面的代碼Call front渲染的代碼就可以實現(xiàn)雙面不同的控制了。根據(jù)這個原理,其實只要把系統(tǒng)內(nèi)建 shader 的源代碼代碼一份,就能實現(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 個參數(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 個_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其實和就是拷貝了一份正面渲染的代碼 除了變量名要改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這是個雙面可以分別指定的高光-凹凸材質(zhì),注意幾個要點:properties 部分只能出現(xiàn)一次,所以這是不能直接拷貝的。因為要為雙面指定不同的參數(shù),雙面的參數(shù)變量名這個里都是程序猿,沒必要多解釋了。我簡單的把用于正面的 5 個參數(shù)前面都加上了一個 Back 用于。在 CG 代碼也要對應(yīng)的應(yīng)用相應(yīng)的參數(shù),的渲染代碼就用剛才全部加了 Back 的那 5 個參數(shù)。正面代碼段用 Cull back 開始以下是渲染效果:的代碼用 Cull front 開始一面是磚墻一面是木板。了沒這個模式下,雙面也完全可以指定不同的材質(zhì),基本上你不用學(xué)習(xí)很多內(nèi)建 Shader
15、 和 CG 語法,通過簡單的 co組合出無窮的雙面材質(zhì)來了。再一是二是一下,其實常用的雙面效果,除了透明的材質(zhì)以外,無非是兩種:和正面同樣紋理,但是不需要高光、反射,只需要一個相對黯淡的被環(huán)境光照亮的材質(zhì),比如磚墻木顯示為單身或其他紋理,但也不需要高光、反射,只需要被環(huán)境光照亮,比如汽車建筑物等第一種情況,可以沿用正面紋理,但是以普通的 Diffuse 方式第二種情況,不指定或者單獨指定紋理,也以普通的 Diffuse 方式的渲染都可以借用系統(tǒng)內(nèi)建 Shader 的 Diffuse 渲染代碼來實現(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渲染的運算就直接借用了系統(tǒng)的 Diffuse Shader,只不過紋理是沿用正面的紋理,只增加了一個的顏色環(huán)境光亮度,與紋理混合實現(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中外合作公司合同范本
- 烏魯木齊代理記賬合同范例
- 2024年復(fù)相硼化物陶瓷項目可行性分析報告
- 2025年探針溫控器項目投資可行性研究分析報告
- 冷庫保養(yǎng)與維修合同范例
- 云南 合同范本
- 農(nóng)業(yè)股權(quán)轉(zhuǎn)讓合同范例
- 2025年度建筑行業(yè)借款合同憑據(jù)規(guī)范模板
- 2025年度高性能復(fù)合材料研發(fā)與應(yīng)用合同-@-1
- 2025年度加氣磚研發(fā)項目采購合同范本
- GB/T 707-1988熱軋槽鋼尺寸、外形、重量及允許偏差
- 浮力及浮力的應(yīng)用
- 公司培訓(xùn)員工職務(wù)犯罪預(yù)防講座之職務(wù)侵占
- 化學(xué)選修4《化學(xué)反應(yīng)原理》(人教版)全部完整PP課件
- 建筑公司工程財務(wù)報銷制度(精選7篇)
- 工程設(shè)計方案定案表
- 最新2022年減肥食品市場現(xiàn)狀與發(fā)展趨勢預(yù)測
- 第一章-天氣圖基本分析方法課件
- 暖氣管道安裝施工計劃
- 體育實習(xí)周記20篇
- 初二物理彈力知識要點及練習(xí)
評論
0/150
提交評論