Unity3D屏幕特效合成


可以使用屏幕合成效果,估计很多人都知道,因为自带的屏幕特效包里面有很多这样的例子。
比如原来摄像机渲染出来的效果是这样的:







通过合成,你可以把它做颜色的偏移或者反转: 





或者可以在上面合成自己指定的纹理图片和效果等:








屏幕合成的原理其实很简单,只是把原来屏幕渲染的东西,通过一个特定的着色器改变内容成为新的画面,然后替代了原来的画面。
需要的东西有这么几样:
1、一个着色器程序
2、Camera.OnRenderImage(RenderTexture,RenderTexture)方法
3、Graphics.Blit方法


原理如下:
首先,在做合成处理的脚本里面写方法
    void OnRenderImage(RenderTexture src, RenderTexture dest) {
        Graphics.Blit(src, dest, mat);
    }





这个方法是在所有渲染工作完成之后调用的,输入的src是渲染工作完成之后得到的画面,而dest是目标的画面,目标的画面将会替代src显示在屏幕上。


里面调用的Graphics.Blit(src, dest, mat);方法,是把src给复制写入dest中,mat是材质,如果有这个,那么在复制过程中会使用mat中的着色器改变图片的内容。


代码就是这么简单。如果你要容错,可以做一个检查mat是否为空的操作。


剩下的工作就是编写mat里面的着色器的过程了。


这个着色器你可以使用vertex and fragment shader或者Surface Shader编写都可以,没有什么神秘的地方,你可以使用各种的变量或者纹理图片。不过记得一点是,刚才我们的整个屏幕的渲染结果src会自动的成为_MainTex纹理输入,而这张图片由于是平铺在屏幕上的,所以input的uv坐标就是刚才那张_MainTex的uv坐标了。然后剩下的就是你在片段着色器程序或者表面着色器程序里面通过改变它的uv信息、偏移、颜色改变或者用各种纹理来叠加颜色。


而最后,如果你的叠加效果是有动画效果的,那么就在脚本里面动态改变material里面的参数,就可以了。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值