Shader-灰频效果

来源:互联网 发布:怎么管理mac下面的图标 编辑:程序博客网 时间:2024/04/29 03:42

效果图:
这里写图片描述

Shader代码:

Shader "Custom/HuiPin" {    Properties{        _MainTex("Main Tex",2D)="white"{}        _LuminosityAmout("GrayScale Amout",Range(0,1))=1.0    }    SubShader{        Pass{            CGPROGRAM            #pragma vertex vert_img            #pragma fragment frag            //#pragma fragmentoption ARB_precision_hint_fastest            #include "UnityCG.cginc"            sampler2D _MainTex;            fixed _LuminosityAmout;            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,_LuminosityAmout);                return finalColor;            }            ENDCG        }    }    FallBack "DIFFUSE"}

c#代码:

using System.Collections;using System.Collections.Generic;using UnityEngine;[ExecuteInEditMode]public class TestRenderImage : MonoBehaviour {    public Shader curShader;    public float grayScaleAmount = 1.0f;    private Material curMaterial;    Material material    {        get        {            if (curMaterial == null)            {                curMaterial = new Material(curShader);                curMaterial.hideFlags = HideFlags.HideAndDontSave;            }            return curMaterial;        }    }    void Start()    {        if (!SystemInfo.supportsImageEffects)        {            enabled = false;            return;        }        if (!curShader && !curShader.isSupported)        {            enabled = false;        }    }    void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)    {        if (curShader != null)        {            material.SetFloat("_LumionsityAmount", grayScaleAmount);            Graphics.Blit(sourceTexture, destTexture, material);        }        else        {            Graphics.Blit(sourceTexture, destTexture);        }    }    void Update()    {        grayScaleAmount = Mathf.Clamp(grayScaleAmount, 0, 1.0f);    }    void OnDisable()    {        if (curMaterial)        {            DestroyImmediate(curMaterial);        }    }}

将此代码拖拽到摄像机上,启用或者禁用此脚本即可看到效果

原创粉丝点击