【Shader】游戏屏幕黑白特效

.cs脚本挂载到MainCamera

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

[ExecuteInEditMode]
public class TestImage : MonoBehaviour {

    #region
    public Shader curShader;
    private float grayScaleAmount = 1.0f;
    private Material curMaterial;
    #endregion


    #region Properties
    Material material
    {
        get{
            if (curMaterial == null)
            {
                curMaterial = new Material(curShader);
                curMaterial.hideFlags = HideFlags.HideAndDontSave;
            }
            return curMaterial;
        }
    }
    #endregion


    // Use this for initialization
    void Start () {
        if (!SystemInfo.supportsImageEffects)
        {
            enabled = false;
            return;
        }

        if (!curShader && !curShader.isSupported)
        {
            enabled = false;
        }
    }

 //   // Update is called once per frame
 //   void Update () {
 //       grayScaleAmount = Mathf.Clamp(grayScaleAmount, 0.0f, 1.0f);
    //}

    private void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        if (curShader != null)
        {
            material.SetFloat("_LuminosityAmount",grayScaleAmount);
            Graphics.Blit(source,destination,material);
        } else
        {
            Graphics.Blit(source,destination);
        }
    }

    private void OnDisable()
    {
        if (curMaterial)
        {
            DestroyImmediate(curMaterial);
        }
    }
}

.shader脚本附加到上面的属性中

Shader "Hidden/NewImageEffectShader"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _LuminosityAmount("GrayScale Amount",Range(0.0,1)) = 1.0
    }
    SubShader
    {

        Pass
        {
            CGPROGRAM
            #pragma vertex vert_img
            #pragma fragment frag
            #pragma fragmentoption ARB_precision_hint_fastest
            #include "UnityCG.cginc"

            uniform sampler2D _MainTex;
            fixed _LuminosityAmount;


            fixed4 frag (v2f_img i) : COLOR
            {
                fixed4 renderTex = tex2D(_MainTex,i.uv);
                float luminosity = 0.299 * renderTex.r + 0.587 * renderTex.g + 0.114 * renderTex.b;
                fixed4 finalColor = lerp(renderTex,luminosity,_LuminosityAmount);
                return finalColor;
            }
            ENDCG
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值