CommandBuffer---渲染命令(屏幕后处理学习)

CommandBuffer携带一系列的渲染命令,依赖相机,用来拓展渲染管线的渲染效果。

·ScriptableRendererFeature(ver.2022)(shader中的_MainTex对应的texture类型(需要手动创建)是当前相机屏幕的RenderTexture数据)

在ScriptableRendererFeature中对于屏幕渲染可以通过一个临时的RenderTexture来渲染,对于整体的的渲染流程来说分为几个步骤

(CommandBuffer的渲染是用Cmd.Blit来完成的在ScriptableRendererFeature上)

  1. 在初始化阶段的时候申请一个临时的RenderTargetHandle(在2022是RTHandles,RTHandles整合了一些RenderTargetHandle之外的一些东西)

RTHandles.Alloc(“_name”,”_name”)

第一个_name是把该string强制转换成一个RenderTargetIdentifier,后面则是申请的名字,两者的名字并不用一致,但是第一个string决定了全局Shader中的变量名字

  1. 在准备阶段也就是OnCameraSetup

在准备阶段可以获取相机的数据,比如说相机的RenderTargetIdentifier则是可以通过renderingData.cameraData.renderer.cameraColorTargetHandle.nameID来获取的,相机的对象都可以在这里获取,这样可以减少访问消耗(存疑)

  1. 在Execute中进行渲染

在Execute中进行渲染,使用Blit进行

首先要创建一个新的CommandBuffer,可以通过CommandBufferPool中通过get(“Name”)来新建和获取一个CommandBuffer,这样比普通的new减少消耗

使用Cmd的Blit,在ScriptableRendererFeature中的Blit需要对象的RenderTargetIdentifier来进行渲染,一般是从src到dest,也就是通过src的图像进行渲染,然后把结果保存到dest上,其中src的图像则是在shader中对应了MainTex,若非该函数,则对应的无效,src将会无用()

申请一个临时的RT需要一个RTHandles,一个RenderTextureDescriptor,这个变量包含了所有的创建一个RenderTexture的数据,如果但是如果要取出RTHandles.rt的RenderTexture不能直接去使用,而是要把他渲染到一个已有的RenderTexture上

记得用Context提交cmd执行

最后记得清理在该函数申请的TemporaryRT和CommandBuffer

4.OnCameraCleanup 清理一些不需要相机时的数据

ScriptableRendererFeature的Pass每帧都会调用一次,走一次渲染流程

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值