2.5 KiB
2.5 KiB
title, date, excerpt, tags, rating
| title | date | excerpt | tags | rating | |||
|---|---|---|---|---|---|---|---|
| 自定义光照Pass | 2026-05-03 00:00:00 | REDDeferredLightPS 自定义光照 Pass、PointLight 排序和自定义光照路径 |
|
⭐ |
自定义光照 Pass
返回 Rendering
概述
ARC 引擎在 Deferred Lighting 阶段新增了自定义光照 Pass,通过 REDDeferredLightPS 替换标准光照 Pixel Shader,实现 RED阴影系统 的阴影着色逻辑。同时修改了点光源的渲染排序和数据传递方式。
REDDeferredLightPS
在 LightRendering.cpp 中新增 Pixel Shader 类:
class REDDeferredLightPS : public FDeferredLightPS
{
// 绑定 DynamicShadowShade uniform 参数
// 调用 REDDirectionalPixelMain 入口
};
DynamicShadowShade 参数
从 C++ 端传入的 uniform float,控制动态阴影区域的明暗程度:
// 0.0 = 完全黑色的动态阴影
// 1.0 = 无动态阴影效果
SetShaderValue(RHICmdList, ShaderRHI,
DynamicShadowShadeParam, LightSceneInfo->DynamicShadowShade);
点光源排序
点光源通过 bPointLightRED 排序键确保在方向光之后渲染:
// 排序优先级:方向光 → 点光源(RED) → 其他
SortKey |= bPointLightRED ? (1 << PointLightSortBit) : 0;
这确保方向光的阴影着色先完成,点光源再叠加贡献。
点光源 CustomData 覆写
渲染点光源时,GBufferD 的 CustomData 被重新解释为 DiffuseColor:
// DeferredLightPixelShaders.usf
#if USE_RED_CUSTOM_DATA_POINTLIGHT
ScreenSpaceData.GBuffer.DiffuseColor.rgb =
ScreenSpaceData.GBuffer.CustomData.rgb;
#endif
RED_CUSTOM_LIGHTING 宏
通过 RED_CUSTOM_LIGHTING 定义控制是否启用整个自定义光照路径。关闭时回退到标准 UE4 Deferred Lighting。
Decal Emissive 处理
贴花的 Emissive 被作为正常光照渲染(而非 Emissive 通道),因为在 RED 管线中 BaseColor 已被阴影颜色系统占用:
// Decal Emissive → normal lighting contribution
// (BaseColor 在 RED 系统中用于 shadow color)
关联文档
- RED阴影系统 — 核心阴影着色逻辑
- RED自定义数据通道 — 点光源 CustomData 的来源
修改文件列表
| 文件 | 修改类型 |
|---|---|
Source/Runtime/Renderer/Private/LightRendering.cpp |
REDDeferredLightPS、排序、Decal |
Shaders/Private/DeferredLightPixelShaders.usf |
REDDirectionalPixelMain、CustomData 覆写 |
Shaders/Private/DeferredLightingCommon.ush |
阴影合成修改 |