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

 

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

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

 

 

 

 

 

也可以添加个点光源

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/yugejuhao/p/7510606.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值