首页 > 其他 > 详细

圆角计算 Shader

时间:2015-11-23 13:19:34      阅读:322      评论:0      收藏:0      [点我收藏+]

技术分享

圆角的计算

  在Shader中,我们使用UV坐标来计算需要显示的部分和不需要显示的部分,使用透明来处理显示与不显示。UV坐标如下图1,我们将坐标平移到图2位置,面片的UV坐标原点在面片中心,UV坐标范围是[0,1]。

  技术分享    技术分享

 

  我们现在用计算圆的半径的方式来计算,在如图所示的区域(绿色线区分)1,2,3,4内产生圆角:

  技术分享b

    1. 在1区域内,加入区域的左下角是原点(0,0),长度是0.1,R = length(x,y),R大于0.1那么透明,小于等于0.1不透明,(4个区域内同理);

    2. 在5,6,7,8区域内,不透明;

 

Shader 程序:

  

Shader "JQM/Test02"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {

        Pass
        {
            Tags {"Queue" = "Transparent"}       
            ZWrite Off       
            Blend SrcAlpha OneMinusSrcAlpha    

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

            sampler2D _MainTex;
            float4 _MainTex_ST;

            struct VertexOutPut
            {
                float4 pos : SV_POSITION;
                float2 uv : TEXCOORD0;
            };
            
            VertexOutPut vert (appdata_full v)
            {
                VertexOutPut o;
                o.pos = mul (UNITY_MATRIX_MVP, v.vertex);    
                o.uv = v.texcoord.xy;  

                return o;
            }
            
            fixed4 frag (VertexOutPut i) : COLOR
            {//圆角
                float2 uv = i.uv.xy - float2(0.5,0.5);//移动UV坐标中心    
                float rx = fmod(uv.x, 0.4);//圆角所在区域,也就是圆角半径为0.1
                float ry = fmod(uv.y, 0.4);//
                float mx = step(0.4, abs(uv.x));//大于0.4的部分, step(a,x):x<a取0,否则返回1
         
float my = step(0.4, abs(uv.y));//
         float alpha = 1 - mx*my*step(0.1, length(half2(rx,ry)));//在[0,0.4]范围,mx*my始终为0,最终值始终为1;在(0.4,0.5]范围,所在的圆角区域,mx*my使用为1,大小由圆角半径决定;在剩下的其他区域,mx*my也是为0,最终值为;

         return float4(1,1,1,alpha);//
        }
      ENDCG } } }

 

CG函数

  fmod(x,y)

    :返回 x/y 的余数。如果 y 为 0,结果不可预料。

  step(a,x)

    :如果 x<a,返回 0;否则,返回 1。

圆角计算 Shader

原文:http://www.cnblogs.com/jqm304775992/p/4987793.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!