UnityShader-屏幕后处理(调节亮度,饱和度,对比度)

一、什么是屏幕后处理

在渲染完整个场景得到屏幕图像后,再对这个图像进行一系列的操作,实现各种屏幕特效。常用于处理景深、描边,图像模糊等特效。

二、实现原理

想要实现屏幕后处理的基础在于得到渲染后的整个屏幕的图像,即抓取屏幕,在Unity中为我们提供了一个方便的接口——OnRenderImage函数:
MonoBehaviour.OnRenderImage(RenderTexture src, RenderTexture dest)
src表示源纹理,即没有经过处理之前的纹理,dest表示目标纹理,即处理后的纹理,
目标纹理可以在Camera中的Target Texture设置,如下图:

 

TargetTexture.png
 

默认情况下OnRenderImage是在整个屏幕渲染完以后(也就是在不透明和透明物体之后都渲染完以后)调用,在一些特殊的情况下,我们需要在渲染完不透明物体的Pass(即渲染队列小于等于2500的pass,例如内置的
AlphaTest,Background,Geometry,等都在这个范围内)后立即就调用OnRenderImage,换句话说就是我们不希望将透明物体也包括在屏幕后处理中,这时我们需要在OnRenderImage函数前面添加[ImageEffectOpaque]属性来达到目的。

在OnRenderImage函数中我们通常通过Graphics.Blit函数对纹理进行处理,它有3种函数声明:
Graphics.Blit(Texture src,RenderTexture dest);
Graphics.Blit(Texture src,RenderTexture dest,Material mat ,int pass = -1);
Graphics.Blit(Texture src,Material mat ,int pass = -1);
src表示当前屏幕纹理或者上一步处理后得到的渲染纹理,dest表示目标渲染纹理,如果他的值为null,那么就会直接将处理后的纹理渲染到屏幕上面。mat是使用的材质,这个材质使用的shader将会对源纹理进行各种特效处理。而源纹理(src)将会被传递给shader中的_MainTex的纹理属性。pass的默认参数是-1,表示将会

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值