表面着色器(Surface Shader)的标准输出结构
struct SurfaceOutput {
half3 Albedo; //反射率
half3 Normal; //法线
half3 Emission; //自发光,用于增强物体自身的亮度,使之看起来好像可以自己发光
half Specular; //镜面
half Gloss; //光泽
half Alpha; //透明
};
示例
// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
Shader "Custom/SurfaceOutputTest" {
Properties {
//用于调色的Color
_Color ("Main Color", Color) = (1,1,1,1)
//自发光
_Emission ("Emission Color", Color) = (0.0, 0.0, 0.0, 0)
//高光颜色
_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 0)
//高光范围(值越小范围越大)
_Shininess ("Shininess", Range (0.01, 1)) = 0.078125
//主纹理
_MainTex ("Base (RGB) TransGloss (A)", 2D) = "white" {}
//法线贴图
_BumpMap ("Normalmap", 2D) = "bump" {}
}
SubShader {
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
LOD 400
CGPROGRAM
#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;
};
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.rgb;
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
}
ENDCG
}
FallBack "Legacy Shaders/Transparent/VertexLit"
}
效果截图