Unity (八) Shader:SurfaceShader: 边缘发光效果

 

 

 

写一个Shader 程序:

Shader "Surface/SurfaceShader009" {
Properties 
{      

_MainTex("主纹理",2d)=""{}
_BumpMap("法线贴图",2D)=""{}
_EmissionColor("发光颜色",COLOR)=(1,0,0,1)
_RimPower("发光系数",Range(0,1))=0
_DetailTex("细节纹理",2d)=""{}

}
SubShader
 {

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

    //编译指令 着色器类型 着色器函数名称 光照模型  其他设置
    #pragma    surface    surf        Lambert  
    
     struct Input 
     {
        float2 uv_MainTex;  //定义一个主纹理的UV坐标
float2 uv_BumpMap;   //定义法线贴图的UV坐标
float3 viewDir;
float2 uv_DetailTex;
     };
         sampler2D _MainTex;  //定义纹理对象
 sampler2D _BumpMap;  //定义法线贴图对象
 fixed4 _EmissionColor;    //定义颜色
 fixed _RimPower;
 sampler2D _DetailTex;

 void surf(Input IN,inout SurfaceOutput o)  //函数
 {
  //设置纹理
  o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
  //设置细节纹理
  o.Albedo+=tex2D(_DetailTex,IN.uv_DetailTex).rgb;
   //设置法线
  o.Normal=UnpackNormal(tex2D(_BumpMap,IN.uv_BumpMap));
     //获取边缘系数
      float rim= 1- abs(dot(o.Normal,normalize(IN.viewDir)));
  // 方式1: o.Emission=_EmissionColor*rim*_RimPower;
o.Emission=_EmissionColor*pow(rim,_RimPower); // 方式2:

 }



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

 

创建一个材质球,

给材质球的Shader里 设为刚写的SurfaceShader009

 

给模型添加这个材质球;效果如下:

左边的是发光的,右边是原有的模型

 

 

 

 

 

也可以添加个点光源

 

 

 

 

 

 

 

 

 

posted @ 2017-09-12 16:01  鱼歌。  阅读(1617)  评论(0)    收藏  举报