Unity的OnImageRender的实现原理解析_第1页
Unity的OnImageRender的实现原理解析_第2页
Unity的OnImageRender的实现原理解析_第3页
Unity的OnImageRender的实现原理解析_第4页
Unity的OnImageRender的实现原理解析_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Unity的OnlmageRender的实现原理解析做过Unity里屏幕后期处理的童鞋应该都知道MonoBehaviour的OnRenderImage方法。这个方法可以很方便的实现屏幕后期处理,而不需要关心太多的其他的比如source的RenderTexture如何得到,destinatio的RenderTexture如何最终渲染到后备缓冲(backbuffer。下面就对unity中OnRenderImage的实现原理进行解析,一起来看看吧。很常见的OnRenderImage实现voidOnRenderImage(RenderTexturesource,RenderTexturedestination){Graphics.Blit(source,destination,m_mat);}笔者之前一度有怀疑OnRenderImage的实现,认为source的RT的得到,需要在做后期之前,把backbuffer当前的帧拷贝到一个特殊的RT(source)中,实现这个功能,后面经过看unity4.的OnRenderImage的实现源码,以及用AdrenoProfile:实测发现,Unity对这个部分的优化还是做的不错的,没有冗余的部分。但其中还是有些不同要注意,比如4.x和5.x的不同,iOS平台和Android平台的不同,所以来总结一下这个部分的过程。Unity在没有OnRenderImage的渲染过程:首先是在4.x以及5.x的iOS里

主要是说,所有的非UI的部分都是按规则直接渲染到后备缓冲,最后,后备缓中呈现到屏幕中。AABBackBufferBackAABBackBufferBackBufferBackBuffer但在5.x以后的Android里的3D模式下(像用sprite实现的2D游戏就不会),会先生成一个特殊的和屏幕等大的RenderTexture,所有的非UI的部分都先渲染到它上面,然后,再把RenderTexture—次性渲染到BackBuffer上,最后才呈现到到屏幕上。

AABABAABBARenderTextureRenrierTextureBackBufferRenderTextureAABABAABBARenderTextureRenrierTextureBackBufferRenderTextureBackBuffer5.x后android下的这个设计,这就明显增加了一次全屏渲染的开销,官方给的说法是说android的设备兼容性差,为了统一的实现方法,索性加了这样一个RT,然后以后硬件会越来越好。。估计是说这个开销不算什么的意思。。然后,OnRenderImage对整个渲染流程的影响是:在4.x,以及5.x的iOS里

也会生成一个新的RenderTexture,来先把内容都渲染进来。然后做为OnRenderlmage的source,用Grahpics.Blit配合后期处理的Shader,把内容输出到destinatio里去,如果这个destinatio为null那就是输出到BackBuffer整个流程,渲染的量没有冗余,AB渲染到殊件的RenderTexture是自动完成的。>AAAAAABABRenderlmageRTRenderlmageRTGraphics.BlitBackBufferRenderlmaqeRTBack>AAAAAABABRenderlmageRTRenderlmageRTGraphics.BlitBackBufferRenderlmaqeRTBackBuffer那在5.xAndroid下,过程就会变成:也没有冗余的渲染,除了绕不开的那特殊RenderTexture的步骤。>>>AABABAABBAABGraphics.BlitRenderimageRTRenderTextireBackBufferBackBufferRenderimageRTRenderImageRT>>>AABABAABBAABGraphics.BlitRenderimageRTRenderTextireBackBufferBackBufferRenderimageRTRenderImageRTRenderTexture对于OnRenderImage来说,只要用了,就会在显存那生成3张和后备缓冲等大的图。二张是为了做重复交换Renderimage的color贴图,另一外是一张深度和蒙板缓冲。ID413:1920^1000,RGBA8这些都是必须的开销,然后,如果中途OnRenderlmage暂停了没有调用,那这三张图会被销毁了,再OnRenderImageID413:1920^1000,RGBA8ID41

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论