vault backup: 2026-05-03 20:37:58
This commit is contained in:
90
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/自定义光照Pass.md
Normal file
90
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/自定义光照Pass.md
Normal file
@@ -0,0 +1,90 @@
|
||||
---
|
||||
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` | 阴影合成修改 |
|
||||
Reference in New Issue
Block a user