(原)Unreal渲染相关的缓冲区 及其 自定义代码几种抓取

本文介绍了Unreal 4.18版本关于GBuffer的分析,包括GBufferA到GBufferE各分量的详细信息。作者讨论了如何在 DeferredShadingRender 中处理缓冲区,并提供了两种获取GBuffer数据的方法:通过FMemory和Unreal的CopyShareMip。文章附带了相关代码示例,展示了如何动态访问和捕获GBuffer渲染目标的实现细节。
摘要由CSDN通过智能技术生成

@authot: 白袍小道

 

  • 转载说明那啥即可。
  • ( 图片和本文无关,嘿嘿,坑一下)

       

       

  • 以下为Unreal4.18版本中对GPUBuffer部分的分析结果
  • (插入:比之够着,知至目的)

       

  • Memo of GBuffer (UE4.18)

       

    • GBufferA : Normal(rgb), PerObjectGBufferData(a)

         

    • GBufferB : Metallic(r), Specular(g), Roughness(b), ShadingModelID(a&0xF),

         

    • SelectiveOutputMask(a&0xF0)

         

    • GBufferC : BaseColor(rgb), IndirectIrradiance(a)

         

    • GBufferD : CustomData(rgba)

         

    • GBufferE : PrecomputedShadowFactors(rgba)

         

    • SceneDepth

         

    • CustomNativeDepth : depth®

         

    • CustomStencilTexture

         

    • GBufferVelocity : rgba

      补充说明:注意源码中对这一块的对齐处理,线程,访问方式的处理

         

  • Dbuffer

       

    • DBufferA : PreMultColor(rgb), ColorOpacity(a)

         

    • DBufferB : PreMulWorldNormal(rgb), NormalOpacity(a)

         

    • DBufferC : PreMulRoughness(r ), RoughnessOpacity(g)

       

    (一)、DeferredShadingRender中对Buffer的处理

    从调式和RenderDoc可以详细看到过程,这里就不做详细说明

       

    结果:

       

    (二),代码抓取

    结局:

    https://twitter.com/i/status/1096091562642001920

    这里主要用两种方式去获取,一种是通过Fmemory,一种直接用Unreal提供CopyShareMip

    具体如下:

       

    以下为全部代码:

       

    DynamicAccessGBufferRenderTarget.h

    //这里就没有按照Buff处理做分装了,直接怼的(嘿嘿)

    #pragma once

    #include <memory>

    #include "Engine/Texture2D.h"

    #include "Object.h"

    #include "DynamicAccessGBufferRenderTarget.generated.h"

       

    UENUM(BlueprintType)                //"BlueprintType" is essential to include

    enum class EDZShowGbuffer : uint8

    {

    VE_GDZSHOWBUFFERA         UMETA(DisplayName = "ShowGBuffA"),

    VE_GDZSHOWBUFFERB         UMETA(DisplayName = "ShowGBuffB"),

    VE_GDZSHOWBUFFERC        UMETA(DisplayName = "ShowGBuffC"),

    VE_GDZSHOWBUFFERD        UMETA(DisplayName = "ShowGBuffD"),

    VE_GDZSHOWBUFFERE        UMETA(DisplayName = "ShowGBuffE"),

    };

       

    UENUM(BlueprintType)                //"BlueprintType" is essential to include

    enum class EDZCOPYGbufferType : uint8

    {

    VE_GDZSHOWGBUFFER_COPYMIP         UMETA(DisplayName = "COPY_Mip"),

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值