Files
BlueRoseNote/03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/自定义光照Pass.md

91 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 自定义光照Pass
date: 2026-05-03 00:00:00
excerpt: REDDeferredLightPS 自定义光照 Pass、PointLight 排序和自定义光照路径
tags:
- ARC
- Rendering
- Lighting
rating: ⭐
---
# 自定义光照 Pass
返回 [[Rendering]]
## 概述
ARC 引擎在 Deferred Lighting 阶段新增了自定义光照 Pass通过 `REDDeferredLightPS` 替换标准光照 Pixel Shader实现 [[RED阴影系统]] 的阴影着色逻辑。同时修改了点光源的渲染排序和数据传递方式。
## REDDeferredLightPS
`LightRendering.cpp` 中新增 Pixel Shader 类:
```cpp
class REDDeferredLightPS : public FDeferredLightPS
{
// 绑定 DynamicShadowShade uniform 参数
// 调用 REDDirectionalPixelMain 入口
};
```
### DynamicShadowShade 参数
从 C++ 端传入的 uniform float控制动态阴影区域的明暗程度
```cpp
// 0.0 = 完全黑色的动态阴影
// 1.0 = 无动态阴影效果
SetShaderValue(RHICmdList, ShaderRHI,
DynamicShadowShadeParam, LightSceneInfo->DynamicShadowShade);
```
## 点光源排序
点光源通过 `bPointLightRED` 排序键确保在方向光之后渲染:
```cpp
// 排序优先级:方向光 → 点光源(RED) → 其他
SortKey |= bPointLightRED ? (1 << PointLightSortBit) : 0;
```
这确保方向光的阴影着色先完成,点光源再叠加贡献。
## 点光源 CustomData 覆写
渲染点光源时GBufferD 的 CustomData 被重新解释为 DiffuseColor
```hlsl
// 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 已被阴影颜色系统占用:
```cpp
// 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` | 阴影合成修改 |