注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

穷到掉渣的超级奶爸阿赵

阿赵的博客

 
 
 

日志

 
 

Unity3D屏幕特效合成  

2014-11-23 15:07:15|  分类: Unity教程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Unity3D可以使用屏幕合成效果,估计很多人都知道,因为自带的屏幕特效包里面有很多这样的例子。
比如原来摄像机渲染出来的效果是这样的:
Unity3D屏幕特效合成 - 阿赵 - 穷到掉渣的超级奶爸阿赵

通过合成,你可以把它做颜色的偏移或者反转: 
Unity3D屏幕特效合成 - 阿赵 - 穷到掉渣的超级奶爸阿赵

 或者可以在上面合成自己指定的纹理图片和效果等:
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里面的参数,就可以了。

 
  评论这张
 
阅读(1426)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016