Unity3D教程:教你如何利用Shader来进行3D角色的渲染
Posted on 2013年05月09日 by U3d / Unity3D 基础教程/被围观 30 次
本文主要介绍一下如何利用Shader来渲染游戏中的3D角色,以及如何利用Unity提供的Surface Shader来书写自定义Shader。
一、从Shader开始
1、通过Assets->Create->Shader来创建一个默认的Shader,并取名“MyShader”。
Unity3D教程:3D角色的渲染
2、将MyShader打开即可看见Unity默认的Shader代码
01 Shader \ { 02 Properties { 03 _MainTex (\, 2D) = \ {} 04 } 05 SubShader { 06 Tags { \=\ } 07 LOD 200 08 CGPROGRAM 09 #pragma surface surf Lambert 10 sampler2D _MainTex; 11 struct Input { 12 float2 uv_MainTex; 13 }; 14 void surf (Input IN, inout SurfaceOutput o) { 15 half4 c = tex2D (_MainTex, IN.uv_MainTex); 16 o.Albedo = c.rgb; 17 o.Alpha = c.a; 18 } 19 ENDCG 20 } 21 FallBack \ 22 } 3、将该Shader赋给一个角色,就可以看到该Shader所能表达出的Diffuse渲染效果。
Unity3D教程:3D角色的渲染
4、接来我们将以此默认Shader作为蓝本,编写出自定义的Shader。另外,该Shader所用到的参数,我们将在下一章节进行说明。
二、实现多种自定义渲染效果
1、 BumpMap效果
如果想实现Bump Map效果,可对上述的Shader做如下修改:
1.1 在属性Properties中加入:
1 Properties { 2 _MainTex (\, 2D) = \ {} 3 _BumpMap(\, 2D) = \ {} 4 } 1.2 在SubShader的变量中也进行相应修改:
1 sampler2D _MainTex; 2 sampler2D _BumpMap; 3 struct Input { 4 float2 uv_MainTex; 5 float2 uv_BumpMap; 6 }; 1.3 最后修改surf函数,加入对Normal分量的计算:
1 void surf (Input IN, inout SurfaceOutput o) { 2 \> half4 c = tex2D (_MainTex, IN.uv_MainTex); 3 o.Albedo = c.rgb; 4 o.Alpha = c.a; 5 o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap)); 6 }
相关推荐: