@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"),
-