Unity Shader--双面及碎化

说明

练习作品,两个效果合在一起,仅供参考。

正文
Shader "Custom/TwoSidesDeathShader" {
    Properties {
        _ForeColor ("Color", Color) = (1,1,1,1)//正面颜色调节
        _ForeTex ("Foreground Texture", 2D) = "white" {}//正面贴图
        _BackColor ("Color", Color) = (1,1,1,1)//反面颜色调节
        _BackTex ("Background Texture", 2D) = "white" {}//反面贴图
        _MaskTex ("Mask Texture",2D) = "white" {}//碎化遮罩贴图
        _Threshold ("Threshold",Range(0,1)) = 0//碎化调节阈值
    }
    SubShader {
    Pass{
        Tags { "RenderType"="Opaque" }
        Cull off//关闭背面裁剪

        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #include "UnityCG.cginc"

        fixed4 _ForeColor;
        fixed4 _BackColor;

        sampler2D _ForeTex;

        sampler2D _BackTex;

        sampler2D _MaskTex;

        float _Threshold;

        struct appdata{
            float4 pos : POSITION;
            float2 uv : TEXCOORD0;
        };

        struct v2f{
            float4 pos : SV_POSITION;
            float2 uv : TEXCOORD0;
        };

        v2f vert(appdata v){
            v2f f;
            f.pos = UnityObjectToClipPos(v.pos);
            f.uv = v.uv;
            return f;
        }

        fixed4 frag(v2f i,fixed Facing : VFACE):SV_TARGET{
            fixed4 mask = tex2D(_MaskTex,i.uv);
            float checker = mask.r > _Threshold?-1:0;
            clip(checker);//对遮罩贴图采样,并用r通道的值与阈值比较以进行选择性裁剪
            fixed4 o1 = tex2D(_ForeTex,i.uv) * _ForeColor;
            fixed4 o2 = tex2D(_BackTex,i.uv) * _BackColor;

            return Facing > 0 ? o1 : o2;//Facing为正,返回正面贴图,反之,返回背面贴图
        }
        ENDCG
        }
    }
    FallBack "Diffuse"
}

注:
1.Facing的使用可参考官方示例
2.调节Threshold的值即可调节碎化程度

结果

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值