欢迎光临散文网 会员登陆 & 注册

Unity-randertexture

2022-12-27 19:23 作者:Lucas_dudu  | 我要投稿

用途:

在当前画面基础上再次渲染

什么是RenderTexture?

RenderTexture是unity定义的一种特殊的Texture类型,它连接着一个FrameBufferObject的存在于GPU端的Texture(Server-Side Texture)从上面对RenderTexture的解释我们了解到要先知道Texture和FrameBufferObject是什么

什么是Texture?

中文翻译叫纹理,先说一下一个纹理是如何被渲染到屏幕上的 ,起初纹理存在硬盘(RAM)里,它被cpu解压缩,如果想要显示它,那么数据将会被发送给(上传到,cpu和gpu之间的通信可以理解成client和server之间的通信)GPU,gpu将它放在显存(VARM)中,显存中有一块内存区域叫做RenderBuffer(渲染缓存),RenderBuffer只是数据缓存,它还不能用作Texture渲染,尽管它现在已经是一个texture了,在这里 texture等待着被渲染,当要渲染这个Texture时,会生成一FrameBuffer(帧缓存),当这个帧缓存被添加到默认的帧缓存物体上(FrameBufferObject)时,它就会被绘制到屏幕上.FrameBuffer指向的是显存中RenderBuffer的地址,简单的说,RenderBuffer需要附加在FrameBuffer上,它才能是五颜六色的图片,否则它只是显存上的一堆数据,关于RenderBuffer和FrameBuffer可以看这些文章:

Linux OpenGL 实践篇-10-framebuffer - 北冥有鱼其名为鲲 - 博客园

https://www.cnblogs.com/xin-lover/p/8977307.html

OpenGL ES学习之路(3.1) 着色器渲染过程、渲染方式、FrameBuffer与RenderBuffer - 简书

https://www.jianshu.com/p/dbba97339e75?tdsourcetag=s_pctim_aiomsg

什么是FrameBufferObject?

        可以理解FrameBufferObject是一个集合,集合了FrameBuffer,通过快速刷新Framebuffer实现动态效果,最典型的FBO就是Unity的Main Camera,它是默认的FBO,是gpu里渲染结果的目的地.但是现代gpu通常可以创建很多其他的FBO(Unity中可以创建多个Camera),这些FBO不连接窗口区域,这种我们创建的FBO的存在目的就是允许我们将渲染结果保存在gpu的一块存储区域,待之后使用,这种用法叫做离屏渲染,这是一个非常有用的东西。Camera 输出的FBO,可以嵌在另一个FBO中,Unity中使用RenderTexture来接收FBO(可视化FBO),game窗口就是一个RenderTexture,当Camera的RenderTarget设置为null时表示输出到game窗口(没有摄像机的RenderTaget为null会显示没有摄像机进行渲染),设置不为null表示输出到某个RT.


OK 理解了上面的原理咱们来制作一下

  • 首先创建资源 randertexture

创建rendertexture
  • 在新的场景中创建一个camera;

  • 把要渲染物体单独创建一个layer;

  • 这里已effect为例

创建层级effect
  • camera的渲染图层改为effect,Background Type 改为solid color,底色改为黑色,一般半透明为0.

  • 创建UI层canvas,并创建image,然后把前面创建的randertexture拖入texture中

  • 如果对渲染叠加有要求可以新建材质球,effectrender,来控制他的渲染叠加方式。


  • 运行unity就会看到你要单独渲染的物体已经出现在画面中。


Unity-randertexture的评论 (共 条)

分享到微博请遵守国家法律