屏幕合成的原理其实很简单,只是把原来屏幕渲染的东西,通过一个特定的着色器改变内容成为新的画面,然后替代了原来的画面。
需要的东西有这么几样:
1、一个着色器程序
2、Camera.OnRenderImage(RenderTexture,RenderTexture)方法
3、Graphics.Blit方法
本文转载于:http://www.gopedu.com/article/1066
原理如下:
首先,在做合成处理的脚本里面写方法
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里面的参数,就可以了。