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
给模型添加这个材质球;效果如下:
左边的是发光的,右边是原有的模型

也可以添加个点光源


浙公网安备 33010602011771号