国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【實(shí)現(xiàn)100個(gè)unity特效之2】使用shader和shader Graph實(shí)現(xiàn)2d圖片描邊效果(附源碼)

這篇具有很好參考價(jià)值的文章主要介紹了【實(shí)現(xiàn)100個(gè)unity特效之2】使用shader和shader Graph實(shí)現(xiàn)2d圖片描邊效果(附源碼)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

最近在學(xué)習(xí)shader Graph相關(guān)內(nèi)容,其實(shí)關(guān)于實(shí)現(xiàn)2d圖片描邊效果,網(wǎng)上可以看到很多教程,但是我發(fā)現(xiàn)大多數(shù)都是基于比較老舊的2018unity版本,可是我們實(shí)際開發(fā)使用可能是比較新的2021及以上版本,差別還是有的,實(shí)際在升級(jí)或者使用過程中,會(huì)遇到諸多問題,而且也很少有人會(huì)分享shader Graph的連線圖源碼

沒有的話我就想著把我的學(xué)習(xí)筆記和源碼整理分享出來吧,于是就有了這篇文章

Shader

1. 內(nèi)描邊

思路:在片元著色器中,判斷當(dāng)前片元的上下左右像素(使用數(shù)值width來確定上下左右“多遠(yuǎn)”,從而得到描邊的寬度),上下左右四個(gè)像素的 alpha 分量相乘越接近0,則該像素顏色越接近描邊顏色。大致可以理解為如果某像素p的上下左右其中某個(gè)像素為透明像素,則p處于邊緣,將p像素繪制為描邊顏色。

代碼如下:

Shader "Custom_Shader/ImageInnerOutline"
{
    Properties
    {
        _MainTex ("Sprite Texture", 2D) = "white" {}
        _OutlineWidth ("Outline Width", float) = 1
        _OutlineColor ("Outline Color", Color) = (1,1,1,1)
    }
    SubShader
    {
        Blend SrcAlpha OneMinusSrcAlpha
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            sampler2D _MainTex;
            float4 _MainTex_ST;
            half4 _MainTex_TexelSize;
            float _OutlineWidth;
            float4 _OutlineColor;

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

            struct v2f
            {
                float4 vertex   : SV_POSITION;
                half2 uv  : TEXCOORD0;
                half2 left : TEXCOORD1;
                half2 right : TEXCOORD2;
                half2 up : TEXCOORD3;
                half2 down : TEXCOORD5;
            };

            v2f vert(appdata i)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(i.vertex);
                o.uv = TRANSFORM_TEX(i.uv, _MainTex);
                o.left = o.uv + half2(-1, 0) * _MainTex_TexelSize.xy * _OutlineWidth;
                o.right = o.uv + half2(1, 0) * _MainTex_TexelSize.xy * _OutlineWidth;
                o.up = o.uv + half2(0, 1) * _MainTex_TexelSize.xy * _OutlineWidth;
                o.down = o.uv + half2(0, -1) * _MainTex_TexelSize.xy * _OutlineWidth;
                return o;
            }

            fixed4 frag(v2f i) : SV_Target
            {
                fixed4 c = tex2D(_MainTex, i.uv);
                float transparent = tex2D(_MainTex, i.left).a * tex2D(_MainTex, i.right).a * tex2D(_MainTex, i.up).a * tex2D(_MainTex, i.down).a;
                c.rgb = lerp(_OutlineColor.rgb, c.rgb, transparent);
                
                return c;
            }
            ENDCG
        }
    }
}

描邊效果:
unity image 描邊,# 實(shí)現(xiàn)100個(gè)unity特效,unity,游戲引擎,游戲
內(nèi)描邊會(huì)占用圖片本身邊緣的非透明像素,當(dāng)描邊寬度增大時(shí)當(dāng)效果為
unity image 描邊,# 實(shí)現(xiàn)100個(gè)unity特效,unity,游戲引擎,游戲

2. 外描邊

思路:在片元著色器中,處理像素p,針對(duì)p的上下左右四個(gè)像素采樣(使用一個(gè)變量width來控制描邊寬度,也就是處理上下左右多遠(yuǎn)的像素),若p本身是透明像素,則

若上下左右存在非透明像素,則當(dāng)前像素p返回描邊顏色
若上下左右都是透明像素,則返回透明即可
若 p 本身非透明像素,則返回本身顏色即可
代碼如下:

Shader "Custom_Shader/ImageOuterOutline"
{
    Properties
    {
        _MainTex ("Sprite Texture", 2D) = "white" {}
        _OutlineWidth ("Outline Width", float) = 1
        _OutlineColor ("Outline Color", Color) = (1.0, 1.0, 1.0, 1.0)
        _AlphaValue ("Alpha Value", Range(0, 1)) = 0.1
    }
    SubShader
    {
        Blend SrcAlpha OneMinusSrcAlpha

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

            sampler2D _MainTex;
            float4 _MainTex_ST;
            half4 _MainTex_TexelSize;
            float _OutlineWidth;
            float4 _OutlineColor;
            float _AlphaValue;

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

            struct v2f
            {
                float4 vertex   : SV_POSITION;
                half2 uv  : TEXCOORD0;
                half2 left : TEXCOORD1;
                half2 right : TEXCOORD2;
                half2 up : TEXCOORD3;
                half2 down : TEXCOORD5;
            };

            v2f vert(appdata i)
            {
                v2f o;
                o.vertex = o.vertex + i.normal * _OutlineWidth;
                o.vertex = UnityObjectToClipPos(i.vertex);
                o.uv = TRANSFORM_TEX(i.uv, _MainTex);
                o.left = o.uv + half2(-1, 0) * _MainTex_TexelSize.xy * _OutlineWidth;
                o.right = o.uv + half2(1, 0) * _MainTex_TexelSize.xy * _OutlineWidth;
                o.up = o.uv + half2(0, 1) * _MainTex_TexelSize.xy * _OutlineWidth;
                o.down = o.uv + half2(0, -1) * _MainTex_TexelSize.xy * _OutlineWidth;
                return o;
            }

            fixed4 frag(v2f i) : SV_Target
            {
                float transparent = tex2D(_MainTex, i.left).a + tex2D(_MainTex, i.right).a + tex2D(_MainTex, i.up).a + tex2D(_MainTex, i.down).a;
                fixed4 col = tex2D(_MainTex, i.uv);

                if (col.a < 0.1) {
                    return step(_AlphaValue, transparent) * _OutlineColor;
                } else {
                    return col;
                }
            }
            ENDCG
        }
    }
}

外描邊效果:
unity image 描邊,# 實(shí)現(xiàn)100個(gè)unity特效,unity,游戲引擎,游戲
外描邊不會(huì)占用圖片非透明像素,但要求圖片外圍要有足夠但透明像素,當(dāng)調(diào)整外描邊寬度時(shí),效果:
unity image 描邊,# 實(shí)現(xiàn)100個(gè)unity特效,unity,游戲引擎,游戲
描邊寬度較大時(shí),Image 圖片頂部和左邊有平滑的切割是圖片本身的范圍

Shader Graph

1. 2d圖片描邊

(ps:圖片看不清也沒關(guān)系,文件末尾我會(huì)放手demo源碼,不清楚的可以直接查看源碼進(jìn)行學(xué)習(xí))
unity image 描邊,# 實(shí)現(xiàn)100個(gè)unity特效,unity,游戲引擎,游戲
不同圖片上的效果
unity image 描邊,# 實(shí)現(xiàn)100個(gè)unity特效,unity,游戲引擎,游戲

2. 帶炫光的2d圖片描邊

unity image 描邊,# 實(shí)現(xiàn)100個(gè)unity特效,unity,游戲引擎,游戲
不同圖片上的效果
unity image 描邊,# 實(shí)現(xiàn)100個(gè)unity特效,unity,游戲引擎,游戲

最終演示效果

unity image 描邊,# 實(shí)現(xiàn)100個(gè)unity特效,unity,游戲引擎,游戲

源碼

https://gitcode.net/unity1/unity2d-shader-picturestroke

參考

  • 【視頻】https://www.youtube.com/watch?v=Eyx3EfqqfMw&list=PLzDRvYVwl53tqzN5R-j33Sd7kf_f6b6z4
  • 【文章】https://www.jianshu.com/p/c68a730e9a8b

完結(jié)

如果你發(fā)現(xiàn)了文章中存在錯(cuò)誤或者有更好的解決方法,也歡迎評(píng)論私信告訴我哦

好了,我是向宇,https://xiangyu.blog.csdn.net/

一位在小公司默默奮斗的開發(fā)者,出于興趣愛好,于是最近才開始自習(xí)unity。如果你有任何問題,歡迎你來評(píng)論私信告訴我, 雖然有些問題我可能也不一定會(huì),但是我會(huì)查閱各方資料,爭取給出最好的建議,希望可以幫助更多想學(xué)編程的人,共勉~
unity image 描邊,# 實(shí)現(xiàn)100個(gè)unity特效,unity,游戲引擎,游戲文章來源地址http://www.zghlxwxcb.cn/news/detail-811236.html

到了這里,關(guān)于【實(shí)現(xiàn)100個(gè)unity特效之2】使用shader和shader Graph實(shí)現(xiàn)2d圖片描邊效果(附源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Cocos creator(2d) 使用 shader + uv 實(shí)現(xiàn)單張圖片銜接滾動(dòng)效果

    Cocos creator(2d) 使用 shader + uv 實(shí)現(xiàn)單張圖片銜接滾動(dòng)效果

    在游戲中,當(dāng)我們需要讓背景圖片無縫銜接無限滾動(dòng)時(shí)(打飛機(jī)這種背景一直滾動(dòng),或者肉鴿游戲地圖一直在走等等),通常的做法是 在游戲中放兩個(gè)背景node,在update中控制這兩張背景圖片的移動(dòng),并讓其收尾銜接即可。(具體代碼忽略) 可是在肉鴿類游戲中,玩家的走向是全方

    2024年02月13日
    瀏覽(74)
  • Unity極坐標(biāo)Shader特效,以及使用Instanced Property實(shí)現(xiàn)相同材質(zhì)不同參數(shù)

    Unity極坐標(biāo)Shader特效,以及使用Instanced Property實(shí)現(xiàn)相同材質(zhì)不同參數(shù)

    先看看效果 Unity極坐標(biāo)Shader特效 有時(shí)候我們需要在場景中擺放一些熱點(diǎn),用戶點(diǎn)擊之后出現(xiàn)互動(dòng),當(dāng)然實(shí)現(xiàn)這個(gè)功能的方法有很多,作為一名程序員,當(dāng)然是要用最簡單的實(shí)現(xiàn)。用shader程序化實(shí)現(xiàn)它。 啥是極坐標(biāo) 極坐標(biāo),又稱極座標(biāo)系。它是一種表示平面直角坐標(biāo)系中點(diǎn)的

    2024年02月09日
    瀏覽(22)
  • 實(shí)現(xiàn)窗戶特效的Unity Shader解析

    實(shí)現(xiàn)窗戶特效的Unity Shader解析

    ????????本文將詳細(xì)介紹一種使用Unity Shader實(shí)現(xiàn)窗戶特效的方法。通過分析代碼,我們將解釋每個(gè)關(guān)鍵部分的作用,以及如何將其組合在一起以實(shí)現(xiàn)逼真的窗戶效果。希望本文能為Shader編程初學(xué)者和Unity開發(fā)者提供一些有用的指導(dǎo)。 ? 引言: ????????在游戲和虛擬現(xiàn)實(shí)

    2024年02月12日
    瀏覽(29)
  • [Unity] ShaderGraph實(shí)現(xiàn)Sprite圖片描邊/發(fā)光效果

    [Unity] ShaderGraph實(shí)現(xiàn)Sprite圖片描邊/發(fā)光效果

    使用版本為:2022.3.10f1? [原始圖]? ? ? [運(yùn)行前]? ? ? [運(yùn)行后] 更詳細(xì)的實(shí)現(xiàn)邏輯及步驟參考CodeMonkey的視頻: https://youtu.be/FvQFhkS90nI?si=zy6XRlqGnzIdQkqD OS:猴子老師,我永遠(yuǎn)的神?。?! 目錄 一、準(zhǔn)備工作 二、偏移效果與顏色疊加 三、單側(cè)描邊與原理 四、另一側(cè)與Sub管理 五、

    2024年01月20日
    瀏覽(108)
  • 【unity插件】Shader實(shí)現(xiàn)UGUI的特效——UIEffect為 Unity UI 提供視覺效果組件

    【unity插件】Shader實(shí)現(xiàn)UGUI的特效——UIEffect為 Unity UI 提供視覺效果組件

    一般的shader無法直接使用在UI上,需要在shader中定義特定的面板參數(shù),今天就來推薦github上大佬做的一套開源的一系列UGUI,Shader實(shí)現(xiàn)的特效——UIEffect 為 Unity UI 提供視覺效果組件。 https://github.com/Ankh4396/UIEffect 讓我們用效果來裝飾你的UI!您可以根據(jù)需要從腳本和檢查器中控

    2024年02月04日
    瀏覽(60)
  • Unity3D Shader系列之描邊

    Unity3D Shader系列之描邊

    總結(jié)下描邊效果的實(shí)現(xiàn)方式,主要有以下幾種: ①法線外拓+ZTest Always ②法線外拓+Cull Front ③法線外拓+ZWrite Off ④法線外拓+模板測試 ⑤基于屏幕后處理 法線外拓的原理如下: 基本原理還是很簡單的:模型渲染兩次,第一次渲染時(shí)將模型的頂點(diǎn)沿法線方向外拓,然后繪制描邊

    2023年04月08日
    瀏覽(89)
  • 【Unity Shader】Shader Graph

    【Unity Shader】Shader Graph

    shader graph 入門: (對(duì)基礎(chǔ)內(nèi)容進(jìn)行詳細(xì)介紹) Shader Graph入門-CSDN博客 unity-shader(入門)_unity3d shader-CSDN博客 各種效果的節(jié)點(diǎn)配置: 【unity造輪子】Unity ShaderGraph使用教程與各種特效案例(2023/12/1更新)_unity特效-CSDN博客 大佬文章里所用的PBR Master更新后已經(jīng)沒有了,所以參考

    2024年02月01日
    瀏覽(24)
  • 【實(shí)現(xiàn)100個(gè)unity特效之7】unity 3d實(shí)現(xiàn)各種粒子效果

    【實(shí)現(xiàn)100個(gè)unity特效之7】unity 3d實(shí)現(xiàn)各種粒子效果

    直接調(diào)整為【Stretched Billboard拉伸/延伸渲染】 控制雨的大小 創(chuàng)建個(gè)材質(zhì) 材質(zhì)設(shè)置 掛載材質(zhì) 設(shè)置延申效果 第一個(gè)叫做Speed Scale:通過比較每個(gè)粒子的速度,來去決定每個(gè)粒子拉伸/延伸的長度 而Length Scale:通過粒子的寬度,來決定粒子的長度 3d粒子大小隨機(jī)化 顏色也可以設(shè)置隨

    2024年01月19日
    瀏覽(21)
  • 【Unity實(shí)戰(zhàn)100例】用戶頭像圓形遮罩使用Shader不用Mask組件

    目錄 一.創(chuàng)建材質(zhì) 二.創(chuàng)建Shader文件編寫Shader代碼 三.Image材質(zhì)設(shè)置 源碼:https://download.csdn.net/download/qq_37310110/88196529 前言:我們在使用Unity的自帶組件Mask的時(shí)候會(huì)出現(xiàn)毛邊現(xiàn)象很難處理掉,這里我們使用著色

    2024年02月19日
    瀏覽(37)
  • Unity Shader Graph Ase三者分別有什么不一樣的地方?

    Unity Shader Graph Ase三者分別有什么不一樣的地方?

    著色器 (Shader) 應(yīng)用于計(jì)算機(jī)圖形學(xué)領(lǐng)域,指一組供計(jì)算機(jī)圖形資源在執(zhí)行渲染任務(wù)的時(shí)使用的指令,用于計(jì)算機(jī)圖形的顏色或明暗。但近來,它也能用于處理一些特殊的效果,或者視頻后處理。通俗的說,著色器告訴電腦如何用特有的一種方法去描繪物體。作為渲染器的一部

    2024年02月12日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包