C#脚本如下:
using UnityEngine; using System.Collections; [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); } } }
shader脚本如下:
Shader "Custom/ImageEffect" { Properties { _MainTex("Base (RGB)",2D) = "white"{} _LuminosityAmount("GrayScale Amount",Range(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 } } FallBack "Diffuse" }
C#脚本拖到摄像机上面即可。