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" }
三、效果