shader lab 2
unity shader 法线贴图例子:
Shader "Custom/textureshader" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _BumpMap ("bumpmmap",2D) = "white"{} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Lambert sampler2D _MainTex; struct Input { float2 uv_MainTex; float2 uv_BumpMap; }; sampler2D _BumpMap; void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Normal = UnpackNormal(tex2D(_BumpMap,IN.uv_BumpMap)); } ENDCG } FallBack "Diffuse" }
通过设置不同的法线贴图来改变效果
UnpackNormal是unity写好的函数。想要了解更多关于法线贴图可以看看这个地址:http://blog.sina.com.cn/s/blog_471132920101dij9.html
第三个例子:Rim Lighting
Shader "Custom/textureshader" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _BumpMap ("bumpmmap",2D) = "white"{} _RimColor("Rim Color ", Color) = (0.26,0.19,0.16,0.0) _RimPower("Rim Range",Range(0.5,8.0)) = 3.0 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Lambert sampler2D _MainTex; struct Input { float2 uv_MainTex; float2 uv_BumpMap; float3 viewDir; }; sampler2D _BumpMap; float4 _RimColor; float4 _RimPower; void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Normal = UnpackNormal(tex2D(_BumpMap,IN.uv_BumpMap)); half rim = 1.0-saturate(dot(normalize(IN.viewDir),o.Normal)); o.Emission = _RimColor.rgb*pow(rim,_RimPower); } ENDCG } FallBack "Diffuse" }
效果图
不过看效果边缘发光不是很明显。不知道是不是模型的问题
http://blog.csdn.net/poem_qianmo/article/details/42215079 这里有一个详细的表面着色介绍。