Shader溶解

作者: Wwnje | 来源:发表于2017-08-24 10:08 被阅读0次

[官网基础](file:///Volumes/Applications/Applications/Unity5.3.6/Unity.app/Contents/Documentation/en/Manual/SL-Properties.html)

[Surface Shader Examples](file:///Volumes/Applications/Applications/Unity5.3.6/Unity.app/Contents/Documentation/en/Manual/SL-SurfaceShaders.html)

透明部分:丢弃像素

不规则:贴图模拟

贴图采样

demo_2.png
Shader "Custom/溶解" {
    Properties {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}

        //调节溶解像素范围
        _Step("Step", Range(0,1)) = 0.5
        //不规则纹理
        _dissolveTex ("Dissolve (RGB)", 2D) = "white" {}
        //溶解边缘颜色
        _dissColor ("dissColor", Color) = (1,1,1,1)
        //调节边缘颜色区域
        _Value("Value", Range(0,1)) = 0.5
        //边缘颜色强度
        _Inde("Inde", Range(0,1)) = 0.05

        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
    }

    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200
        
        CGPROGRAM
        // Physically based Standard lighting model, and enable shadows on all light types
        #pragma surface surf Standard fullforwardshadows

        // Use shader model 3.0 target, to get nicer looking lighting
        #pragma target 3.0

        sampler2D _MainTex;
        sampler2D _dissolveTex;
        float _Step;
        float _Value;
        float _Inde;

        struct Input {
            float2 uv_MainTex;
        };

        half _Glossiness;
        half _Metallic;
        fixed4 _Color;

        void surf (Input IN, inout SurfaceOutputStandard o) {

            fixed4 c = tex2D (_MainTex, IN.uv_MainTex);

            //采样噪音
            fixed4 d = tex2D (_dissolveTex, IN.uv_MainTex);

            //变量保存噪音 减去0 - 1 范围结果
            float mask = d.r - _Step;

            //边缘颜色 渐变就是 边缘为0,因为小于0的clip去掉像素了,所以边缘到其他 会增长直到1
            //所以根据mask值作为渐变强度来计算
            //先判断哪个范围 需要边缘颜色
            if(mask < _Value){
                //溶解后剩余整体颜色
                c = c * _Color;
//              c = c * 1.0 / mask;
                c = c * _Inde / mask;
            }

            //clip函数 完成丢弃像素过程,小于0就会丢弃像素,造成镂空溶解的样子,白色就会>多少,颜色越深就会镂空
            clip(mask);

            o.Albedo = c.rgb;
            // Metallic and smoothness come from slider variables
            o.Metallic = _Metallic;
            o.Smoothness = _Glossiness;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

相关文章

网友评论

    本文标题:Shader溶解

    本文链接:https://www.haomeiwen.com/subject/lxvsdxtx.html