碧血红天的HomePage

U3d杂谈 — 实现缩放不影响边缘线的圆

通常,我们在U3d中使用Quad附上一张贴图来画一个圆。但是如果这个圆需要放大和缩小的时候,圆上的边线就会跟着一起缩放,这不是我们所期望的效果。我们希望不管圆放大多大,纹理上的边缘线一直保持固定的大小,这样边缘线就会很清晰美观。就像绘制一个矢量圆一样。

我们直接使用Quad与一张透明贴图的缩放效果如下:

可以清晰的看见,放大3倍的圆,边线也放大了3倍,导致不是我们期望效果。但是在U3d中,Mesh是不支持矢量这样效果的,那么我们只有自己想办法实现一个类似矢量计算的圆。

为了实现一个边缘线不变化的圆,我们需要把当前Quad变成一个圆形的模型(Mesh)。边缘线是一个模型控制的。这样我们就能控制边缘线的宽度。这里有2中方案,第一种就是使用程序Mesh。第二种就是模型师制作一个Mesh,我们通过Shader实现边缘线的偏移计算即可。

我采用的是第二种方式,因为这种可以把具体的效果丢给美术处理,也是不容易出错的方式。

左边这个大圆就是使用我们模型制作加Shader实现的效果。可以发现,在放大了3倍的基础上,依然保持相对的边缘线大小。正是我们所期望的那样。

首先,我们需要制作出一个如下图的模型:

周围是一圈环形边缘线与中心点组成的一个圆。现在我们通过计算模型顶点相对于圆点做方向上偏移计算来控制模型的大小:

 v2f vert (appdata v)
            {
                v2f o;
                if (abs(v.vertex.x) > 0.001 || abs(v.vertex.y) > 0.001 || abs(v.vertex.z) > 0.001)
                {
                    float3 vv = normalize(float3(v.vertex.x, v.vertex.y, v.vertex.z));
                    float4 pos = v.vertex + float4(vv, 0) * _Size;
                    o.vertex = UnityObjectToClipPos(pos);
                }
                else
                {
                    o.vertex = UnityObjectToClipPos(v.vertex);
                }
                              
                o.uv = v.uv;
                
                return o;
            }

我们在顶点这色器中,计算顶点的偏移,需要排除中心圆点。这样我们就能保证边缘线上的点都能在与圆点的方向上偏移固定的size距离。这样就实现了不同大小的圆,边缘的宽度是一定的。这个完成指挥,只需要模型是把这个模型的UV调整好可以了,如果后面有什么效果调整,都只需要美术那边负责处理即可。

完整的Shader如下:

Shader "Custom/CircleShader"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Size ("Size",Float) = 1
        _Degree("Degree",Float) = 0
        _Color("Color",Color) = (0,0,0,0)
    }
    SubShader
    {
        // No culling or depth
        Cull Off ZWrite Off ZTest Always

        Pass
        {
            blend SrcAlpha OneMinusSrcAlpha
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

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

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


            float _Size;
            fixed4 _Color;
            v2f vert (appdata v)
            {
                v2f o;
                if (abs(v.vertex.x) > 0.001 || abs(v.vertex.y) > 0.001 || abs(v.vertex.z) > 0.001)
                {
                    float3 vv = normalize(float3(v.vertex.x, v.vertex.y, v.vertex.z));
                    float4 pos = v.vertex + float4(vv, 0) * _Size;
                    o.vertex = UnityObjectToClipPos(pos);
                }
                else
                {
                    o.vertex = UnityObjectToClipPos(v.vertex);
                }
                              
                o.uv = v.uv;
                
                return o;
            }

            sampler2D _MainTex;
            float _Degree;

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv);
                half d = dot(normalize(i.uv - fixed2(0.5, 0.5)), normalize(fixed2(0.5, 0)));
                half c = cos(_Degree / 2 * 3.14 / 180);
                if (d < c)
                {
                    col.a = 0;
                }
                col *= _Color;
                return col;
            }
            ENDCG
        }

        
    }
}

123 评论

  1. hi opp ggeis 2022 ert go fi

  2. Pamiętaj, że gra w nielegalnym kasynie i tu nie ma różnicy, czy jest to kasyno online, czy kasyno stacjonarne. A także u bukmachera, który działa bez licencji Ministra Finansów – jest przestępstwem skarbowym. Stanowi o tym artykuł 109 zawarty w kodeksie skarbowym. Artykuł ten mówi nam, że każdy, kto uczestniczy w grze hazardowej, która jest urządzona i/lub prowadzona wbrew przepisom ustawy, warunkom koncesji, czy wymaganego zezwolenia popełnia przestępstwo skarbowe i podlega karze grzywny, która wynosi do 120 stawek dziennych. Polscy gracze mają najwyższe standardy dotyczące tego, gdzie wkładają swoje pieniądze na wspaniałą sesję hazardową. Dlatego lista najlepszych kasyn internetowych stale się zmienia. Chcesz poznać najlepsze nowe kasyna online dla polskich graczy? Nowekasyna.com ułatwi Ci porównanie najlepszych ofert w tym momencie. Co więcej, w tym przewodniku znajdziesz wszystko, co dotyczy gier, bonusów kasynowych a takze niezbedne informacje jak unikać oszustów. Zainteresowany? Czytaj dalej. https://mmcimphal.com/discuss/profile/christyledoux9/ Zarówno kasyno w starym stylu – ze stołami gry i kartami, jak i kasyno on-line, wymagające znacznie mniejszej inwestycji, to bardzo dochodowe interesy. Duża wygrana kusi hazardzistów ale zdarza się rzadko – kasyno natomiast wygrywa niemal zawsze. Niestety, bez względu na sposób prowadzenia działalności, założenie legalnego kasyna wiąże się z ogromną ilością formalności, których należy dopełnić. Czy warto podjąć taki wysiłek? Źródło: materiały prasowe Konferencja ,,Elewacje i fasady obiektów komercyjnych” odbędzie się 26.03.2015 w Gdańsku. Gościem specjalnym Wydarzenia będzie Pan Prezes OKRE Development Ronni Richardson. OKRE Development dysponuje ponad piętnastoletnim doświadczeniem międzynarodowym i specjalistyczną wiedzą w dziedzinie zarządzania inwestycjami w nieruchomościach. Rozpoczęcie godzina 11.00 W programie min.: • GreenWings Office – nowoczesność funkcjonalność i

  3. Somebody essentially lend a hand to make seriously articles I might state. This is the first time I frequented your web page and so far? I surprised with the analysis you made to make this actual submit amazing. Wonderful task!
    “밤의부산”Fantastic website.
    A lot of useful info here. I am sending it to a few buddies ans also sharing in delicious. And obviously, thank you for your effort!

  4. online pharmacy viagra australia can you buy viagra in usa generic viagra from canada pharmacy

  5. buy cialis online cialis mail order cialis on line australia

  6. ordering cialis online tadalafil online sublingual how often can you take cialis

  7. sildenafil india paypal cheapest sildenafil tablets sildenafil fast delivery

  8. indian cialis tadalafil cialis 20mg cost? tadalafil vs cialis reviews

  9. generic viagra online price viagra buy viagra cheap online

  10. cost cialis walmart pharmacy buy drugs canada viagra cost at pharmacy

  11. lloyds pharmacy ibuprofen gel web rx pharmacy palace tamiflu walmart pharmacy

  12. clomiphene citrate online pharmacy canadian pharmacy online soma prescription drugs memory loss

  13. costco pharmacy naltrexone cheapest pharmacy for cymbalta mail order pharmacy india

  14. pharmacy tramadol withdrawal arcoxia canada pharmacy buy xanax us pharmacy

  15. tesco pharmacy fluconazole mexican pharmacies shipping to usa canadian pharmacy no rx needed

  16. generic viagra 50mg canada 20 mg sildenafil cost viagra pills price in india

  17. cialis or viagra prices of cialis us online cialis

  18. sildenafil 100 mg best price how do i buy viagra online where to get sildenafil

  19. sildenafil 100mg price usa generic viagra india online where to purchase viagra in canada

  20. buy cialis generic online where to buy generic cialis tadalafil dosage priaprysm

  21. cialis professionals mail order cialis cialis vs. viagra recreational use

  22. cialis delivered in 24 hours cialis 20mg uk buy cialis onlin e

  23. buy generic cialis paypal goodrx tadalafil canadian online pharmacy no prescription cialis dapoxetine

  24. tadalafil vs cialis generic cialis from india cialis purchase in kuwait

  25. tadalafil hong kong vikalis 20mg tadalafil what is tadalafil 20 mg

  26. cialis didnt work cialis price walmart cialis and dapoxetine canada

  27. cialis from canada to usa canada cialis with dapoxetine sildenafil citrate vs tadalafil

  28. sildenafil best price uk buy 1 viagra pill cheap viagra 100mg uk

  29. how to buy over the counter viagra viagra 37500 sildenafil price uk

  30. cialis windsor canada pharmacy cialis greece viragecialis

  31. tadalafil online india tadalafil generic cialis 20 mg can you buy cialis over the counter

发表评论