• [Shader2D]浮雕效果


    1:效果图

    2:源码

    Shader "Custom/uiblood" {
    Properties
    {
    [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
    _CloudTex("噪声",2D) ="white"{}
    _GrayTex("灰色背景",2D) ="gray"{}
    _Color ("Tint", Color) = (1,1,1,1)

    _StencilComp ("Stencil Comparison", Float) = 8
    _Stencil ("Stencil ID", Float) = 0
    _StencilOp ("Stencil Operation", Float) = 0
    _StencilWriteMask ("Stencil Write Mask", Float) = 255
    _StencilReadMask ("Stencil Read Mask", Float) = 255

    _ColorMask ("Color Mask", Float) = 15
    }

    SubShader
    {
    Tags
    {
    "Queue"="Transparent"
    "IgnoreProjector"="True"
    "RenderType"="Transparent"
    "PreviewType"="Plane"
    "CanUseSpriteAtlas"="True"
    }

    Stencil
    {
    Ref [_Stencil]
    Comp [_StencilComp]
    Pass [_StencilOp]
    ReadMask [_StencilReadMask]
    WriteMask [_StencilWriteMask]
    }

    Cull Off
    Lighting Off
    ZWrite Off
    ZTest [unity_GUIZTestMode]
    Fog { Mode Off }
    Blend SrcAlpha OneMinusSrcAlpha
    ColorMask [_ColorMask]

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

    struct appdata_t
    {
    float4 vertex : POSITION;
    float4 color : COLOR;
    float2 texcoord : TEXCOORD0;
    };

    struct v2f
    {
    float4 vertex : SV_POSITION;
    fixed4 color : COLOR;
    half2 texcoord : TEXCOORD0;
    };

    fixed4 _Color;

    v2f vert(appdata_t IN)
    {
    v2f OUT;
    OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);
    OUT.texcoord = IN.texcoord;
    #ifdef UNITY_HALF_TEXEL_OFFSET
    OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1);
    #endif
    OUT.color = IN.color * _Color;
    return OUT;
    }

    sampler2D _MainTex;
    sampler2D _CloudTex;
    sampler2D _GrayTex;

    fixed4 frag(v2f IN) : SV_Target
    {
    /*
    half2 uv = IN.texcoord;
    //uv旋转
    half t = _Time.y*2;
    t= ( (0.6-length(uv-half2(0.5,0.5)))*2 ) *t;
    uv = uv-half2(0.5,0.5);
    half x = uv.x*cos(t)-uv.y*sin(t);
    half y = uv.x*sin(t)+uv.y*cos(t);
    half2 newUV = half2(x,y)+half2(0.5,0.5);
    half4 color = tex2D(_CloudTex,newUV ) * IN.color;
    */
    /*
    half2 uv = IN.texcoord;
    half4 col = tex2D(_CloudTex,uv ) * IN.color;
    half r = 0.393*col.r+0.769*col.g+0.189*col.b;
    half g = 0.349*col.r+0.686*col.g+0.168*col.b;
    half b = 0.272*col.r+0.534*col.g+0.131*col.b;
    half4 color = half4(r,g,b,col.a);
    */
    half2 uv = IN.texcoord;
    half4 color = tex2D(_CloudTex,uv ) * IN.color;
    //左上像素
    half4 lcol = tex2D(_CloudTex,float2(uv.x-0.001,uv.y-0.001));
    half4 newCol = color-lcol;
    half4 gcol = tex2D(_GrayTex,uv ) * IN.color;;//half4(color.r*0.3,color.g*0.59,color.b*0.11,color.a);
    gcol+=newCol;
    clip (gcol.a - 0.01);
    return gcol;
    }
    ENDCG
    }
    }
    }

    /*
    Emboss 效果: 浮雕 原理: 图像的前景前向凸出背景。把象素和左上方的象素进行求差运算,并加上一个灰度(背景)。
    */

  • 相关阅读:
    openwrt 的依赖找不到问题
    数据包与IPTABLE关系
    wifidog 配置中文说明
    Java 线程
    Java 集合
    IDEA配置Maven并创建web项目
    逻辑覆盖
    获得天气数据
    小程序项目文件介绍
    window 10 使用git
  • 原文地址:https://www.cnblogs.com/cocotang/p/9374328.html
Copyright © 2020-2023  润新知