CommandBuffer学习之RenderTexture

CommandBuffer学习之RenderTexture

一. 什么是RenderTexture

  1. Unity中的一个特殊的纹理类型,访问接口继承Texture.

  2. Texture对象由访问者不同分为两种:
    • 一种是Server-side创建在显存,由GPU访问.

    • 另外一种是Client-side创建在内存,由CPU访问.

    • 当CPU提交渲染请求时,会把内存中的纹理对象复制到GPU可访问的显存中.

    • 当然如果有需求,也可以把GPU显存中的纹理复制到CPU可访问的内存中.

  3. RenderTexture是GPU上的Server-side的Texture对象,它直接关联GPU显存中叫做FBO(Frame Buffer Object)的内存块.

  4. FBO是所有GPU绘制渲染的目的地.

  5. GPU可以创建多个FBO,其中有一个默认的FBO是直接关联显示设备的,就是把我们绘制的内容显示到显示设备上的.

  6. 因为是Server-side的Texture,所以RenderTexture可以被GPU渲染时直接使用,在CPU提交渲染请求时不需要进行复制处理.

二. RenderTexture用处

  1. 屏幕图像后处理:就是在场景中所有物体都被渲染完成后,在输出的RenderTexture上进行各种图像处理,比如:模糊,扭曲,去色,颜色校正等等,这些图像处理算法可以参照Photoshop的后处理效果.

  2. 阴影处理:使用另外一个摄像机把当前场景中的物体的深度渲染到一张RenderTexture中,然后在主相机渲染物体时,判断是否由深度遮挡,进而判断是否产生阴影.

  3. 延迟渲染:把多个光照要素,模型要素等分别渲染到不同的RenderTexture上,到最后集合所有要素把模型的整体效果绘制到最终显示设备.

  4. 上面只是几个常用的,现在几乎所有的实时渲染高级效果,都会用到RenderTexture.它的身影无所不再.

三. RenderTexture的创建方式:

  1. 使用RenderTexture的构造函数
    • 这个方法创建的RenderTexture,需要自己管理,包括创建和释放,是否有效等等.

    • 示例:

      //1. 直接通过调用构造函数来创建一个RenderTexture
      var RT = new RenderTexture(1024, 1024, 16, RenderTextureFormat.ARGB32, RenderTextureReadWrite.sRGB);
    
      //2. 释放RenderTexture
      RT.Release();
      GameObject.Destroy(RT);
      RT = null;
    
  2. 使用RenderTexture的GetTemporary静态函数
    • 这个方法是请求Unity的RenderTexture缓存系统来获取一个符合条件的RenderTexture.

    • 这个方法申请的RenderTexture,创建和释放是由Unity缓存系统处理,我们只是获得了使用权。

    • 示例:

       //调用静态函数GetTemporary来从缓存系统中申请一个RenderTexture的使用权
       RT = RenderTexture.GetTemporary(1024, 1024, 16, RenderTextureFormat.ARGB32, RenderTextureReadWrite.sRGB);
       //把RenderTexture的使用权,交还给Unity的缓存系统。
       RenderTexture.ReleaseTemporary(RT);
       RT = null;
    
  3. 使用CommandBuffer的GetTemporary静态函数
    • 这个方法的本质与(2)的方法一致。都是从Unity

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值