vault backup: 2026-05-03 20:37:58
This commit is contained in:
89
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/ARC引擎修改总览.md
Normal file
89
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/ARC引擎修改总览.md
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
---
|
||||||
|
title: ARC引擎修改总览
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: Arc System Works 定制 UE4.25 引擎全部修改的索引与总览
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- MOC
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# ARC 引擎修改总览
|
||||||
|
|
||||||
|
## 基本信息
|
||||||
|
|
||||||
|
| 项目 | 值 |
|
||||||
|
|------|-----|
|
||||||
|
| 基础引擎 | Unreal Engine 4.25-plus |
|
||||||
|
| 最接近 Commit | `31b4a3ad7388` (2020-08-19) |
|
||||||
|
| Branch Name | `++UE4+Release-4.25Plus` |
|
||||||
|
| 开发团队 | Arc System Works (ASW) |
|
||||||
|
| 目标产品 | Guilty Gear Strive (GGST) |
|
||||||
|
| 修改时间跨度 | 2012 ~ 2024 |
|
||||||
|
|
||||||
|
## 差异统计
|
||||||
|
|
||||||
|
| 维度 | 数值 |
|
||||||
|
|------|------|
|
||||||
|
| Shaders 文件差异 | 33 / 599 (5.5%) |
|
||||||
|
| Source 核心目录文件差异 | 495 / ~95,000 (0.5%) |
|
||||||
|
| Shaders 变更行数 | ~874 行 |
|
||||||
|
| Source(Runtime) 变更行数 | ~17,751 行 |
|
||||||
|
|
||||||
|
## 分类索引
|
||||||
|
|
||||||
|
### [[Rendering]] — 渲染系统
|
||||||
|
卡通渲染核心,包括阴影系统、GBuffer 修改、自定义后处理、材质属性扩展、投影变换等。修改量最大、最核心的部分。
|
||||||
|
> 13 篇功能文档
|
||||||
|
|
||||||
|
### [[Platform]] — 平台支持
|
||||||
|
PS4、PS5、Xbox One 的 Shader 兼容层和平台特化代码。
|
||||||
|
> 3 篇功能文档
|
||||||
|
|
||||||
|
### [[D3D12RHI]] — D3D12 RHI 改进
|
||||||
|
GPU 调试(DRED)、性能分析(Submission Gap)、PSO 异步创建、纹理池管理等底层 RHI 增强。
|
||||||
|
> 3 篇功能文档
|
||||||
|
|
||||||
|
### [[UI]] — UI/Slate/UMG 扩展
|
||||||
|
Slate 文本渲染增强、UMG 本地化系统、SimpleElement 渲染扩展、格斗游戏控制器映射。
|
||||||
|
> 3 篇功能文档
|
||||||
|
|
||||||
|
### [[Animation]] — 动画系统
|
||||||
|
常量关键帧压缩、60fps 帧限动画、FBX 导入扩展(轮廓线 ID、RED 动画数据)。
|
||||||
|
> 2 篇功能文档
|
||||||
|
|
||||||
|
### [[Gameplay]] — 游戏性系统
|
||||||
|
场景视图分层、全局 Shader 数据管线、相机系统扩展、UEI 引擎回调接口。
|
||||||
|
> 4 篇功能文档
|
||||||
|
|
||||||
|
### [[Particle]] — 粒子系统
|
||||||
|
粒子驱动点光源接口、静态网格切换模块。
|
||||||
|
> 1 篇功能文档
|
||||||
|
|
||||||
|
## 修改标记约定
|
||||||
|
|
||||||
|
代码中的修改标记遵循以下格式:
|
||||||
|
```
|
||||||
|
// ASW Change : YYYY/MM/DD HH:MM:SS Author.Name 修改说明
|
||||||
|
```
|
||||||
|
|
||||||
|
主要贡献者:
|
||||||
|
- **Takuro.K (Takuro Kayumi)** — 阴影系统、光照、核心渲染
|
||||||
|
- **Takeshi.N** — CustomData 通道、PointLight 扩展
|
||||||
|
- **Wizcorp** — ForcedPrepass、Early-Z 相关
|
||||||
|
|
||||||
|
## 修改文件总览
|
||||||
|
|
||||||
|
### Shaders 新增文件
|
||||||
|
- `Shaders/Private/REDPostProcess.usf` — 自定义后处理着色器
|
||||||
|
- `Shaders/Private/Platform/` — PS4 平台着色器
|
||||||
|
- `Shaders/Public/Platform/PS4/PS4Common.ush` — PS4 PSSL 兼容层
|
||||||
|
- `Shaders/Public/Platform/XboxOne/XboxOneCommon.ush` — Xbox One 兼容层
|
||||||
|
|
||||||
|
### Source 新增文件(关键)
|
||||||
|
- `Source/Runtime/Engine/Classes/Materials/REDMaterialInstanceDynamic.h/.cpp`
|
||||||
|
- `Source/Runtime/Engine/Public/REDSceneContext.h`
|
||||||
|
- `Source/Runtime/Engine/Public/REDParticlePointLightUtilities.h`
|
||||||
|
- `Source/Runtime/Renderer/Private/PostProcess/REDPostProcess.h/.cpp`
|
||||||
|
- `Source/Runtime/Slate/Public/Framework/Application/UEISlateApplication.h/.cpp`
|
||||||
|
- `Source/Runtime/D3D12RHI/Public/D3D12RHIBridge.h`
|
||||||
24
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Animation/Animation.md
Normal file
24
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Animation/Animation.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
title: Animation
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: ARC 引擎动画系统修改分类索引
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Animation
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# Animation — 动画系统
|
||||||
|
|
||||||
|
返回 [[ARC引擎修改总览]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎的动画系统修改围绕**格斗游戏对帧精确动画的需求**展开。格斗游戏的攻击判定、无敌帧等核心机制要求动画必须以固定帧率精确播放,不能有插值误差。
|
||||||
|
|
||||||
|
## 功能列表
|
||||||
|
|
||||||
|
| 功能 | 文档 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| 常量关键帧压缩 | [[常量关键帧压缩]] | 60fps 帧限动画、4F 间隔校正 |
|
||||||
|
| FBX 导入扩展 | [[FBX导入扩展]] | RED 动画数据、轮廓线 ID、首末帧处理 |
|
||||||
76
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Animation/FBX导入扩展.md
Normal file
76
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Animation/FBX导入扩展.md
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
---
|
||||||
|
title: FBX导入扩展
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: RED 动画数据导入、轮廓线 ID 导入、首末帧处理、XSI 支持
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Animation
|
||||||
|
- FBX
|
||||||
|
- Editor
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# FBX 导入扩展
|
||||||
|
|
||||||
|
返回 [[Animation]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎大幅扩展了 FBX 导入功能,添加了格斗游戏和卡通渲染所需的专用数据导入支持。
|
||||||
|
|
||||||
|
## RED 动画数据导入
|
||||||
|
|
||||||
|
`bImportREDAnimationData` 选项启用时:
|
||||||
|
- 动画以 60fps 帧限模式导入
|
||||||
|
- 关键帧 snap 到固定帧率网格
|
||||||
|
- 配合 [[常量关键帧压缩]] 使用
|
||||||
|
|
||||||
|
## 首末帧处理
|
||||||
|
|
||||||
|
两个独立选项:
|
||||||
|
- **首帧删除** — 删除动画第一帧(DCC 工具常在第 0 帧放置 T-Pose)
|
||||||
|
- **末帧复制** — 将最后一个关键帧复制到动画末尾(确保循环动画平滑衔接)
|
||||||
|
|
||||||
|
## 轮廓线 ID 导入
|
||||||
|
|
||||||
|
`OutlineIndexUVChannel` 选项指定从哪个 UV 通道导入轮廓线 ID:
|
||||||
|
|
||||||
|
```
|
||||||
|
UV Channel 0 → 标准 UV
|
||||||
|
UV Channel 1 → Lightmap UV
|
||||||
|
UV Channel N → OutlineID 数据(由美术在 DCC 中绘制)
|
||||||
|
```
|
||||||
|
|
||||||
|
导入后的 OutlineID 存储在网格数据中,BasePass 时写入 GBufferD 供 [[RED自定义数据通道]] 使用。
|
||||||
|
|
||||||
|
## 法线导入模式扩展
|
||||||
|
|
||||||
|
新增法线处理模式:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// FBXNIM_ImportNormalsAndComputeNormalsToTangents
|
||||||
|
// 导入法线 + 从法线计算切线
|
||||||
|
// (标准 UE4 只有导入法线、计算法线、导入法线和切线三种)
|
||||||
|
```
|
||||||
|
|
||||||
|
## XSI 2015 支持
|
||||||
|
|
||||||
|
扩展 FBX 导入器支持 Softimage XSI 2015 格式的 FBX 文件。
|
||||||
|
|
||||||
|
## LOD 重导入
|
||||||
|
|
||||||
|
骨骼网格和静态网格的 LOD 重导入时保留 OutlineID 数据和 RED 自定义骨骼网格数据。
|
||||||
|
|
||||||
|
## 关联文档
|
||||||
|
|
||||||
|
- [[常量关键帧压缩]] — 动画压缩方案
|
||||||
|
- [[RED自定义数据通道]] — OutlineID 的渲染端使用
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Source/Editor/UnrealEd/Private/Fbx/` (多个文件) | FBX 导入扩展 |
|
||||||
|
| `Source/Editor/UnrealEd/Public/FbxImporter.h` | 选项定义 |
|
||||||
|
| `Source/Editor/UnrealEd/Private/SkeletalMeshEdit.cpp` | LOD 重导入 |
|
||||||
|
| `Source/Editor/UnrealEd/Private/StaticMeshEdit.cpp` | 同上 |
|
||||||
56
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Animation/常量关键帧压缩.md
Normal file
56
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Animation/常量关键帧压缩.md
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
---
|
||||||
|
title: 常量关键帧压缩
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 60fps 帧限动画和 4F 间隔自动校正,确保格斗游戏帧精确播放
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Animation
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# 常量关键帧压缩
|
||||||
|
|
||||||
|
返回 [[Animation]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
新增 `AnimCompress_Constant` 压缩方案,将动画关键帧限定在 60fps 的固定帧率网格上。格斗游戏的核心机制(攻击判定、无敌帧、帧优势等)要求动画在每一帧的状态都是确定性的,不能依赖插值。
|
||||||
|
|
||||||
|
## 实现
|
||||||
|
|
||||||
|
### AnimCompress_Constant
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// AnimCompress_Constant.h/.cpp
|
||||||
|
// 常量关键帧插值 — 不做帧间插值,直接使用最近的关键帧
|
||||||
|
```
|
||||||
|
|
||||||
|
核心行为:
|
||||||
|
- 每帧独立存储(不做 delta 编码)
|
||||||
|
- 运行时取值不做线性插值,直接 snap 到最近关键帧
|
||||||
|
- 确保 60fps 下每帧状态与 DCC 工具导出完全一致
|
||||||
|
|
||||||
|
### 4F 间隔自动校正
|
||||||
|
|
||||||
|
Avatar 动画使用 4 帧间隔(15fps 的关键帧),自动校正导入的帧时间到 4F 网格:
|
||||||
|
|
||||||
|
```
|
||||||
|
原始帧: 0, 3, 7, 11, ...
|
||||||
|
校正后: 0, 4, 8, 12, ... (snap 到 4F 倍数)
|
||||||
|
```
|
||||||
|
|
||||||
|
### AnimCompress_Automatic 扩展
|
||||||
|
|
||||||
|
标准 UE4 的 `AnimCompress_Automatic` 也被扩展以支持常量帧模式选项。
|
||||||
|
|
||||||
|
## 关联文档
|
||||||
|
|
||||||
|
- [[FBX导入扩展]] — `bImportREDAnimationData` 控制导入时的帧限处理
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Source/Runtime/Engine/Public/Animation/AnimCompress_Constant.h` | **新增** |
|
||||||
|
| `Source/Runtime/Engine/Private/Animation/AnimCompress_Constant.cpp` | **新增** |
|
||||||
|
| `Source/Runtime/Engine/Public/Animation/AnimCompress_Automatic.h` | 扩展 |
|
||||||
29
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/D3D12RHI/D3D12RHI.md
Normal file
29
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/D3D12RHI/D3D12RHI.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
---
|
||||||
|
title: D3D12RHI
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: ARC 引擎 D3D12 RHI 改进分类索引
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- D3D12RHI
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# D3D12RHI — D3D12 RHI 改进
|
||||||
|
|
||||||
|
返回 [[ARC引擎修改总览]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
D3D12RHI 是 ARC 引擎修改量第二大的模块(60 个文件),但与卡通渲染无关。这些修改主要是**底层 GPU 基础设施的性能优化和调试增强**,部分可能从后续 UE 版本回移,部分是为主机平台开发的专用功能。
|
||||||
|
|
||||||
|
## 功能列表
|
||||||
|
|
||||||
|
| 功能 | 文档 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| 提交间隔记录器 | [[提交间隔记录器]] | GPU 帧间提交间隔分析 |
|
||||||
|
| DRED 调试增强 | [[DRED调试增强]] | GPU 崩溃时的扩展诊断 |
|
||||||
|
| 其他 RHI 改进 | [[其他RHI改进]] | PSO 异步、纹理池、CommandList 等 |
|
||||||
|
|
||||||
|
## 新增文件
|
||||||
|
|
||||||
|
- `Source/Runtime/D3D12RHI/Public/D3D12RHIBridge.h` — 暴露 D3D12 命令队列供外部访问
|
||||||
46
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/D3D12RHI/DRED调试增强.md
Normal file
46
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/D3D12RHI/DRED调试增强.md
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
title: DRED调试增强
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: Device Removed Extended Data 增强,GPU 崩溃时提供面包屑上下文
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- D3D12RHI
|
||||||
|
- Debug
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# DRED 调试增强
|
||||||
|
|
||||||
|
返回 [[D3D12RHI]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
DRED(Device Removed Extended Data)是 D3D12 的 GPU 崩溃诊断机制。ARC 引擎增强了 DRED 的使用,在 GPU 崩溃时提供更详细的面包屑(Breadcrumb)上下文信息。
|
||||||
|
|
||||||
|
## 增强内容
|
||||||
|
|
||||||
|
### 面包屑上下文
|
||||||
|
|
||||||
|
在关键渲染操作处插入 Breadcrumb 标记,GPU 崩溃时可以追溯到具体的操作步骤:
|
||||||
|
|
||||||
|
- 绘制调用标记
|
||||||
|
- 资源状态转换标记
|
||||||
|
- 计算着色器调度标记
|
||||||
|
|
||||||
|
### 向量化异常处理器
|
||||||
|
|
||||||
|
新增 Vectored Exception Handler,在 Windows 异常触发时检查 D3D12 Debug 消息:
|
||||||
|
|
||||||
|
- 捕获 D3D12 设备丢失事件
|
||||||
|
- 自动收集 DRED 信息
|
||||||
|
- 输出到日志供崩溃分析
|
||||||
|
|
||||||
|
## 使用场景
|
||||||
|
|
||||||
|
- 主机开发中 GPU 挂起的排查
|
||||||
|
- 复杂着色器导致的设备丢失诊断
|
||||||
|
- CI/CIS 环境中的自动化崩溃分析
|
||||||
|
|
||||||
|
## 修改文件
|
||||||
|
|
||||||
|
涉及 D3D12RHI 模块的设备创建、命令列表执行和异常处理路径。
|
||||||
79
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/D3D12RHI/其他RHI改进.md
Normal file
79
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/D3D12RHI/其他RHI改进.md
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
---
|
||||||
|
title: 其他RHI改进
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: PSO 异步创建、纹理池管理、CommandList 任务分流等 D3D12 改进
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- D3D12RHI
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# 其他 RHI 改进
|
||||||
|
|
||||||
|
返回 [[D3D12RHI]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎在 D3D12 RHI 层面做了多项基础设施改进,涵盖 PSO 管理、纹理内存、命令列表执行和光线追踪支持。
|
||||||
|
|
||||||
|
## PSO 异步创建
|
||||||
|
|
||||||
|
### Busy-Wait + Stall 告警
|
||||||
|
|
||||||
|
PSO 创建改为异步模式,当 Shader 未就绪时 busy-wait 并记录 stall 时间:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// PSO 创建等待时输出告警日志
|
||||||
|
// 帮助识别哪些 Shader 组合导致了渲染卡顿
|
||||||
|
```
|
||||||
|
|
||||||
|
### 部分编译(bPartial)
|
||||||
|
|
||||||
|
Ray Tracing Pipeline 支持部分编译——不需要等待所有 Hit Shader 就绪即可使用基础管线。参见 [[光线追踪与PSO]]。
|
||||||
|
|
||||||
|
## 纹理池管理
|
||||||
|
|
||||||
|
新增 CVar `D3D12.TexturePoolOnlyAccountStreamableTexture`:
|
||||||
|
- 纹理池统计时仅计算可流式加载的纹理
|
||||||
|
- 避免非流式纹理(如 UI、字体)干扰流式预算
|
||||||
|
|
||||||
|
## CommandList 任务分流
|
||||||
|
|
||||||
|
CVar `r.D3D12.ExecuteCommandListTask`:
|
||||||
|
- 将部分 Command List 执行工作从 RHI 线程分流到 Task 线程
|
||||||
|
- 减少 RHI 线程压力
|
||||||
|
|
||||||
|
## Ray Tracing 改进
|
||||||
|
|
||||||
|
- View Descriptor Heap 扩展到 250k 描述符
|
||||||
|
- BLAS Compaction 支持(减少加速结构内存占用)
|
||||||
|
- PSO 缓存改进
|
||||||
|
|
||||||
|
## Buffer Staging
|
||||||
|
|
||||||
|
改进 GPU Readback 的 Staging Buffer 管理,减少 CPU-GPU 同步开销。
|
||||||
|
|
||||||
|
## Back Buffer 引用
|
||||||
|
|
||||||
|
安全处理 Presentable Texture 的引用计数,防止拷贝操作时的悬空引用。
|
||||||
|
|
||||||
|
## D3D12RHIBridge
|
||||||
|
|
||||||
|
新增 `D3D12RHIBridge.h`,暴露底层接口供外部模块使用:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// 获取图形命令列表和队列
|
||||||
|
GetGfxCommandListAndQueue();
|
||||||
|
|
||||||
|
// 获取拷贝命令队列
|
||||||
|
GetCopyCommandQueue();
|
||||||
|
```
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
涉及 `Source/Runtime/D3D12RHI/` 下约 60 个文件,主要覆盖:
|
||||||
|
- `Private/D3D12Commands.cpp` — CommandList 执行
|
||||||
|
- `Private/D3D12PipelineState.cpp` — PSO 缓存
|
||||||
|
- `Private/D3D12Texture.cpp` — 纹理池
|
||||||
|
- `Private/D3D12RayTracing.cpp` — RT 改进
|
||||||
|
- `Public/D3D12RHIBridge.h` — **新增**
|
||||||
35
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/D3D12RHI/提交间隔记录器.md
Normal file
35
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/D3D12RHI/提交间隔记录器.md
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
title: 提交间隔记录器
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: D3D12 Submission Gap Recorder,追踪 GPU 帧间提交间隔用于性能分析
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- D3D12RHI
|
||||||
|
- Profiling
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# 提交间隔记录器
|
||||||
|
|
||||||
|
返回 [[D3D12RHI]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
Submission Gap Recorder(`D3D12_SUBMISSION_GAP_RECORDER`)是一个 GPU 性能分析系统,记录 D3D12 Command List 提交之间的间隔时间,用于识别 CPU-GPU 同步瓶颈和提交延迟。
|
||||||
|
|
||||||
|
## 功能
|
||||||
|
|
||||||
|
- 记录每帧 Command List 提交的时间戳
|
||||||
|
- 计算相邻提交之间的间隔(Gap)
|
||||||
|
- 识别异常长的提交间隔(可能的 CPU stall 或 GPU bubble)
|
||||||
|
- 提供统计数据用于性能优化
|
||||||
|
|
||||||
|
## 使用场景
|
||||||
|
|
||||||
|
- 分析格斗游戏中的帧率卡顿原因
|
||||||
|
- 排查 CPU 提交瓶颈
|
||||||
|
- 验证多线程命令录制的效率
|
||||||
|
|
||||||
|
## 修改文件
|
||||||
|
|
||||||
|
涉及 D3D12RHI 模块多个文件,主要在命令列表管理和提交路径中插入时间戳记录点。
|
||||||
33
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Gameplay/Gameplay.md
Normal file
33
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Gameplay/Gameplay.md
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
title: Gameplay
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: ARC 引擎游戏性系统修改分类索引
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Gameplay
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# Gameplay — 游戏性系统
|
||||||
|
|
||||||
|
返回 [[ARC引擎修改总览]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎为格斗游戏新增了场景视图分层、全局 Shader 数据管线、相机控制扩展和引擎回调接口等游戏性支撑系统。
|
||||||
|
|
||||||
|
## 功能列表
|
||||||
|
|
||||||
|
| 功能 | 文档 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| RED 场景视图类型 | [[RED场景视图类型]] | 角色/特效/背景/HUD 分层渲染 |
|
||||||
|
| REDSceneContext | [[REDSceneContext]] | 全局 Shader 数据管线 |
|
||||||
|
| 相机系统扩展 | [[相机系统扩展]] | 水平翻转、自动释放 |
|
||||||
|
| UEI 事件系统 | [[UEI事件系统]] | 引擎回调接口 |
|
||||||
|
|
||||||
|
## 其他小修改
|
||||||
|
|
||||||
|
- **方向光**:`bIgnoreResetBuildLighting` — 旋转方向光时不重置 Lightmap
|
||||||
|
- **纹理 LOD**:`AdditionalLODBias` — 逐场景 LOD 偏移用于内存管理
|
||||||
|
- **存档路径**:`/RED/` → `/GGST/` 路径重映射,Beta 构建独立存档
|
||||||
|
- **构建标记**:`BUILD_ASW_BETA` 定义
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
---
|
||||||
|
title: REDSceneContext
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 全局 Shader 数据管线,提供 BGMultColor、灾害效果等 Shader 可访问数据
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Gameplay
|
||||||
|
- Rendering
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# REDSceneContext
|
||||||
|
|
||||||
|
返回 [[Gameplay]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
`UREDSceneContext` 是 ARC 引擎的全局 Shader 数据管线,将游戏逻辑层的数据传递给 Shader 使用。它是一个 UObject,可以在蓝图和 C++ 中设置参数,数据通过 `ViewUniformShaderParameters` 传入 GPU。
|
||||||
|
|
||||||
|
## 提供的数据
|
||||||
|
|
||||||
|
| 参数 | 类型 | 用途 |
|
||||||
|
|------|------|------|
|
||||||
|
| `BGMultColor` | FLinearColor | [[BGMultColor全局色调]]:场景颜色乘算 + 饱和度 |
|
||||||
|
| `DisasterPosition` | FVector | 灾害效果中心位置(场景破坏特效) |
|
||||||
|
| `DisasterWind` | FVector | 灾害风力方向和强度 |
|
||||||
|
| `DisasterQuake` | float | 灾害震动强度 |
|
||||||
|
| `GameTime` | float | 游戏时间(用于 Shader 动画) |
|
||||||
|
| `BGTime` | float | 背景时间(可独立于 GameTime) |
|
||||||
|
|
||||||
|
## 数据流
|
||||||
|
|
||||||
|
```
|
||||||
|
游戏逻辑 (Blueprint/C++)
|
||||||
|
↓ 设置 UREDSceneContext 参数
|
||||||
|
REDSceneContext
|
||||||
|
↓ SceneRendering.cpp 读取
|
||||||
|
ViewUniformShaderParameters
|
||||||
|
↓ Upload to GPU
|
||||||
|
Shader (View.BGMultColor, View.DisasterPosition, ...)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 灾害效果系统
|
||||||
|
|
||||||
|
`DisasterPosition`、`DisasterWind`、`DisasterQuake` 三个参数用于格斗游戏中的必杀技演出——场景因攻击而震动、风吹、变形等效果,由 Shader 读取这些参数来驱动场景顶点动画和粒子。
|
||||||
|
|
||||||
|
## 关联文档
|
||||||
|
|
||||||
|
- [[BGMultColor全局色调]] — 使用 `BGMultColor` 参数
|
||||||
|
- [[RED场景视图类型]] — 场景分层与 Context 配合
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Source/Runtime/Engine/Public/REDSceneContext.h` | **新增** |
|
||||||
|
| `Source/Runtime/Renderer/Private/SceneRendering.cpp` | 读取 Context 写入 ViewUniform |
|
||||||
62
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Gameplay/RED场景视图类型.md
Normal file
62
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Gameplay/RED场景视图类型.md
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
---
|
||||||
|
title: RED场景视图类型
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 角色/特效/背景/HUD 分层渲染系统
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Gameplay
|
||||||
|
- Rendering
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# RED 场景视图类型
|
||||||
|
|
||||||
|
返回 [[Gameplay]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
新增 `EREDSceneViewType` 枚举,将场景中的 Actor 按类型分层,允许选择性渲染特定层级。格斗游戏中常用于:角色和背景使用不同的后处理参数、特效层独立控制、HUD 层分离等。
|
||||||
|
|
||||||
|
## 视图类型
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
enum class EREDSceneViewType
|
||||||
|
{
|
||||||
|
REDSceneView_Character, // 角色层
|
||||||
|
REDSceneView_Effect, // 特效层
|
||||||
|
REDSceneView_BG, // 背景层(主)
|
||||||
|
REDSceneView_BG_Layer1, // 背景分层 1
|
||||||
|
REDSceneView_BG_Layer2, // 背景分层 2
|
||||||
|
// ... Layer3 ~ Layer8
|
||||||
|
REDSceneView_HUD // HUD 层
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## 使用方式
|
||||||
|
|
||||||
|
### Actor 端
|
||||||
|
|
||||||
|
每个 Actor 拥有 `REDSceneViewType` 属性,在编辑器中设置所属层级。
|
||||||
|
|
||||||
|
### 渲染端
|
||||||
|
|
||||||
|
`PlayerController::GetREDSceneViewTypeFlag()` 返回当前需要渲染的层级位掩码,Scene Visibility 阶段根据此掩码过滤 Actor。
|
||||||
|
|
||||||
|
### 排序键
|
||||||
|
|
||||||
|
自定义排序键影响渲染顺序,确保分层正确。
|
||||||
|
|
||||||
|
## 使用场景
|
||||||
|
|
||||||
|
- 角色层独立使用 [[BGMultColor全局色调]] 而不影响背景
|
||||||
|
- 背景多层分离实现视差效果
|
||||||
|
- 特效层独立的 Bloom 和后处理参数
|
||||||
|
- 对战 UI(血条等)使用 HUD 层,不受场景后处理影响
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Source/Runtime/Engine/Public/EngineTypes.h` | `EREDSceneViewType` 枚举 |
|
||||||
|
| `Source/Runtime/Engine/Classes/GameFramework/PlayerController.h` | `GetREDSceneViewTypeFlag()` |
|
||||||
|
| `Source/Runtime/Renderer/Private/SceneVisibility.cpp` | 可见性过滤 |
|
||||||
64
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Gameplay/UEI事件系统.md
Normal file
64
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Gameplay/UEI事件系统.md
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
---
|
||||||
|
title: UEI事件系统
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 引擎回调接口,提供帧生命周期和输入处理钩子
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Gameplay
|
||||||
|
- Framework
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# UEI 事件系统
|
||||||
|
|
||||||
|
返回 [[Gameplay]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
UEI(Unreal Engine Interface)事件系统提供了游戏逻辑与引擎生命周期之间的回调接口。它在引擎的关键时间点触发回调,让游戏层能精确控制帧内的执行时序。
|
||||||
|
|
||||||
|
## FUEIEventHandler
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// UEIEventHandler.h
|
||||||
|
class FUEIEventHandler
|
||||||
|
{
|
||||||
|
// 帧生命周期回调
|
||||||
|
void BeginFrame();
|
||||||
|
void EndFrame();
|
||||||
|
void Update();
|
||||||
|
|
||||||
|
// 输入处理钩子
|
||||||
|
// 格斗游戏需要在精确的时间点采样输入
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## FUEISlateApplication
|
||||||
|
|
||||||
|
继承 `FSlateApplication`,扩展输入管理:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
class FUEISlateApplication : public FSlateApplication
|
||||||
|
{
|
||||||
|
// User/Controller ID 映射
|
||||||
|
TMap<int32, int32> UserIndexMap;
|
||||||
|
|
||||||
|
// 格斗游戏多手柄输入分配
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
格斗游戏中两个玩家可能使用不同的控制器,`UserIndexMap` 负责将物理控制器 ID 映射到游戏内的玩家 ID。
|
||||||
|
|
||||||
|
## 使用场景
|
||||||
|
|
||||||
|
- 格斗游戏帧同步:在精确的帧时间点采样输入
|
||||||
|
- 回放系统:按帧记录和回放输入
|
||||||
|
- 控制器热插拔处理
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Source/Runtime/Engine/Public/UEIEventHandler.h` | **新增** |
|
||||||
|
| `Source/Runtime/Slate/Public/Framework/Application/UEISlateApplication.h` | **新增** |
|
||||||
|
| `Source/Runtime/Slate/Private/Framework/Application/UEISlateApplication.cpp` | **新增** |
|
||||||
40
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Gameplay/相机系统扩展.md
Normal file
40
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Gameplay/相机系统扩展.md
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
title: 相机系统扩展
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 相机动画水平翻转和自动释放机制
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Gameplay
|
||||||
|
- Camera
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# 相机系统扩展
|
||||||
|
|
||||||
|
返回 [[Gameplay]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
为格斗游戏的相机需求扩展了 `CameraAnimInst`。
|
||||||
|
|
||||||
|
## 水平翻转(bPlayCameraAnimFlipH)
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
bool bPlayCameraAnimFlipH;
|
||||||
|
```
|
||||||
|
|
||||||
|
在格斗游戏中,当玩家 1 和玩家 2 交换左右位置时(交叉),相机动画需要水平翻转以保持视觉一致性。此标记控制相机震动、特写等动画的水平翻转。
|
||||||
|
|
||||||
|
## 自动释放(bAutoReleaseWhenFinished)
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
bool bAutoReleaseWhenFinished;
|
||||||
|
```
|
||||||
|
|
||||||
|
相机动画播放完毕后自动释放实例,避免格斗游戏频繁的相机震动(受击、必杀技等)导致的实例泄漏。
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Source/Runtime/Engine/Classes/Camera/CameraAnimInst.h` | 新增标记 |
|
||||||
40
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Particle/Particle.md
Normal file
40
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Particle/Particle.md
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
title: Particle
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: ARC 引擎粒子系统修改分类索引
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Particle
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# Particle — 粒子系统
|
||||||
|
|
||||||
|
返回 [[ARC引擎修改总览]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎对粒子系统的修改较为集中,主要新增了粒子驱动的点光源接口和静态网格切换功能。
|
||||||
|
|
||||||
|
## 功能列表
|
||||||
|
|
||||||
|
| 功能 | 文档 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| 粒子点光源系统 | [[粒子点光源系统]] | IREDPointLightInterface + 静态网格切换 |
|
||||||
|
|
||||||
|
## 其他修改
|
||||||
|
|
||||||
|
### MeshParticle VertexFactory 修复
|
||||||
|
|
||||||
|
修复 4.25 版本的 MeshParticle 放置 Bug:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
// MeshParticleVertexFactory.ush
|
||||||
|
#if !PARTICLE_MESH_INSTANCED
|
||||||
|
Result.InstanceLocalToWorld = Primitive_LocalToWorld;
|
||||||
|
#else
|
||||||
|
Result.InstanceLocalToWorld = ParticleTransform;
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
非实例化模式下使用 `Primitive_LocalToWorld` 而非 `ParticleTransform`。
|
||||||
68
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Particle/粒子点光源系统.md
Normal file
68
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Particle/粒子点光源系统.md
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
title: 粒子点光源系统
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: IREDPointLightInterface 粒子驱动点光源和静态网格切换模块
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Particle
|
||||||
|
- Lighting
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# 粒子点光源系统
|
||||||
|
|
||||||
|
返回 [[Particle]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
新增 `IREDPointLightInterface` 接口,允许粒子系统动态创建和管理点光源。格斗游戏中的特效(火焰、电击、能量弹等)需要动态光照来增强视觉表现。
|
||||||
|
|
||||||
|
## IREDPointLightInterface
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// REDParticlePointLightUtilities.h
|
||||||
|
class IREDPointLightInterface
|
||||||
|
{
|
||||||
|
// 点光源参数
|
||||||
|
FVector Location; // 位置
|
||||||
|
FLinearColor LightColor; // 光照颜色
|
||||||
|
FLinearColor AmbientColor; // 环境光颜色
|
||||||
|
float Amplitude; // 强度振幅(闪烁)
|
||||||
|
float Frequency; // 闪烁频率
|
||||||
|
float Attenuation; // 衰减
|
||||||
|
float Range; // 范围
|
||||||
|
float Cutoff; // 截止距离
|
||||||
|
float DistanceMultiply; // 距离乘数
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
## 特性
|
||||||
|
|
||||||
|
- 粒子生命周期绑定——粒子消亡时自动移除对应点光源
|
||||||
|
- 支持振幅和频率控制的闪烁效果
|
||||||
|
- 衰减和截止距离独立控制
|
||||||
|
|
||||||
|
## 静态网格切换模块
|
||||||
|
|
||||||
|
新增 `UParticleModuleStaticMeshSwitch`:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// 根据 SubImage Index 切换粒子使用的静态网格 Section
|
||||||
|
// 类似 SubUV 的概念但用于 3D 网格的不同部分
|
||||||
|
```
|
||||||
|
|
||||||
|
用于格斗游戏特效中:同一个粒子发射器根据阶段显示不同形状的网格(如能量球从小到大变形)。
|
||||||
|
|
||||||
|
## 关联文档
|
||||||
|
|
||||||
|
- [[RED阴影系统]] — 点光源的阴影着色
|
||||||
|
- [[RED自定义数据通道]] — 点光源模式下 CustomData 的使用
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Source/Runtime/Engine/Public/REDParticlePointLightUtilities.h` | **新增** |
|
||||||
|
| `Source/Runtime/Engine/Private/Particles/REDParticlePointLightUtilities.cpp` | **新增** |
|
||||||
|
| `Source/Runtime/Engine/Private/Particles/ParticleModuleStaticMeshSwitch.cpp` | **新增** |
|
||||||
|
| `Shaders/Private/MeshParticleVertexFactory.ush` | Bug 修复 |
|
||||||
58
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Platform/PS4支持.md
Normal file
58
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Platform/PS4支持.md
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
---
|
||||||
|
title: PS4支持
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: PS4 平台 PSSL Shader 兼容层、HDR Resolve 和平台特化着色器
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Platform
|
||||||
|
- PS4
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# PS4 支持
|
||||||
|
|
||||||
|
返回 [[Platform]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
为 PS4(Orbis)平台提供完整的 Shader 兼容层和平台特化着色器。
|
||||||
|
|
||||||
|
## PSSL 兼容层
|
||||||
|
|
||||||
|
`Public/Platform/PS4/PS4Common.ush` 提供 HLSL → PSSL(PlayStation Shader Language)的映射:
|
||||||
|
|
||||||
|
- 数据类型映射(`float4` → PSSL 等效)
|
||||||
|
- Sampler 设置(各向异性过滤、比较采样器)
|
||||||
|
- Wave Intrinsics 映射(`WaveActiveSum`、`WaveActiveBallot` 等)
|
||||||
|
- 纹理采样函数兼容
|
||||||
|
|
||||||
|
## 平台特化着色器
|
||||||
|
|
||||||
|
`Private/Platform/PS4/` 目录包含 6 个平台着色器:
|
||||||
|
|
||||||
|
| 文件 | 用途 |
|
||||||
|
|------|------|
|
||||||
|
| HDR Resolve | 高动态范围缓冲区解析 |
|
||||||
|
| RT Write Mask | Render Target 写入遮罩 |
|
||||||
|
| Wide Custom Resolve | 宽格式自定义解析 |
|
||||||
|
|
||||||
|
## DOF 修复
|
||||||
|
|
||||||
|
`PostProcessDOF.usf` 中的 PS4 特化修改:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
#if !MOBILE_SHADING
|
||||||
|
// PS4: ReadFullResAndDepth 函数签名调整
|
||||||
|
float4 ReadFullResAndDepth(float2 UV, float Depth)
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
以及 `RED_CHANGE` 深度 Gather 优化。
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Public/Platform/PS4/PS4Common.ush` | **新增** — PSSL 兼容层 |
|
||||||
|
| `Shaders/Private/Platform/PS4/` (6 files) | **新增** — 平台着色器 |
|
||||||
|
| `Shaders/Private/PostProcessDOF.usf` | PS4 DOF 修复 |
|
||||||
47
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Platform/PS5支持.md
Normal file
47
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Platform/PS5支持.md
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
---
|
||||||
|
title: PS5支持
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: PS5 Feature Level 定义和 GBuffer 格式适配
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Platform
|
||||||
|
- PS5
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# PS5 支持
|
||||||
|
|
||||||
|
返回 [[Platform]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
PS5 平台的修改相对较少,主要是 Feature Level 定义和 GBuffer 格式的平台差异处理。
|
||||||
|
|
||||||
|
## Feature Level
|
||||||
|
|
||||||
|
在 `Public/Platform.ush` 中为 PS5 添加 SM5 Feature Level:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
#elif PS5_PROFILE
|
||||||
|
#define FEATURE_LEVEL FEATURE_LEVEL_SM5
|
||||||
|
```
|
||||||
|
|
||||||
|
## GBuffer 格式适配
|
||||||
|
|
||||||
|
Specular GBuffer 在 PS5 上保持标准格式,仅在非 PS5 平台降级为 `PF_A8`:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// SceneRenderTargets.cpp
|
||||||
|
#if !PS5_PLATFORM
|
||||||
|
SpecularGBufferFormat = PF_A8; // 降低精度节省带宽
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
参见 [[GBuffer修改]]。
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Public/Platform.ush` | Feature Level 定义 |
|
||||||
|
| `Source/Runtime/Renderer/Private/SceneRenderTargets.cpp` | GBuffer 格式判断 |
|
||||||
25
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Platform/Platform.md
Normal file
25
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Platform/Platform.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
title: Platform
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: ARC 引擎平台支持修改分类索引(PS4/PS5/Xbox One)
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Platform
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# Platform — 平台支持
|
||||||
|
|
||||||
|
返回 [[ARC引擎修改总览]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎为主机平台(PS4、PS5、Xbox One)添加了 Shader 兼容层和平台特化代码,确保卡通渲染管线在各平台上正确运行。
|
||||||
|
|
||||||
|
## 功能列表
|
||||||
|
|
||||||
|
| 功能 | 文档 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| PS4 支持 | [[PS4支持]] | PSSL 兼容层、HDR Resolve、RT Write Mask |
|
||||||
|
| PS5 支持 | [[PS5支持]] | Feature Level 定义、GBuffer 格式适配 |
|
||||||
|
| Xbox One 支持 | [[XboxOne支持]] | HLSL 兼容层、Wave Intrinsics |
|
||||||
36
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Platform/XboxOne支持.md
Normal file
36
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Platform/XboxOne支持.md
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
title: XboxOne支持
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: Xbox One 平台 Shader 兼容层
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Platform
|
||||||
|
- XboxOne
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# Xbox One 支持
|
||||||
|
|
||||||
|
返回 [[Platform]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
为 Xbox One 平台提供 Shader 兼容层。
|
||||||
|
|
||||||
|
## HLSL 兼容层
|
||||||
|
|
||||||
|
`Public/Platform/XboxOne/XboxOneCommon.ush` 提供:
|
||||||
|
- Xbox One GPU 特有的 Wave Intrinsics 映射
|
||||||
|
- Sampler 和纹理采样兼容
|
||||||
|
- HLSL Shader Model 差异处理
|
||||||
|
|
||||||
|
## D3D12RHI 平台代码
|
||||||
|
|
||||||
|
`Source/Runtime/D3D12RHI/Private/XboxOne/` 目录(空占位),预留 Xbox One 平台的 D3D12 RHI 特化代码。
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Public/Platform/XboxOne/XboxOneCommon.ush` | **新增** — 兼容层 |
|
||||||
|
| `Source/Runtime/D3D12RHI/Private/XboxOne/` | **新增** — 空占位目录 |
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
---
|
||||||
|
title: BGMultColor全局色调
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 场景全局颜色乘算/去饱和度系统
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Rendering
|
||||||
|
- ColorGrading
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# BGMultColor 全局色调
|
||||||
|
|
||||||
|
返回 [[Rendering]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
BGMultColor 是一个场景级别的全局色调控制系统,通过 `View.BGMultColor` 统一对场景颜色进行乘算和饱和度调节。在格斗游戏中常用于:关卡背景的整体色调控制、特殊技能释放时的画面变化、回合结束的灰度效果等。
|
||||||
|
|
||||||
|
## Shader 端实现
|
||||||
|
|
||||||
|
在 `BasePassPixelShader.usf` 中(对 Opaque 和 Translucent 均生效):
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
#if USE_BGMULTCOLOR
|
||||||
|
{
|
||||||
|
// RGB 通道:颜色乘算
|
||||||
|
BaseColor *= View.BGMultColor.rgb;
|
||||||
|
|
||||||
|
// A 通道:饱和度控制(1=原色,0=灰度)
|
||||||
|
float Grayscale = dot(BaseColor, float3(0.299f, 0.587f, 0.114f));
|
||||||
|
BaseColor = lerp(
|
||||||
|
float3(Grayscale, Grayscale, Grayscale),
|
||||||
|
BaseColor,
|
||||||
|
View.BGMultColor.a);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
相同逻辑也应用于:
|
||||||
|
- `DeferredDecal.usf` — 贴花系统
|
||||||
|
- `DeferredLightPixelShaders.usf` — 点光源着色
|
||||||
|
|
||||||
|
## C++ 端数据源
|
||||||
|
|
||||||
|
`BGMultColor` 通过 `REDSceneContext` 设置,经由 `ViewUniformShaderParameters` 传入 Shader。参见 [[REDSceneContext]]。
|
||||||
|
|
||||||
|
## 参数说明
|
||||||
|
|
||||||
|
| 分量 | 范围 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| R | 0~∞ | 红色乘数 |
|
||||||
|
| G | 0~∞ | 绿色乘数 |
|
||||||
|
| B | 0~∞ | 蓝色乘数 |
|
||||||
|
| A | 0~1 | 饱和度(0=完全灰度,1=原色) |
|
||||||
|
|
||||||
|
## 关联文档
|
||||||
|
|
||||||
|
- [[REDSceneContext]] — BGMultColor 的数据源
|
||||||
|
- [[自定义后处理]] — 后处理阶段的色彩控制
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Private/BasePassPixelShader.usf` | 颜色乘算 + 去饱和 |
|
||||||
|
| `Shaders/Private/DeferredDecal.usf` | 同上 |
|
||||||
|
| `Shaders/Private/DeferredLightPixelShaders.usf` | 点光源颜色调制 |
|
||||||
|
| `Source/Runtime/Renderer/Private/SceneRendering.cpp` | 写入 ViewUniform |
|
||||||
86
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/BasePass修改.md
Normal file
86
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/BasePass修改.md
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
---
|
||||||
|
title: BasePass修改
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 强制 PrePass、阴影 Only 材质、X2Multiply 雾效等 BasePass 层面修改
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Rendering
|
||||||
|
- BasePass
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# BasePass 修改
|
||||||
|
|
||||||
|
返回 [[Rendering]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎在 BasePass 层面做了多项针对性修改,包括强制 Early-Z 预通道、阴影专用材质和自定义混合模式的雾效处理。
|
||||||
|
|
||||||
|
## 1. 阴影专用材质(RED_MASKED_SHADOW_ONLY)
|
||||||
|
|
||||||
|
让材质只产生阴影投射而不渲染可见像素:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
#if RED_MASKED_SHADOW_ONLY
|
||||||
|
clip(-1); // 直接丢弃像素
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
用于格斗游戏中只需要地面阴影但不需要渲染实体的辅助网格。
|
||||||
|
|
||||||
|
## 2. 强制 Early-Z(EARLY_Z_PASS_FORCED)
|
||||||
|
|
||||||
|
由 [[自定义材质属性]] 中的 `bForcedPrepass` 控制,强制特定材质走 Early-Z PrePass:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// BasePassRendering.cpp
|
||||||
|
if (Material.bForcedPrepass)
|
||||||
|
{
|
||||||
|
// 强制深度 Pass,提前剔除被遮挡像素
|
||||||
|
// 减少 OverDraw 对卡通渲染管线的性能影响
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
标记来源:ASW / Wizcorp (2022)。
|
||||||
|
|
||||||
|
## 3. X2Multiply 雾效
|
||||||
|
|
||||||
|
为 `BLEND_X2Multiply` 混合模式提供正确的雾效混合:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
#elif MATERIALBLENDING_X2MULTIPLY
|
||||||
|
// X2Multiply 的中性色是 0.5(不是 0 或 1)
|
||||||
|
half3 FoggedColor = lerp(
|
||||||
|
float3(0.5, 0.5, 0.5),
|
||||||
|
Color,
|
||||||
|
Fogging.aaa * Fogging.aaa);
|
||||||
|
Out.MRT[0] = half4(FoggedColor, Opacity);
|
||||||
|
```
|
||||||
|
|
||||||
|
标准 Multiply 中性色为 1.0,X2Multiply 中性色为 0.5。
|
||||||
|
|
||||||
|
## 4. PixelDepthOffset 修复
|
||||||
|
|
||||||
|
修复 PC 平台 PixelDepthOffset 的噪声问题:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
// MaterialTemplate.ush
|
||||||
|
DeviceDepth = lerp(
|
||||||
|
DeviceDepth,
|
||||||
|
MaterialParameters.SvPosition.z,
|
||||||
|
step(PixelDepthOffset, 0)); // PDO <= 0 时使用原始深度
|
||||||
|
```
|
||||||
|
|
||||||
|
## 关联文档
|
||||||
|
|
||||||
|
- [[自定义材质属性]] — `bForcedPrepass` 和 `BLEND_X2Multiply`
|
||||||
|
- [[RED自定义数据通道]] — BasePass 中 CustomData 的写入
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Private/BasePassPixelShader.usf` | 阴影 Only、X2Multiply 雾效 |
|
||||||
|
| `Source/Runtime/Renderer/Private/BasePassRendering.cpp` | 强制 PrePass、X2Multiply BlendState |
|
||||||
|
| `Shaders/Private/MaterialTemplate.ush` | PDO 修复 |
|
||||||
65
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/GBuffer修改.md
Normal file
65
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/GBuffer修改.md
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
---
|
||||||
|
title: GBuffer修改
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: GBufferD 清除色、Specular 格式和法线 GBuffer 格式调整
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Rendering
|
||||||
|
- GBuffer
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# GBuffer 修改
|
||||||
|
|
||||||
|
返回 [[Rendering]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎对 GBuffer 进行了多处细节修改,主要围绕 CustomData 通道(GBufferD)的清除色、Specular GBuffer 格式和法线格式。
|
||||||
|
|
||||||
|
## 修改内容
|
||||||
|
|
||||||
|
### 1. GBufferD 清除色
|
||||||
|
|
||||||
|
将 GBufferD 的清除色从默认值改为 `(0, 0, 0, 0)`:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// SceneRenderTargets.cpp
|
||||||
|
// GBufferD 清除为黑色,确保 OutlineID 和 PointLight 数据的默认值为 0
|
||||||
|
ClearColor = FLinearColor(0, 0, 0, 0);
|
||||||
|
```
|
||||||
|
|
||||||
|
这确保未被写入 [[RED自定义数据通道]] 的像素不会产生错误的轮廓线 ID 或辉光遮罩。
|
||||||
|
|
||||||
|
### 2. Specular GBuffer 格式
|
||||||
|
|
||||||
|
在非 PS5 平台上,Specular GBuffer 格式改为 `PF_A8`:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// 非 PS5 平台使用 8 位精度
|
||||||
|
SpecularGBufferFormat = PF_A8;
|
||||||
|
```
|
||||||
|
|
||||||
|
降低 Specular 精度以节省带宽,对卡通渲染影响极小(Specular 在 Toon 着色中通常使用阶梯化而非平滑过渡)。
|
||||||
|
|
||||||
|
### 3. PostProcessDownsample Alpha
|
||||||
|
|
||||||
|
在 `PostProcessDownsample.usf` 中强制 Alpha 为 1.0:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
OutColor.a = 1.f;
|
||||||
|
```
|
||||||
|
|
||||||
|
防止降采样过程中 Alpha 通道携带的 CustomData 信息影响后续后处理。
|
||||||
|
|
||||||
|
## 关联文档
|
||||||
|
|
||||||
|
- [[RED自定义数据通道]] — GBufferD 的数据写入方
|
||||||
|
- [[自定义后处理]] — 读取 GBufferD 数据
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Source/Runtime/Renderer/Private/SceneRenderTargets.cpp` | GBufferD 清除色、Specular 格式 |
|
||||||
|
| `Shaders/Private/PostProcessDownsample.usf` | Alpha 强制为 1.0 |
|
||||||
130
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/RED自定义数据通道.md
Normal file
130
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/RED自定义数据通道.md
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
---
|
||||||
|
title: RED自定义数据通道
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 复用 GBuffer CustomData 通道存储轮廓线 ID 和点光源 DiffuseColor
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Rendering
|
||||||
|
- GBuffer
|
||||||
|
- Toon
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# RED 自定义数据通道
|
||||||
|
|
||||||
|
返回 [[Rendering]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
RED 自定义数据通道是 ARC 引擎中一个巧妙的 GBuffer 复用方案。它将 UE4 原有的 **Subsurface Scattering** 数据通道(GBufferD CustomData)重新用于存储卡通渲染所需的**轮廓线 ID** 和**点光源 DiffuseColor**,避免了新增 GBuffer 通道带来的带宽开销。
|
||||||
|
|
||||||
|
## 控制宏
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
// Definitions.usf
|
||||||
|
#ifndef USE_RED_CUSTOM_DATA_POINTLIGHT
|
||||||
|
#define USE_RED_CUSTOM_DATA_POINTLIGHT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef USE_RED_CUSTOM_DATA
|
||||||
|
#define USE_RED_CUSTOM_DATA USE_RED_CUSTOM_DATA_POINTLIGHT
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
两个模式:
|
||||||
|
- `USE_RED_CUSTOM_DATA` — 基础模式,存储轮廓线 ID(从 SubsurfaceData.b 通道读取)
|
||||||
|
- `USE_RED_CUSTOM_DATA_POINTLIGHT` — 点光源模式,存储 Emissive 作为 DiffuseColor
|
||||||
|
|
||||||
|
## 数据写入流程
|
||||||
|
|
||||||
|
### 1. 启用 CustomData 写入
|
||||||
|
|
||||||
|
在 `BasePassCommon.ush` 中,将 `USE_RED_CUSTOM_DATA` 加入 `WRITES_CUSTOMDATA_TO_GBUFFER` 条件:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
#define WRITES_CUSTOMDATA_TO_GBUFFER (USES_GBUFFER && (
|
||||||
|
MATERIAL_SHADINGMODEL_SUBSURFACE ||
|
||||||
|
MATERIAL_SHADINGMODEL_SUBSURFACE_PROFILE ||
|
||||||
|
... ||
|
||||||
|
USE_RED_CUSTOM_DATA ))
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 填充 CustomData
|
||||||
|
|
||||||
|
在 `ShadingModelsMaterial.ush` 中,为 `UNLIT` 和 `DEFAULT_LIT` 两个 ShadingModel 注入自定义数据:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
#if MATERIAL_SHADINGMODEL_UNLIT
|
||||||
|
GBuffer.ShadingModelID = SHADINGMODELID_UNLIT;
|
||||||
|
#if USE_RED_CUSTOM_DATA
|
||||||
|
GBuffer.CustomData = float4(SubsurfaceColor, SubsurfaceProfile);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif MATERIAL_SHADINGMODEL_DEFAULT_LIT
|
||||||
|
GBuffer.ShadingModelID = SHADINGMODELID_DEFAULT_LIT;
|
||||||
|
#if USE_RED_CUSTOM_DATA
|
||||||
|
GBuffer.CustomData = float4(SubsurfaceColor, SubsurfaceProfile);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. SubsurfaceColor 的实际含义
|
||||||
|
|
||||||
|
在 `BasePassPixelShader.usf` 中,SubsurfaceColor 被重新赋值:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
#if USE_RED_CUSTOM_DATA
|
||||||
|
{
|
||||||
|
#if USE_RED_CUSTOM_DATA_POINTLIGHT
|
||||||
|
// 点光源模式:Emissive 作为 DiffuseColor
|
||||||
|
SubsurfaceColor = Emissive;
|
||||||
|
SubsurfaceProfile = 0.0;
|
||||||
|
#else
|
||||||
|
// 基础模式:B 通道存储 OutlineID
|
||||||
|
float4 SubsurfaceData = GetMaterialSubsurfaceData(PixelMaterialInputs);
|
||||||
|
SubsurfaceColor = float3(0, 0, 0);
|
||||||
|
SubsurfaceProfile = SubsurfaceData.b; // OutlineID
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 写入 GBufferD
|
||||||
|
|
||||||
|
在 `DeferredShadingCommon.ush` 中:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
#if USE_RED_CUSTOM_DATA
|
||||||
|
OutGBufferD = GBuffer.CustomData;
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
## 数据读取
|
||||||
|
|
||||||
|
- **轮廓线渲染**:从 GBufferD.b 读取 OutlineID,用于区分不同物体的轮廓线参数
|
||||||
|
- **点光源着色**:从 GBufferD.rgb 读取 DiffuseColor,用于 [[RED阴影系统]] 的阴影着色
|
||||||
|
- **角色辉光**:[[自定义后处理]] 中的 CharaGlow 读取 GBufferD.b 作为辉光遮罩
|
||||||
|
|
||||||
|
## 设计权衡
|
||||||
|
|
||||||
|
| 优点 | 缺点 |
|
||||||
|
|------|------|
|
||||||
|
| 零额外 GBuffer 带宽开销 | 无法同时使用 SSS 材质 |
|
||||||
|
| 复用已有的 CustomData 管线 | UNLIT/DEFAULT_LIT 的 SubsurfaceColor 被占用 |
|
||||||
|
| 对渲染管线入侵性小 | 两种模式(基础/点光源)互斥 |
|
||||||
|
|
||||||
|
## 关联文档
|
||||||
|
|
||||||
|
- [[RED阴影系统]] — 点光源模式下 DiffuseColor 的使用方
|
||||||
|
- [[自定义后处理]] — CharaGlow 读取 OutlineID 通道
|
||||||
|
- [[GBuffer修改]] — GBufferD 清除色等相关修改
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Private/Definitions.usf` | 新增 `USE_RED_CUSTOM_DATA` 宏定义 |
|
||||||
|
| `Shaders/Private/BasePassCommon.ush` | 扩展 `WRITES_CUSTOMDATA_TO_GBUFFER` |
|
||||||
|
| `Shaders/Private/ShadingModelsMaterial.ush` | UNLIT/DEFAULT_LIT 写入 CustomData |
|
||||||
|
| `Shaders/Private/BasePassPixelShader.usf` | SubsurfaceColor 重定义逻辑 |
|
||||||
|
| `Shaders/Private/DeferredShadingCommon.ush` | GBufferD 写入 |
|
||||||
126
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/RED阴影系统.md
Normal file
126
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/RED阴影系统.md
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
---
|
||||||
|
title: RED阴影系统
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 动态/静态阴影分离着色系统,ARC 卡通渲染的核心阴影方案
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Rendering
|
||||||
|
- Shadow
|
||||||
|
- Toon
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# RED 阴影系统
|
||||||
|
|
||||||
|
返回 [[Rendering]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
RED 阴影系统是 ARC 引擎卡通渲染的核心机制。它将传统 Deferred Lighting 中的阴影处理替换为**阴影着色(Shadow Coloring)**方案——阴影区域不是简单地变暗,而是使用指定的"阴影颜色"进行着色,这是实现赛璐珞风格卡通渲染的关键技术。
|
||||||
|
|
||||||
|
## 核心思路
|
||||||
|
|
||||||
|
传统 PBR 阴影:`最终颜色 = 光照颜色 × 阴影衰减`
|
||||||
|
RED 阴影系统:`最终颜色 = lerp(阴影颜色, 光照颜色, 阴影系数)`
|
||||||
|
|
||||||
|
同时将**动态阴影**(Shadow Map)和**静态阴影**(Lightmap / Distance Field Shadow)分离处理,允许独立控制两种阴影的着色效果。
|
||||||
|
|
||||||
|
## 实现细节
|
||||||
|
|
||||||
|
### 1. 入口函数 REDDirectionalPixelMain
|
||||||
|
|
||||||
|
在 `DeferredLightPixelShaders.usf` 中新增独立的方向光入口:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
// ASW Change : 2016/10/12 21:35:18 Takuro.K
|
||||||
|
void REDDirectionalPixelMain(
|
||||||
|
float2 InUV : TEXCOORD0,
|
||||||
|
float3 ScreenVector : TEXCOORD1,
|
||||||
|
float4 SVPos : SV_POSITION,
|
||||||
|
out float4 OutColor : SV_Target0 )
|
||||||
|
{
|
||||||
|
// ... 读取 GBuffer、计算光照衰减 ...
|
||||||
|
OutColor = REDGetShadowColor(
|
||||||
|
WorldPosition, CameraVector, ScreenSpaceData.GBuffer,
|
||||||
|
ScreenSpaceData.AmbientOcclusion,
|
||||||
|
ScreenSpaceData.GBuffer.ShadingModelID,
|
||||||
|
LightData, GetPerPixelLightAttenuation(InUV),
|
||||||
|
Random, DynamicShadowShade);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`DynamicShadowShade` 是一个 uniform 参数,控制动态阴影的明暗程度。
|
||||||
|
|
||||||
|
### 2. 阴影项分离 REDGetShadowTerms
|
||||||
|
|
||||||
|
在 `DeferredLightingCommon.ush` 中将阴影分解为动态和静态两个独立项:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
void REDGetShadowTerms(
|
||||||
|
FGBufferData GBuffer, FDeferredLightData LightData,
|
||||||
|
float3 WorldPosition, float4 LightAttenuation,
|
||||||
|
out float DynamicShadowTerm, out float StaticShadowTerm)
|
||||||
|
{
|
||||||
|
// 动态阴影:来自 Shadow Map
|
||||||
|
float DynamicShadowFraction = DistanceFromCameraFade(...);
|
||||||
|
DynamicShadowTerm = min(
|
||||||
|
lerp(LightAttenuation.x, 1.0f, DynamicShadowFraction),
|
||||||
|
StaticShadowing);
|
||||||
|
|
||||||
|
// 静态阴影:来自 Lightmap / Distance Field
|
||||||
|
StaticShadowTerm = StaticShadowing;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 阴影着色 REDGetShadowColor
|
||||||
|
|
||||||
|
核心函数——使用 `DiffuseColor`(存储在 GBufferD 的 CustomData 中)作为阴影颜色:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
float4 REDGetShadowColor(...)
|
||||||
|
{
|
||||||
|
float DynamicShadow, StaticShadow;
|
||||||
|
REDGetShadowTerms(GBuffer, LightData, WorldPosition,
|
||||||
|
LightAttenuation, DynamicShadow, StaticShadow);
|
||||||
|
|
||||||
|
// 动态阴影颜色 = DiffuseColor × DynamicShadowShade
|
||||||
|
float3 DynamicShadowColor = GBuffer.DiffuseColor * DynamicShadowShade;
|
||||||
|
|
||||||
|
// 静态阴影颜色 = DiffuseColor(不额外缩放)
|
||||||
|
float3 StaticShadowColor = GBuffer.DiffuseColor;
|
||||||
|
StaticShadowColor = lerp(StaticShadowColor, float3(1,1,1), StaticShadow);
|
||||||
|
|
||||||
|
return float4(
|
||||||
|
lerp(DynamicShadowColor, StaticShadowColor, DynamicShadow), 0.0f);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. PointLight 的 CustomData 使用
|
||||||
|
|
||||||
|
点光源渲染时,将 CustomData(原本存储轮廓线 ID 等数据)重新解释为 DiffuseColor:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
// ASW Change : 2020/01/14 20:19:00 Takeshi.N
|
||||||
|
ScreenSpaceData.GBuffer.DiffuseColor.rgb = ScreenSpaceData.GBuffer.CustomData.rgb;
|
||||||
|
```
|
||||||
|
|
||||||
|
## C++ 端支持
|
||||||
|
|
||||||
|
在 `LightRendering.cpp` 中:
|
||||||
|
- 新增 `REDDeferredLightPS` Pixel Shader 类,绑定 `DynamicShadowShade` 参数
|
||||||
|
- 点光源通过 `bPointLightRED` 排序键控制渲染顺序(排在方向光之后)
|
||||||
|
- `RED_CUSTOM_LIGHTING` 宏控制是否启用自定义光照路径
|
||||||
|
|
||||||
|
## 关联文档
|
||||||
|
|
||||||
|
- [[RED自定义数据通道]] — DiffuseColor 如何写入 GBufferD
|
||||||
|
- [[自定义光照Pass]] — REDDeferredLightPS 的 C++ 绑定
|
||||||
|
- [[BGMultColor全局色调]] — 场景全局色调叠加
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Private/DeferredLightPixelShaders.usf` | 新增 `REDDirectionalPixelMain` |
|
||||||
|
| `Shaders/Private/DeferredLightingCommon.ush` | 新增 `REDGetShadowTerms`、`REDGetShadowColor` |
|
||||||
|
| `Source/Runtime/Renderer/Private/LightRendering.cpp` | 新增 `REDDeferredLightPS`、点光排序 |
|
||||||
51
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/Rendering.md
Normal file
51
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/Rendering.md
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
---
|
||||||
|
title: Rendering
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: ARC 引擎渲染系统修改分类索引
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Rendering
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# Rendering — 渲染系统修改
|
||||||
|
|
||||||
|
返回 [[ARC引擎修改总览]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
渲染系统是 ARC 引擎修改量最大的部分,核心目标是实现**卡通/动画风格渲染管线**。修改覆盖了从材质系统、GBuffer、光照 Pass 到后处理的完整链路。
|
||||||
|
|
||||||
|
## 功能列表
|
||||||
|
|
||||||
|
| 功能 | 文档 | 复杂度 | 说明 |
|
||||||
|
|------|------|--------|------|
|
||||||
|
| RED 阴影系统 | [[RED阴影系统]] | 高 | 动态/静态阴影分离着色,卡通阴影核心 |
|
||||||
|
| RED 自定义数据通道 | [[RED自定义数据通道]] | 高 | 复用 GBuffer CustomData 存储轮廓线 ID 和点光源数据 |
|
||||||
|
| 正交投影混合 | [[正交投影混合]] | 高 | OrthoBlend 透视校正,动画风格透视扁平化 |
|
||||||
|
| 屏幕对齐网格 | [[屏幕对齐网格]] | 中 | 屏幕空间网格渲染,用于 UI/HUD 叠加 |
|
||||||
|
| 屏幕空间深度偏移 | [[屏幕空间深度偏移]] | 低 | 深度偏移防止 Z-fighting |
|
||||||
|
| 局部位置缩放 | [[局部位置缩放]] | 低 | 逐材质局部空间顶点缩放 |
|
||||||
|
| 自定义后处理 | [[自定义后处理]] | 高 | REDPostProcess:Diffusion Filter、角色辉光、自定义 DOF |
|
||||||
|
| BGMultColor 全局色调 | [[BGMultColor全局色调]] | 中 | 场景全局着色/去饱和度 |
|
||||||
|
| 自定义材质属性 | [[自定义材质属性]] | 高 | 新增 MaterialProperty、BlendMode、材质标记 |
|
||||||
|
| GBuffer 修改 | [[GBuffer修改]] | 中 | GBufferD 清除色、Specular 格式、法线格式调整 |
|
||||||
|
| 自定义光照 Pass | [[自定义光照Pass]] | 高 | REDDeferredLightPS、PointLight 排序、自定义光照路径 |
|
||||||
|
| BasePass 修改 | [[BasePass修改]] | 中 | 强制 PrePass、阴影 Only 材质、X2Multiply 雾效 |
|
||||||
|
| 光线追踪与 PSO | [[光线追踪与PSO]] | 低 | RT 反射缩进修复、PSO 部分编译标记 |
|
||||||
|
|
||||||
|
## 渲染管线修改全景
|
||||||
|
|
||||||
|
```
|
||||||
|
材质系统 (自定义材质属性 + BlendMode)
|
||||||
|
↓
|
||||||
|
顶点变换 (正交投影混合 / 屏幕对齐网格 / 局部位置缩放 / 深度偏移)
|
||||||
|
↓
|
||||||
|
BasePass (RED自定义数据通道 → GBufferD / 强制PrePass / 阴影Only)
|
||||||
|
↓
|
||||||
|
GBuffer (修改清除色 / Specular格式)
|
||||||
|
↓
|
||||||
|
Deferred Lighting (RED阴影系统 / 自定义光照Pass / BGMultColor)
|
||||||
|
↓
|
||||||
|
后处理 (自定义后处理: Diffusion / CharaGlow / DOF)
|
||||||
|
```
|
||||||
54
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/光线追踪与PSO.md
Normal file
54
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/光线追踪与PSO.md
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
title: 光线追踪与PSO
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: RT 反射小幅修改和 PSO 部分编译标记
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Rendering
|
||||||
|
- RayTracing
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# 光线追踪与 PSO
|
||||||
|
|
||||||
|
返回 [[Rendering]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎在光线追踪和 PSO(Pipeline State Object)方面的修改较少,主要是格式修复和编译优化标记。
|
||||||
|
|
||||||
|
## Ray Tracing
|
||||||
|
|
||||||
|
### RayTracingDeferredReflections.usf
|
||||||
|
|
||||||
|
仅缩进格式修复(去掉一级缩进),无功能性变更。
|
||||||
|
|
||||||
|
## PSO 改进
|
||||||
|
|
||||||
|
### 部分编译标记
|
||||||
|
|
||||||
|
在 RHI 层新增 `bPartial` 标记用于 Ray Tracing Pipeline 的异步编译:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// RHI module
|
||||||
|
struct FRayTracingPipelineStateInitializer
|
||||||
|
{
|
||||||
|
bool bPartial; // 允许部分编译(不等待所有 Shader 就绪)
|
||||||
|
FRayTracingPipelineState* BasePipeline; // 基础 PSO,用于派生
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### SetGraphicsPipelineState 扩展
|
||||||
|
|
||||||
|
新增 `bApplyAdditionalState` 参数,控制是否在设置管线状态时应用额外的平台特化状态。
|
||||||
|
|
||||||
|
## 关联文档
|
||||||
|
|
||||||
|
- [[D3D12RHI]] — D3D12 层面的 PSO 异步创建改进
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Private/RayTracing/RayTracingDeferredReflections.usf` | 格式修复 |
|
||||||
|
| `Source/Runtime/RHI/` | `bPartial`、`bApplyAdditionalState` |
|
||||||
54
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/局部位置缩放.md
Normal file
54
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/局部位置缩放.md
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
---
|
||||||
|
title: 局部位置缩放
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 逐材质局部空间顶点缩放
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Rendering
|
||||||
|
- VertexFactory
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# 局部位置缩放
|
||||||
|
|
||||||
|
返回 [[Rendering]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
允许通过材质图在局部空间(Local Space)对顶点位置进行缩放,实现不依赖 Actor Transform 的比例调整。
|
||||||
|
|
||||||
|
## 实现
|
||||||
|
|
||||||
|
在各 VertexFactory 中通过 `VertexFactoryUpdateLocalPositionScale` 函数实现:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
void VertexFactoryUpdateLocalPositionScale(
|
||||||
|
inout FVertexFactoryInput Input,
|
||||||
|
inout FVertexFactoryIntermediates Intermediates,
|
||||||
|
float3 scale)
|
||||||
|
{
|
||||||
|
Input.Position.xyz *= scale;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
由 `USES_LOCAL_POSITION_SCALE` 宏控制启用,在世界变换之前应用。
|
||||||
|
|
||||||
|
## 使用场景
|
||||||
|
|
||||||
|
- 角色部件的动态缩放(如拳头放大的夸张动画效果)
|
||||||
|
- 不同 LOD 级别的微调
|
||||||
|
- 格斗游戏中攻击判定与视觉表现分离时的视觉调整
|
||||||
|
|
||||||
|
## 材质属性
|
||||||
|
|
||||||
|
`MP_LocalPositionScale`(float3)通过材质图控制。参见 [[自定义材质属性]]。
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Private/LocalVertexFactory.ush` | 新增缩放函数 |
|
||||||
|
| `Shaders/Private/GpuSkinVertexFactory.ush` | 同上 |
|
||||||
|
| `Shaders/Private/LandscapeVertexFactory.ush` | 同上 |
|
||||||
|
| `Shaders/Private/MeshParticleVertexFactory.ush` | 同上 |
|
||||||
|
| 所有 Particle VertexFactory | 同上 |
|
||||||
65
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/屏幕对齐网格.md
Normal file
65
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/屏幕对齐网格.md
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
---
|
||||||
|
title: 屏幕对齐网格
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 将网格直接渲染到屏幕空间,用于 UI/HUD 叠加元素
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Rendering
|
||||||
|
- VertexFactory
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# 屏幕对齐网格
|
||||||
|
|
||||||
|
返回 [[Rendering]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
屏幕对齐网格(ScreenAlignedMesh)将 3D 网格直接投影到屏幕空间坐标系中渲染,用于实现 UI 元素、HUD 叠加或其他需要固定屏幕位置的网格效果。
|
||||||
|
|
||||||
|
## 实现
|
||||||
|
|
||||||
|
在所有顶点着色器中通过 `USES_SCREEN_ALIGNED_MESH` 宏启用:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
#if USES_SCREEN_ALIGNED_MESH
|
||||||
|
{
|
||||||
|
float2 p = Input.Position.xz * flip;
|
||||||
|
float3 offset = GetMaterialScreenAlignedMeshOffset(VertexParameters);
|
||||||
|
float3 scale = GetMaterialScreenAlignedMeshScale(VertexParameters);
|
||||||
|
|
||||||
|
// 基于 1280x720 的参考分辨率
|
||||||
|
float2 ScreenPos = p.xy * scale.xy;
|
||||||
|
ScreenPos.x += offset.x / 640.0f;
|
||||||
|
ScreenPos.y += -offset.y / 360.0f;
|
||||||
|
ScreenPos.xy += GetMaterialWorldPositionOffset(VertexParameters).xy;
|
||||||
|
|
||||||
|
const float z = 1.0f - 0.00001f; // 接近远裁面
|
||||||
|
WorldPosition = 0;
|
||||||
|
Output.Position = float4(ScreenPos, z, 1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
关键点:
|
||||||
|
- 使用 `Input.Position.xz`(不是 xy)作为屏幕坐标输入
|
||||||
|
- 参考分辨率为 1280x720,offset 以像素为单位
|
||||||
|
- 深度设为接近远裁面(`1.0 - 0.00001`),确保不遮挡 3D 场景
|
||||||
|
- 跳过雾效计算(`TRANSLUCENCY_NEEDS_BASEPASS_FOGGING` 对 ScreenAlignedMesh 禁用)
|
||||||
|
|
||||||
|
## 材质控制
|
||||||
|
|
||||||
|
通过 [[自定义材质属性]] 中的两个属性控制:
|
||||||
|
- `MP_ScreenAlignedMeshOffset` — 屏幕偏移(像素,基于 1280x720)
|
||||||
|
- `MP_ScreenAlignedMeshScale` — 缩放系数
|
||||||
|
|
||||||
|
材质标记 `bScreenAlignedMesh` 启用此模式。
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Private/BasePassVertexShader.usf` | 屏幕空间变换逻辑 |
|
||||||
|
| `Shaders/Private/DepthOnlyVertexShader.usf` | 同上 |
|
||||||
|
| `Shaders/Private/HitProxyVertexShader.usf` | 同上 |
|
||||||
|
| `Shaders/Private/DebugViewModeVertexShader.usf` | 同上 |
|
||||||
49
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/屏幕空间深度偏移.md
Normal file
49
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/屏幕空间深度偏移.md
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
---
|
||||||
|
title: 屏幕空间深度偏移
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 在屏幕空间偏移顶点深度,防止 Z-fighting 或强制分层
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Rendering
|
||||||
|
- VertexFactory
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# 屏幕空间深度偏移
|
||||||
|
|
||||||
|
返回 [[Rendering]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
在顶点着色器中直接偏移输出深度值,用于防止卡通描边的 Z-fighting 或强制控制元素的渲染层级。
|
||||||
|
|
||||||
|
## 实现
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
#if USES_SCREEN_SPACE_DEPTH_OFFSET
|
||||||
|
{
|
||||||
|
Output.Position.z += GetMaterialScreenSpaceDepthOffset(VertexParameters)
|
||||||
|
* DEPTH_OFFSET_SIGN;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
```
|
||||||
|
|
||||||
|
`DEPTH_OFFSET_SIGN` 根据平台的深度缓冲方向(正向/反向 Z)自动调整符号。
|
||||||
|
|
||||||
|
## 使用场景
|
||||||
|
|
||||||
|
- 卡通描边网格的深度偏移(避免与本体 Z-fighting)
|
||||||
|
- 半透明元素的强制排序
|
||||||
|
- 面部特征的深度分层(眉毛、头发等)
|
||||||
|
|
||||||
|
## 材质属性
|
||||||
|
|
||||||
|
`MP_ScreenSpaceDepthOffset`(float)通过材质图控制。参见 [[自定义材质属性]]。
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Private/BasePassVertexShader.usf` | 深度偏移逻辑 |
|
||||||
|
| `Shaders/Private/DepthOnlyVertexShader.usf` | 同上 |
|
||||||
|
| `Shaders/Private/PositionOnlyDepthVertexShader.usf` | 同上 |
|
||||||
136
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/正交投影混合.md
Normal file
136
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/正交投影混合.md
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
---
|
||||||
|
title: 正交投影混合
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: OrthoBlend 透视校正技术,实现动画风格的透视扁平化效果
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Rendering
|
||||||
|
- VertexFactory
|
||||||
|
- Toon
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# 正交投影混合
|
||||||
|
|
||||||
|
返回 [[Rendering]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
正交投影混合(OrthoBlend)是 ARC 引擎实现**动画风格透视扁平化**的核心技术。在动画/格斗游戏中,角色需要减少透视畸变以保持美术控制的外观,这通过在透视投影和正交投影之间进行混合来实现。
|
||||||
|
|
||||||
|
引擎提供了两个版本:
|
||||||
|
- **V1** (`USES_ORTHO_BLEND_POSITION`):简单的 X 轴正交混合
|
||||||
|
- **V2** (`USES_ORTHO_BLEND_POSITION2`):基于物体中心距离的全透视校正("Purse correction")
|
||||||
|
|
||||||
|
## 实现细节
|
||||||
|
|
||||||
|
### V1:X 轴正交混合
|
||||||
|
|
||||||
|
在 `Common.ush` 中定义:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
float4 GetOrthoBlendPosition(
|
||||||
|
float4 WorldPosition,
|
||||||
|
float4x4 ViewProjectionMatrix,
|
||||||
|
float weight)
|
||||||
|
{
|
||||||
|
float4 ScreenPosition = mul(WorldPosition, ViewProjectionMatrix);
|
||||||
|
|
||||||
|
// 计算正交投影的 X 坐标
|
||||||
|
float OrthoScreenPositionX = dot(
|
||||||
|
ResolvedView.OrthoViewProjectionX, WorldPosition);
|
||||||
|
|
||||||
|
// 在透视和正交之间混合 X 轴
|
||||||
|
ScreenPosition.x = lerp(
|
||||||
|
ScreenPosition.x,
|
||||||
|
OrthoScreenPositionX * ScreenPosition.w,
|
||||||
|
weight * ResolvedView.OrthoBlendParameter);
|
||||||
|
|
||||||
|
return ScreenPosition;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`OrthoBlendParameter` 从 C++ 端通过 `ViewUniformShaderParameters` 传入,全局控制混合强度。`weight` 来自材质属性 `MP_OrthoBlendWeight`,允许逐材质控制。
|
||||||
|
|
||||||
|
### V2:全透视校正
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
float4 GetOrthoBlendPosition2(
|
||||||
|
float4 WorldPosition,
|
||||||
|
float4x4 ViewProjectionMatrix,
|
||||||
|
float weight,
|
||||||
|
float3 ObjWorldPosition)
|
||||||
|
{
|
||||||
|
// 计算顶点相对于物体中心的偏移
|
||||||
|
float3 offset = WorldPosition.xyz - ObjWorldPosition.xyz;
|
||||||
|
|
||||||
|
// 物体中心到相机的距离(沿视线方向)
|
||||||
|
float dist = abs(dot(
|
||||||
|
ObjWorldPosition.xyz - ResolvedView.WorldCameraOrigin.xyz,
|
||||||
|
ResolvedView.ViewForward.xyz));
|
||||||
|
|
||||||
|
// 将顶点"拍平"到与物体中心相同距离的平面
|
||||||
|
float3 origin = ResolvedView.WorldCameraOrigin.xyz
|
||||||
|
+ ResolvedView.ViewForward.xyz * dist;
|
||||||
|
WorldPosition.xy = origin.xy + offset.xy;
|
||||||
|
|
||||||
|
// ... 后续投影变换
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
V2 的原理:将所有顶点投影到与物体中心等距的平面上,消除了前后肢体因透视导致的大小差异。
|
||||||
|
|
||||||
|
### 全 VertexFactory 覆盖
|
||||||
|
|
||||||
|
两个版本均在所有顶点着色器中实现:
|
||||||
|
|
||||||
|
| 顶点着色器 | 文件 |
|
||||||
|
|-----------|------|
|
||||||
|
| BasePass | `BasePassVertexShader.usf` |
|
||||||
|
| DepthOnly | `DepthOnlyVertexShader.usf` |
|
||||||
|
| PositionOnlyDepth | `PositionOnlyDepthVertexShader.usf` |
|
||||||
|
| HitProxy | `HitProxyVertexShader.usf` |
|
||||||
|
| DebugViewMode | `DebugViewModeVertexShader.usf` |
|
||||||
|
|
||||||
|
覆盖的 VertexFactory:
|
||||||
|
- `LocalVertexFactory.ush`
|
||||||
|
- `GpuSkinVertexFactory.ush`
|
||||||
|
- `LandscapeVertexFactory.ush`
|
||||||
|
- `MeshParticleVertexFactory.ush`
|
||||||
|
- 所有 Particle VertexFactory
|
||||||
|
|
||||||
|
## 材质属性
|
||||||
|
|
||||||
|
通过 `MP_OrthoBlendWeight` 材质属性控制每个材质的混合权重:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// MaterialTemplate.ush
|
||||||
|
float GetMaterialOrthoBlendWeight(FMaterialVertexParameters Parameters)
|
||||||
|
{
|
||||||
|
%s; // 由材质图生成
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## C++ 端支持
|
||||||
|
|
||||||
|
- `SceneRendering.cpp`:计算 `OrthoBlendParameter` 并写入 ViewUniformBuffer
|
||||||
|
- `SceneTypes.h`:`MP_OrthoBlendWeight` 枚举值
|
||||||
|
- `HLSLMaterialTranslator.cpp`:材质编译支持
|
||||||
|
|
||||||
|
## 关联文档
|
||||||
|
|
||||||
|
- [[自定义材质属性]] — `MP_OrthoBlendWeight` 的定义
|
||||||
|
- [[屏幕对齐网格]] — 另一种屏幕空间变换方案
|
||||||
|
- [[局部位置缩放]] — 局部空间的顶点变换
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Private/Common.ush` | 新增 `GetOrthoBlendPosition` / `GetOrthoBlendPosition2` |
|
||||||
|
| `Shaders/Private/BasePassVertexShader.usf` | 调用正交混合 |
|
||||||
|
| `Shaders/Private/DepthOnlyVertexShader.usf` | 调用正交混合 |
|
||||||
|
| `Shaders/Private/PositionOnlyDepthVertexShader.usf` | 调用正交混合 |
|
||||||
|
| `Shaders/Private/HitProxyVertexShader.usf` | 调用正交混合 |
|
||||||
|
| `Shaders/Private/DebugViewModeVertexShader.usf` | 调用正交混合 |
|
||||||
|
| 所有 VertexFactory `.ush` | 提供 ObjWorldPosition |
|
||||||
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` | 阴影合成修改 |
|
||||||
136
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/自定义后处理.md
Normal file
136
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/自定义后处理.md
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
---
|
||||||
|
title: 自定义后处理
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: REDPostProcess 全套自定义后处理:Diffusion Filter、角色辉光、自定义 DOF
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Rendering
|
||||||
|
- PostProcess
|
||||||
|
- Toon
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# 自定义后处理
|
||||||
|
|
||||||
|
返回 [[Rendering]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎新增了完整的自定义后处理系统(REDPostProcess),提供 Diffusion Filter(扩散滤镜)、角色辉光(Chara Glow)和自定义景深(DOF)三大功能。这些效果专门为动画风格渲染设计,与标准 UE4 后处理管线并行工作。
|
||||||
|
|
||||||
|
## Shader 端:REDPostProcess.usf
|
||||||
|
|
||||||
|
### Diffusion Filter(扩散滤镜)
|
||||||
|
|
||||||
|
基于亮度的柔焦/辉光效果,使用 13-tap 高斯模糊(7 权重核):
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
// 从场景颜色提取高亮区域
|
||||||
|
float Luminance = dot(SceneColor.rgb, float3(0.299, 0.587, 0.114));
|
||||||
|
float LuminanceMask = pow(Luminance, LuminancePow);
|
||||||
|
LuminanceMask = saturate(LuminanceMask - LuminanceThreshold);
|
||||||
|
|
||||||
|
// 高斯模糊后以 Screen 混合模式叠加
|
||||||
|
// Screen blend: 1 - (1-A)(1-B)
|
||||||
|
float3 Result = 1.0 - (1.0 - SceneColor.rgb) * (1.0 - BlurredHighlight);
|
||||||
|
```
|
||||||
|
|
||||||
|
可调参数:
|
||||||
|
- `DiffusionFilterLuminancePow` — 亮度幂次(控制提取范围)
|
||||||
|
- `DiffusionFilterLuminanceThreshold` — 亮度阈值
|
||||||
|
|
||||||
|
### Diffusion Filter 2(变体)
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
// Screen 混合 + Power 调整
|
||||||
|
float3 BlendResult = 1.0 - (1.0 - A) * (1.0 - B);
|
||||||
|
Result = pow(BlendResult, Power);
|
||||||
|
```
|
||||||
|
|
||||||
|
### 角色辉光(Chara Glow)
|
||||||
|
|
||||||
|
从 GBufferD 的 B 通道读取 OutlineID 作为辉光遮罩,进行可变半径的 Box Blur:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
// 读取 GBufferD.b 作为遮罩
|
||||||
|
float Mask = GBufferD.b;
|
||||||
|
|
||||||
|
// 可变半径 Box Blur
|
||||||
|
for (int y = -Radius; y <= Radius; y++)
|
||||||
|
for (int x = -Radius; x <= Radius; x++)
|
||||||
|
Sum += SampleMask(UV + offset);
|
||||||
|
|
||||||
|
// 以 CharaGlowColor 叠加
|
||||||
|
OutColor = Sum * CharaGlowColor * CharaGlowArea;
|
||||||
|
```
|
||||||
|
|
||||||
|
可调参数:
|
||||||
|
- `CharaGlowArea` — 辉光范围
|
||||||
|
- `CharaGlowColor` — 辉光颜色
|
||||||
|
|
||||||
|
### 自定义 DOF
|
||||||
|
|
||||||
|
替代标准 DOF 的 RED 专用版本,支持近景/远景独立模糊:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
// 高斯模糊 Pass(水平 + 垂直分离)
|
||||||
|
// 13-tap 核,权重:0.0044, 0.0540, 0.2420, 0.3990, ...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Soft Focus / Glow / Sepia
|
||||||
|
|
||||||
|
其他后处理变体:
|
||||||
|
- **Soft Focus**:场景与模糊版本的简单混合 + 饱和度控制
|
||||||
|
- **Glow**:亮度阈值 + Screen 混合辉光
|
||||||
|
- **Sepia**:Diffusion Filter 2 的棕褐色变体
|
||||||
|
|
||||||
|
## C++ 端:REDPostProcess.h/.cpp
|
||||||
|
|
||||||
|
### 后处理 Pass 类型
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// 4 种主要 Pass
|
||||||
|
enum class EREDPostProcessPass
|
||||||
|
{
|
||||||
|
DiffusionFilter, // 扩散滤镜
|
||||||
|
CharaGlow, // 角色辉光
|
||||||
|
DownSample, // 降采样
|
||||||
|
BlurH, BlurV, // 水平/垂直高斯模糊
|
||||||
|
CustomGaussianDOF // 自定义 DOF
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
### 插入点控制
|
||||||
|
|
||||||
|
通过 CVar 控制后处理在管线中的插入位置:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// r.REDPostprocessAfterTranslucency
|
||||||
|
// 0 = 在 SeparateTranslucency 之前
|
||||||
|
// 1 = 在 SeparateTranslucency 之后
|
||||||
|
// 2 = 在 Bloom 之后
|
||||||
|
```
|
||||||
|
|
||||||
|
### PostProcessSettings 扩展
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// Scene.h 新增
|
||||||
|
float DiffusionFilterLuminancePow;
|
||||||
|
float DiffusionFilterLuminanceThreshold;
|
||||||
|
float CharaGlowArea;
|
||||||
|
FLinearColor CharaGlowColor;
|
||||||
|
```
|
||||||
|
|
||||||
|
## 关联文档
|
||||||
|
|
||||||
|
- [[RED自定义数据通道]] — CharaGlow 读取 GBufferD.b 通道
|
||||||
|
- [[BGMultColor全局色调]] — 另一个全局色彩控制系统
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Private/REDPostProcess.usf` | **新增** — 完整后处理着色器 |
|
||||||
|
| `Source/Runtime/Renderer/Private/PostProcess/REDPostProcess.h` | **新增** — C++ 后处理 Pass |
|
||||||
|
| `Source/Runtime/Renderer/Private/PostProcess/REDPostProcess.cpp` | **新增** — C++ 实现 |
|
||||||
|
| `Source/Runtime/Engine/Classes/Engine/Scene.h` | 新增 PostProcess 参数 |
|
||||||
105
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/自定义材质属性.md
Normal file
105
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/Rendering/自定义材质属性.md
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
---
|
||||||
|
title: 自定义材质属性
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 新增 MaterialProperty、BlendMode 和材质标记
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- Rendering
|
||||||
|
- Material
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# 自定义材质属性
|
||||||
|
|
||||||
|
返回 [[Rendering]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎在 UE4 材质系统中新增了多个材质属性(MaterialProperty)、混合模式(BlendMode)和材质标记,为卡通渲染的顶点变换和特殊效果提供材质图级别的控制能力。
|
||||||
|
|
||||||
|
## 新增材质属性
|
||||||
|
|
||||||
|
| 属性 | 枚举值 | 类型 | 用途 |
|
||||||
|
|------|--------|------|------|
|
||||||
|
| `MP_OrthoBlendWeight` | float | 顶点 | [[正交投影混合]]权重,0=透视,1=正交 |
|
||||||
|
| `MP_ScreenAlignedMeshOffset` | float3 | 顶点 | [[屏幕对齐网格]]偏移(像素单位) |
|
||||||
|
| `MP_ScreenAlignedMeshScale` | float3 | 顶点 | [[屏幕对齐网格]]缩放 |
|
||||||
|
| `MP_ScreenSpaceDepthOffset` | float | 顶点 | [[屏幕空间深度偏移]]值 |
|
||||||
|
| `MP_LocalPositionScale` | float3 | 顶点 | [[局部位置缩放]]系数 |
|
||||||
|
|
||||||
|
### Shader 端访问函数
|
||||||
|
|
||||||
|
在 `MaterialTemplate.ush` 中生成对应的访问函数:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
float GetMaterialOrthoBlendWeight(FMaterialVertexParameters Parameters) { %s; }
|
||||||
|
float3 GetMaterialScreenAlignedMeshOffset(FMaterialVertexParameters Parameters) { %s; }
|
||||||
|
float3 GetMaterialScreenAlignedMeshScale(FMaterialVertexParameters Parameters) { %s; }
|
||||||
|
float GetMaterialScreenSpaceDepthOffset(FMaterialVertexParameters Parameters) { %s; }
|
||||||
|
float3 GetMaterialLocalPositionScale(FMaterialVertexParameters Parameters) { %s; }
|
||||||
|
```
|
||||||
|
|
||||||
|
`%s` 由 `HLSLMaterialTranslator` 在编译时替换为材质图表达式。
|
||||||
|
|
||||||
|
## 新增混合模式
|
||||||
|
|
||||||
|
| 混合模式 | 枚举值 | 混合公式 | 用途 |
|
||||||
|
|---------|--------|---------|------|
|
||||||
|
| `BLEND_X2Multiply` | — | `DestColor × SourceColor × 2` | 双倍乘法混合,用于深色叠加 |
|
||||||
|
| `BLEND_AdditiveForUI` | — | `Dest + Source × SourceAlpha` | UI 专用加法混合 |
|
||||||
|
|
||||||
|
### X2Multiply 雾效处理
|
||||||
|
|
||||||
|
在 `BasePassPixelShader.usf` 中为 X2Multiply 提供自定义雾效混合:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
#elif MATERIALBLENDING_X2MULTIPLY
|
||||||
|
half3 FoggedColor = lerp(
|
||||||
|
float3(0.5, 0.5, 0.5), // 中灰(乘法中性色)
|
||||||
|
Color,
|
||||||
|
Fogging.aaa * Fogging.aaa);
|
||||||
|
Out.MRT[0] = half4(FoggedColor, Opacity);
|
||||||
|
```
|
||||||
|
|
||||||
|
## 新增材质标记
|
||||||
|
|
||||||
|
| 标记 | 类型 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| `bScreenAlignedMesh` | bool | 启用[[屏幕对齐网格]]渲染模式 |
|
||||||
|
| `bForcedPrepass` | bool | 强制该材质走 Early-Z PrePass(ASW/Wizcorp) |
|
||||||
|
|
||||||
|
### bForcedPrepass
|
||||||
|
|
||||||
|
在 `BasePassRendering.cpp` 中控制深度绘制行为:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// 强制 PrePass 的材质始终写入深度
|
||||||
|
if (Material.bForcedPrepass)
|
||||||
|
{
|
||||||
|
// 走 DepthPass 而非依赖 BasePass 深度写入
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
可在材质实例中覆盖(`MaterialEditor` 中显示为可覆盖属性)。
|
||||||
|
|
||||||
|
## REDMaterialInstanceDynamic
|
||||||
|
|
||||||
|
新增 `REDMaterialInstanceDynamic` 类(`REDMaterialInstanceDynamic.h/.cpp`),扩展了标准 `UMaterialInstanceDynamic`,可能用于运行时的卡通渲染材质参数控制。
|
||||||
|
|
||||||
|
## 关联文档
|
||||||
|
|
||||||
|
- [[正交投影混合]] — 使用 `MP_OrthoBlendWeight`
|
||||||
|
- [[屏幕对齐网格]] — 使用 `MP_ScreenAlignedMeshOffset/Scale`
|
||||||
|
- [[BasePass修改]] — `bForcedPrepass` 的影响
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Source/Runtime/Engine/Public/SceneTypes.h` | 新增 `MP_*` 枚举 |
|
||||||
|
| `Source/Runtime/Engine/Classes/Materials/Material.h` | 新增 `bScreenAlignedMesh`、`bForcedPrepass` |
|
||||||
|
| `Source/Runtime/Engine/Classes/Materials/REDMaterialInstanceDynamic.h` | **新增** |
|
||||||
|
| `Source/Runtime/Engine/Private/Materials/REDMaterialInstanceDynamic.cpp` | **新增** |
|
||||||
|
| `Source/Runtime/Engine/Private/Materials/HLSLMaterialTranslator.cpp` | 编译支持 |
|
||||||
|
| `Shaders/Private/MaterialTemplate.ush` | 新增访问函数 |
|
||||||
|
| `Source/Editor/MaterialEditor/` | 编辑器 UI 支持 |
|
||||||
68
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/UI/Slate扩展.md
Normal file
68
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/UI/Slate扩展.md
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
---
|
||||||
|
title: Slate扩展
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 垂直文本对齐、独立透明度、文本溢出省略、富文本图片、几何缓存
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- UI
|
||||||
|
- Slate
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# Slate 扩展
|
||||||
|
|
||||||
|
返回 [[UI]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎对 Slate 框架进行了多项扩展,主要围绕文本渲染和 Widget 性能优化。
|
||||||
|
|
||||||
|
## 1. 垂直文本对齐
|
||||||
|
|
||||||
|
新增 `ETextJustifyV::Type` 枚举,为 `STextBlock` 和 `SRichTextBlock` 添加垂直对齐支持:
|
||||||
|
|
||||||
|
- `Top` — 顶部对齐
|
||||||
|
- `Center` — 垂直居中
|
||||||
|
- `Bottom` — 底部对齐
|
||||||
|
|
||||||
|
格斗游戏 UI 中常需要文本在固定高度区域内垂直居中。
|
||||||
|
|
||||||
|
## 2. 独立阴影/描边透明度
|
||||||
|
|
||||||
|
Shadow 和 Outline 的颜色不受父 Widget 透明度影响:
|
||||||
|
|
||||||
|
```
|
||||||
|
标准 UE4:文字透明度 50% → Shadow 也跟着变为 50%
|
||||||
|
ARC 修改:文字透明度 50% → Shadow 保持自身设定的透明度
|
||||||
|
```
|
||||||
|
|
||||||
|
用于格斗游戏中文字淡入淡出时保持描边清晰可见。
|
||||||
|
|
||||||
|
## 3. 文本溢出省略
|
||||||
|
|
||||||
|
按高度截断文本并添加省略号(`...`)。标准 UE4 只支持按宽度截断。
|
||||||
|
|
||||||
|
## 4. 富文本图片运行
|
||||||
|
|
||||||
|
`SRichTextBlock` 扩展了图片嵌入能力:
|
||||||
|
- 动态 Brush 支持(运行时更换图标)
|
||||||
|
- 范围创建(基于文本范围插入图片)
|
||||||
|
|
||||||
|
## 5. 几何缓存
|
||||||
|
|
||||||
|
在 `SWidget` 上新增几何缓存机制:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
void SetCachedGeometry();
|
||||||
|
void UpdateGeometryAllChildren();
|
||||||
|
```
|
||||||
|
|
||||||
|
减少每帧的 Layout 计算开销,对格斗游戏 60fps 的帧预算至关重要。
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
涉及 `Source/Runtime/Slate/` 和 `Source/Runtime/SlateCore/` 下约 26 个文件,主要覆盖:
|
||||||
|
- `STextBlock.h/.cpp` — 垂直对齐、溢出
|
||||||
|
- `SRichTextBlock.h/.cpp` — 富文本图片
|
||||||
|
- `SWidget.h/.cpp` — 几何缓存
|
||||||
|
- `FontCache` 相关 — 文本阴影/描边独立透明度
|
||||||
32
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/UI/UI.md
Normal file
32
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/UI/UI.md
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
title: UI
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: ARC 引擎 UI/Slate/UMG 扩展分类索引
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- UI
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# UI — UI/Slate/UMG 扩展
|
||||||
|
|
||||||
|
返回 [[ARC引擎修改总览]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎对 UE4 的 UI 系统(Slate + UMG)进行了大量扩展,主要服务于格斗游戏的文本显示需求(多语言、竖排文字)和控制器管理。修改涉及约 38 个文件。
|
||||||
|
|
||||||
|
## 功能列表
|
||||||
|
|
||||||
|
| 功能 | 文档 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| Slate 扩展 | [[Slate扩展]] | 垂直对齐、独立透明度、文本溢出、富文本图片、几何缓存 |
|
||||||
|
| UMG 本地化 | [[UMG本地化]] | 平台后缀语言 ID、平台感知文本查找 |
|
||||||
|
| 简单元素渲染扩展 | [[简单元素渲染扩展]] | REDMain、AddColor、灰度、Multiply 混合 |
|
||||||
|
|
||||||
|
## 控制器管理
|
||||||
|
|
||||||
|
新增 `FUEISlateApplication`(继承 `FSlateApplication`):
|
||||||
|
- User/Controller ID 映射表(`UserIndexMap`)
|
||||||
|
- 格斗游戏多手柄的输入分配
|
||||||
|
- 参见 [[UEI事件系统]]
|
||||||
60
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/UI/UMG本地化.md
Normal file
60
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/UI/UMG本地化.md
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
---
|
||||||
|
title: UMG本地化
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: 平台感知的多语言文本系统(平台后缀、语言 ID)
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- UI
|
||||||
|
- UMG
|
||||||
|
- Localization
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# UMG 本地化
|
||||||
|
|
||||||
|
返回 [[UI]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
ARC 引擎为 UMG 文本系统添加了平台感知的本地化机制,允许同一文本 ID 在不同平台上显示不同内容(例如按钮提示文本因平台不同而变化)。
|
||||||
|
|
||||||
|
## 平台后缀系统
|
||||||
|
|
||||||
|
文本 ID 查找时自动追加平台后缀:
|
||||||
|
|
||||||
|
| 平台 | 后缀 |
|
||||||
|
|------|------|
|
||||||
|
| PS5 | `_PS5` |
|
||||||
|
| Xbox Series X | `_XSX` |
|
||||||
|
| 其他 | 无后缀(使用默认文本) |
|
||||||
|
|
||||||
|
查找顺序:
|
||||||
|
1. 先查 `TextID_PS5`(或 `_XSX`)
|
||||||
|
2. 找不到则回退到 `TextID`
|
||||||
|
|
||||||
|
## 语言 ID
|
||||||
|
|
||||||
|
新增 CVar `sg_REDLanguageID`,允许运行时切换语言而不依赖系统语言设置:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
static TAutoConsoleVariable<int32> CVarREDLanguageID(
|
||||||
|
TEXT("sg.REDLanguageID"),
|
||||||
|
0,
|
||||||
|
TEXT("Override language ID for RED localization"));
|
||||||
|
```
|
||||||
|
|
||||||
|
## 自定义 L10N 加载
|
||||||
|
|
||||||
|
`Source/Runtime/Core/` 中的本地化文件加载逻辑支持自定义 L10N 目录。
|
||||||
|
|
||||||
|
## 兼容性
|
||||||
|
|
||||||
|
`UOldRichTextBlockDecorator` 兼容层确保旧版富文本格式在新系统中正常工作。
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
涉及 `Source/Runtime/UMG/` 下约 12 个文件,主要覆盖:
|
||||||
|
- `TextBlock` 相关 — 平台后缀查找
|
||||||
|
- `TextWidgetTypes` — 垂直对齐(与 [[Slate扩展]] 配合)
|
||||||
|
- `RichTextBlockDecorator` — 兼容层
|
||||||
|
- `WidgetComponent` — 修改
|
||||||
71
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/UI/简单元素渲染扩展.md
Normal file
71
03-UnrealEngine/卡通渲染相关资料/渲染功能/ARC/UI/简单元素渲染扩展.md
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
---
|
||||||
|
title: 简单元素渲染扩展
|
||||||
|
date: 2026-05-03 00:00:00
|
||||||
|
excerpt: REDMain/GammaREDMain 着色器扩展:AddColor、灰度、Multiply 混合
|
||||||
|
tags:
|
||||||
|
- ARC
|
||||||
|
- UI
|
||||||
|
- Rendering
|
||||||
|
rating: ⭐
|
||||||
|
---
|
||||||
|
|
||||||
|
# 简单元素渲染扩展
|
||||||
|
|
||||||
|
返回 [[UI]]
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
扩展了 UE4 的 SimpleElement Pixel Shader(用于 2D UI 元素、线条、Debug 绘制等),新增颜色叠加、灰度转换和 Multiply 混合模式。
|
||||||
|
|
||||||
|
## 新增着色器入口
|
||||||
|
|
||||||
|
### REDMain / GammaREDMain
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
void REDMain(... out float4 OutColor : SV_Target0)
|
||||||
|
{
|
||||||
|
OutColor = CalcREDColor(InColor, InTexCoord);
|
||||||
|
}
|
||||||
|
|
||||||
|
float4 CalcREDColor(float4 VertexColor, float2 UV)
|
||||||
|
{
|
||||||
|
float4 TexColor = Texture2DSample(InTexture, InTextureSampler, UV);
|
||||||
|
float4 Result = TexColor * VertexColor;
|
||||||
|
|
||||||
|
// 叠加色
|
||||||
|
Result.rgb += AddColor.rgb;
|
||||||
|
|
||||||
|
// 灰度转换
|
||||||
|
float Gray = dot(Result.rgb, float3(0.299, 0.587, 0.114));
|
||||||
|
Result.rgb = lerp(float3(Gray, Gray, Gray), Result.rgb, Grayscale);
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
参数:
|
||||||
|
- `AddColor` — 加法颜色叠加(uniform float3)
|
||||||
|
- `Grayscale` — 饱和度系数(uniform float,0=灰度,1=原色)
|
||||||
|
|
||||||
|
### MainMult
|
||||||
|
|
||||||
|
Multiply 混合模式的 Simple Element 渲染:
|
||||||
|
|
||||||
|
```hlsl
|
||||||
|
void MainMult(... out float4 OutColor : SV_Target0)
|
||||||
|
{
|
||||||
|
// 用于 Multiply 混合的 UI 元素
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 使用场景
|
||||||
|
|
||||||
|
- 格斗游戏 UI 的动态颜色变化(血条变色、技能冷却灰度化)
|
||||||
|
- 受击时的 HUD 闪烁效果(AddColor 叠加红色)
|
||||||
|
- 菜单界面的 Multiply 叠加装饰
|
||||||
|
|
||||||
|
## 修改文件列表
|
||||||
|
|
||||||
|
| 文件 | 修改类型 |
|
||||||
|
|------|---------|
|
||||||
|
| `Shaders/Private/SimpleElementPixelShader.usf` | 新增 `REDMain`、`MainMult`、`CalcREDColor` |
|
||||||
Reference in New Issue
Block a user