• [Shader]Unity裁剪四方形Image为圆形


    <1>新建材质球和shader,shader请在官方下载内置shader(UI)

         效果:

         思路:

                  裁剪成圆,那就剔除大于圆半径的像素,很鸡儿简单

        代码:

                 定义圆形半径 _Radius("半径",Range(0-0.5))=0.5

                 frag片元处理

                       float2 nor = float2(0.5,0.5)-uv;//圆心在0.5,0.5

                       if(length(nor)>_Radius)//计算圆心到UV坐标的距离 大于半径剔除

                             col.a = 0;

                       clip(col.a-0.01);//剔除alpha小于0

    源码:

          

    // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)

    Shader "Tang/imgCut"
    {
        Properties
        {
            [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
        _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

            //my member
            _Radius("圆半径",Range(0,0.5)) = 0.3

            [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) = 0
        }

            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]
            Blend SrcAlpha OneMinusSrcAlpha
            ColorMask[_ColorMask]

            Pass
        {
            Name "Default"
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma target 2.0

            #include "UnityCG.cginc"
            #include "UnityUI.cginc"

            #pragma multi_compile __ UNITY_UI_ALPHACLIP
            #define PI 3.1415926

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

        struct v2f
        {
            float4 vertex : SV_POSITION;
            fixed4 color : COLOR;
            float2 texcoord : TEXCOORD0;
            float4 worldPosition : TEXCOORD1;
            UNITY_VERTEX_OUTPUT_STEREO
        };

        fixed4 _Color;
        fixed4 _TextureSampleAdd;
        float4 _ClipRect;
        float _Radius;

        v2f vert(appdata_t IN)
        {
            v2f OUT;
            UNITY_SETUP_INSTANCE_ID(IN);
            UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
            OUT.worldPosition = IN.vertex;
            OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);

            OUT.texcoord = IN.texcoord;

            OUT.color = IN.color * _Color;
            return OUT;
        }

        sampler2D _MainTex;

        fixed4 frag(v2f IN) : SV_Target
        {
    float2 uv = IN.texcoord.xy;
            float4 col = IN.color;

            float2 nor =float2(0.5,0.5)-uv;
            if (length(nor)>_Radius)
                col.a = 0;
            
    clip(col.w-0.01);
            half4 color = (tex2D(_MainTex,uv) + _TextureSampleAdd) * col;
            color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);

    #ifdef UNITY_UI_ALPHACLIP
             clip(color.a - 0.001);
    #endif

             return color;
         }
             ENDCG
         }
        }
    }

                  

  • 相关阅读:
    二十四种设计模式:观察者模式(Observer Pattern)
    二十四种设计模式:工厂方法模式(Factory Method Pattern)
    Java迷题:等于,还是不等于?
    UCenter创始人、Discuz!创始人、管理员账号的认知(转)
    Internet Explorer 无法启用 JavaScript 怎么办?
    IIS配置PHP环境(快速最新版)(转载+自创)
    零基础学php的自学
    PHP实体层基础类
    PHP数据库链接类(PDO+Access)
    C# Memcached 缓存
  • 原文地址:https://www.cnblogs.com/cocotang/p/7308411.html
Copyright © 2020-2023  润新知