https://docs.unity3d.com/cn/2019.4/Manual/SL-SurfaceShaders.html
一、工程截图
二、Shader代码
//https://docs.unity3d.com/cn/2019.4/Manual/SL-SurfaceShaders.html
Shader "Custom/SurfaceShader"
{
Properties
{
//主纹理
_MainTex("Albedo (RGB)", 2D) = "white" {}
//漫反射法线贴图
[NoScaleOffset]
_BumpMap("Normalmap", 2D) = "bump" {}
//混合颜色
_Color ("Color", Color) = (1,1,1,1)
//自发光颜色
_Emission ("Emission", Color) = (1,1,1,1)
//高光颜色
_SpecColor("Specular Color", Color) = (0.5, 0.5, 0.5, 0)
//高光亮度
[PowerSlider(5.0)]
_Shininess("Shininess", Range(0.01, 1)) = 0.078125
}
SubShader
{
Tags { "RenderType"="Transparent" "IgnoreProjector" = "True" "Queue" = "Transparent" }
LOD 200
CGPROGRAM
//Lambert、BlinnPhong 这两个光照模型不是基于物理的
//使用这两个光照模型的着色器可在低端硬件上提高渲染速度。
#pragma surface surf BlinnPhong alpha:fade
#pragma target 3.0
sampler2D _MainTex;
sampler2D _BumpMap;
fixed4 _Color;
fixed4 _Emission;
half _Shininess;
struct Input
{
//主纹理数据
float2 uv_MainTex;
//法线纹理数据
float2 uv_BumpMap;
};
//Input: 表面着色器标准输入结构
//SurfaceOutput: 表面着色器标准输出结构
void surf (Input IN, inout SurfaceOutput o)
{
//纹理采样
fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
//漫反射颜色
o.Albedo = tex.rgb * _Color.rgb;
//透明度
o.Alpha = tex.a * _Color.a;
//表面光泽度 (值越大镜面反射越强)
o.Gloss = tex.a;
//高光亮度
o.Specular = _Shininess;
//自发光颜色
o.Emission = _Emission;
//法线
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
}
FallBack "Diffuse"
}
三、效果