上一篇介绍了用贴图来控制漫反射效果,既然说到了贴图的使用方面,那么再说一个贴图的使用方法.这里将会展现如何用贴图控制物体的纹理效果,那就是法相贴图,如下图
效果很明显,法线贴图的好处不仅仅是能够让物体的纹理表现更佳真实,而且在使用时相比于单单使用大量模型顶点表现纹理节省了大量消耗.
废话不多说了,上代码.
Shader"myNormalMap"
{
Properties
{
_MainTex("Base Texture",2D)="white"{}//(1)
_NormalMap("Normal map",2D)="white"{}
}
SubShader
{
Tags{"RenderType"="Opaque"}
LOD 200
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
sampler2D _NormalMap;
struct Input
{
float2 uv_MainTex;//(2)
float2 uv_NormalMap;
};
void surf(Input IN,inout SurfaceOutput o)
{
fixed4 c = tex2D(_MainTex,IN.uv_MainTex);
o.Albedo = c.rgb;
o.Alpha = c.a;
o.Normal = UnpackNormal(tex2D(_NormalMap,IN.uv_NormalMap));//(3)
}
ENDCG
}
FallBack"Diffuse"
}
看到这个代码肯定会想到,其实挺简单的嘛,事实就是如此.
(1)向外部构造两个贴图接口
(2)并行计算时,获得对象点的UV坐标,从而利用tex2D函数获得对应属性
(3)UnpackNormal时Unity包装好的使用法线贴图的函数方法,从这里就可以看出它的便捷性了,至于具体是怎么实现的,可以去查看内置的源CG文件,我就不解释了.
好的,就到这里了,下次继续了,公司要弄什么礼仪培训,真无聊,好想换家公司,跳槽是不是咱们的通病?