unity屏幕灰色顯示


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#腳本拖到攝像機上面即可。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com