鸟语天空
表面着色器(一)
post by:追风剑情 2021-6-15 13:30

https://docs.unity3d.com/cn/2019.4/Manual/SL-SurfaceShaders.html

一、工程截图

2222.png

二、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"
}


三、效果

11111.png

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容