中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

unity置灰處理的實現方法

發布時間:2021-07-20 19:09:47 來源:億速云 閱讀:813 作者:chen 欄目:開發技術

這篇文章主要介紹“unity置灰處理的實現方法”,在日常操作中,相信很多人在unity置灰處理的實現方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”unity置灰處理的實現方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

目錄
  • 1 UI對象不可用的時候顯示置灰效果

  • 2 場景中所有對象置灰,比如戰斗失敗時候顯示的置灰效果

由于人眼對RGB敏剛程度不同,對綠色的敏感度最高,對紅色的敏感度次之,對藍色的敏感度最低,因此需要對RGB設置不同的權重,來達到灰度顯示的效果,比較常用的RGB權重值為 R:0.298912, G:0.586611,B: 0.114478
grayColor.rgb = float3(color.r0.298912 , color.g0.586611 ,color.b*0.114478)

1 UI對象不可用的時候顯示置灰效果

通過shader進行控制置灰,shader中添加變量 _ShowGray,在代碼中可以通過動態給改變量賦值的方式,控制是否進行置灰顯示
shader 代碼是通過 Image Effect shader進行簡單修改得到的,

Shader "UI/UIGray"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        [Toggle]_ShowGray("show gray", Range(0,1)) = 0
    }
    SubShader
    {
        // No culling or depth
        Cull Off ZWrite Off ZTest Always
        //-----add code-------
        Blend SrcAlpha OneMinusSrcAlpha
        //----finish----
        Pass
        {
            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;
            };

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            sampler2D _MainTex;
            fixed _ShowGray;

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv);
                // just invert the colors
                //col.rgb = 1 - col.rgb;
            //----add code----
                fixed gray = dot(col.rgb, float3(0.298912, 0.586611, 0.114478));
                col.rgb = lerp(col.rgb, fixed3(gray, gray, gray), _ShowGray);
            //-----finish-----
                return col;
            }
            ENDCG
        }
    }
}

2 場景中所有對象置灰,比如戰斗失敗時候顯示的置灰效果

場景置灰,一般采用的是對相機渲染進行設置,在相機上面添加腳本,在OnRenderImage回調方法里面,對渲染對象進行處理
腳本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PostEffectGray : MonoBehaviour
{
    public Material grayMaterial;
    void OnRenderImage(RenderTexture src, RenderTexture dest)
    {
        Graphics.Blit(src, dest, grayMaterial);
    }
}

啟用置灰腳本

unity置灰處理的實現方法

禁用置灰腳本

unity置灰處理的實現方法

這里的Gray材質球用的的shader是一個簡單的置灰效果shader,代碼如下

Shader "Unlit/Gray"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"

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

            struct v2f
            {
                float2 uv : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                UNITY_TRANSFER_FOG(o,o.vertex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);
                half3 gray = dot(col.rgb, half3 (0.22, 0.707, 0.071));
            // apply fog
                UNITY_APPLY_FOG(i.fogCoord, col);
                return fixed4(gray.rgb, col.a);
            }
            ENDCG
        }
    }
}

到此,關于“unity置灰處理的實現方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高台县| 长治市| 双柏县| 兴义市| 微博| 黄大仙区| 阿拉善右旗| 新平| 偃师市| 奉化市| 堆龙德庆县| 怀柔区| 响水县| 南郑县| 德格县| 莲花县| 曲水县| 元氏县| 寿光市| 扶沟县| 平凉市| 子洲县| 历史| 调兵山市| 苏尼特右旗| 社旗县| 乌拉特后旗| 仙游县| 海城市| 屏东市| 定结县| 遂溪县| 荥阳市| 洪洞县| 浦城县| 禄丰县| 广丰县| 扎囊县| 林州市| 伽师县| 平乐县|