Unity (九) Shader:SurfaceShader:添加法线贴图效果

写一个Shader :

 Shader "Surface/SurfaceShader004" {
Properties 
{      

_MainTex("主纹理",2d)=""{}
_BumpMap("法线贴图",2D)=""{}
_MainColor("",COLOR)=(1,0,0,1)
}
SubShader
 {

    CGPROGRAM //--------------------CG语言开头

    //编译指令 着色器类型 着色器函数名称 光照模型  其他设置
    #pragma    surface    surf        Lambert   finalcolor:setcolor
     
     struct Input 
     {
        float2 uv_MainTex;  //定义一个主纹理的UV坐标
float2 uv_BumpMap;   //定义法线贴图的UV坐标

     };
         sampler2D _MainTex;  //定义纹理对象
 sampler2D _BumpMap;  //定义法线贴图对象
 fixed4 _MainColor;    //定义颜色

 void surf(Input IN,inout SurfaceOutput o)  //函数
 {
 //通过UV查找纹理中该顶点的颜色值,然后赋值
  o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;

 // o.Albedo*=_MainColor.rgb;写在其他设置的setcolor函数里也可以
  o.Normal=UnpackNormal(tex2D(_BumpMap,IN.uv_BumpMap)); //接收法线

 }
 //颜色设置函数
 void setcolor(Input IN,SurfaceOutput o,inout fixed4 color)
 {
 color*=_MainColor;
 
 }


ENDCG //----------------------------CG语言结尾
 }
FallBack "Diffuse"
}


创建一个材质球,并设置Shader为刚写的
SurfaceShader004
效果如下:


 

 

 

 





 

posted @ 2017-09-12 16:07  鱼歌。  阅读(822)  评论(0编辑  收藏  举报