Files
BlueRoseNote/03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/GBuffer修改.md

3.3 KiB
Raw Blame History

title, date, excerpt, tags, rating
title date excerpt tags rating
GBuffer修改 2026-05-03 00:00:00 GBufferD 清除色、Specular 格式和法线 GBuffer 格式调整
ARC
Rendering
GBuffer

GBuffer 修改

返回 Rendering

概述

ARC 引擎对 GBuffer 进行了多处细节修改,主要围绕 CustomData 通道GBufferD的清除色、Specular GBuffer 格式和法线格式。

修改内容

1. GBufferD 清除色

将 GBufferD 的清除色从默认值改为 (0, 0, 0, 0)

// SceneRenderTargets.cpp
// GBufferD 清除为黑色,确保 OutlineID 和 PointLight 数据的默认值为 0
ClearColor = FLinearColor(0, 0, 0, 0);

这确保未被写入 RED自定义数据通道 的像素不会产生错误的轮廓线 ID 或辉光遮罩。

2. Specular GBuffer 格式

在非 PS5 平台上Specular GBuffer 格式改为 PF_A8

// 非 PS5 平台使用 8 位精度
SpecularGBufferFormat = PF_A8;

降低 Specular 精度以节省带宽对卡通渲染影响极小Specular 在 Toon 着色中通常使用阶梯化而非平滑过渡)。

3. PostProcessDownsample Alpha

PostProcessDownsample.usf 中强制 Alpha 为 1.0

OutColor.a = 1.f;

防止降采样过程中 Alpha 通道携带的 CustomData 信息影响后续后处理。

完整代码解析

PostProcessDownsample Alpha 修复

// PostProcessDownsample.usf
// 强制 Alpha 为 1.0,防止 CustomData 中的 OutlineID 信息
// 在降采样过程中泄漏到后续后处理 Pass
OutColor.rgb = max(float3(0,0,0), OutColor.rgb);
OutColor.a = 1.f;    // <-- ASW 新增

C++ 端实现

// SceneRenderTargets.cpp — GBufferD 清除色修改
// ASW Change : 2016/11/09 Takuro.K
// 将 GBufferD 清除色改为 (0,0,0,0)
// 确保未写入 CustomData 的像素 OutlineID=0、PointLight DiffuseColor=黑色
FPooledRenderTargetDesc Desc(FPooledRenderTargetDesc::Create2DDesc(
    BufferSize, BufferFormat,
    FClearValueBinding(FLinearColor(0, 0, 0, 0)),  // <-- 清除色改为全0
    TexCreate_SRGB,
    TexCreate_RenderTargetable | TexCreate_ShaderResource, false));
// SceneRenderTargets.cpp — Specular GBuffer 格式
// ASW Change : 2017/11/21 Takuro.K
// 非 PS5 平台降低 Specular 精度到 PF_A88位
// 卡通渲染中 Specular 通常阶梯化,不需要高精度
#if defined(PLATFORM_PS5) && !PLATFORM_PS5
    const EPixelFormat SpecularGBufferFormat = PF_A8;
#endif

关联文档

代码修改情况

文件路径 行号 修改类型 修改内容
Source/Runtime/Renderer/Private/PostProcess/SceneRenderTargets.cpp L737 修改 Normal GBuffer 格式(已禁用)
Source/Runtime/Renderer/Private/PostProcess/SceneRenderTargets.cpp L1257~L1268 修改 Specular GBuffer → PF_A8非PS5
Source/Runtime/Renderer/Private/PostProcess/SceneRenderTargets.cpp L1271~L1284 修改 GBufferD 清除色 → (0,0,0,0)
Source/Runtime/Renderer/Private/PostProcess/SceneRenderTargets.cpp L1364~L1380 修改 GBuffer 格式相关调整
Shaders/Private/PostProcessDownsample.usf L63 新增 OutColor.a = 1.f 强制 Alpha 为 1