vault backup: 2026-05-03 21:38:46

This commit is contained in:
2026-05-03 21:38:46 +08:00
parent 83502d0874
commit 0a81d4ee33
34 changed files with 2442 additions and 845 deletions

View File

@@ -86,20 +86,77 @@ if (Material.bForcedPrepass)
新增 `REDMaterialInstanceDynamic` 类(`REDMaterialInstanceDynamic.h/.cpp`),扩展了标准 `UMaterialInstanceDynamic`,可能用于运行时的卡通渲染材质参数控制。
## 完整代码解析
### MaterialTemplate.ush — 新增材质属性访问函数
```hlsl
// MaterialTemplate.ush — 新增材质属性访问函数
// ASW Change : 2016/03/29 ~ 2016/06/29 Takuro.K
// 正交投影混合权重 (float)
// 材质图中连接到此 Pin 的表达式会在编译时替换 %s
float GetMaterialOrthoBlendWeight(FMaterialVertexParameters Parameters)
{
%s; // 由 HLSLMaterialTranslator 填充
}
// 屏幕对齐网格偏移 (float3, 像素单位, 基于1280x720)
float3 GetMaterialScreenAlignedMeshOffset(FMaterialVertexParameters Parameters)
{
%s;
}
// 屏幕对齐网格缩放 (float3)
float3 GetMaterialScreenAlignedMeshScale(FMaterialVertexParameters Parameters)
{
%s;
}
// 屏幕空间深度偏移 (float, 正值向远推)
float GetMaterialScreenSpaceDepthOffset(FMaterialVertexParameters Parameters)
{
%s;
}
// 局部位置缩放 (float3, 在WorldTransform前应用)
float3 GetMaterialLocalPositionScale(FMaterialVertexParameters Parameters)
{
%s;
}
```
### PixelDepthOffset 修复
```hlsl
// ASW Change : 2020/10/29 Takeshi.N
// 修复 PC 平台 PixelDepthOffset 为 0 或负值时的噪声问题
// 当 PDO <= 0 时,直接使用原始 SvPosition.z 而非计算值
DeviceDepth = lerp(
DeviceDepth, // PDO > 0使用计算后的深度
MaterialParameters.SvPosition.z, // PDO <= 0使用原始深度
step(PixelDepthOffset, 0) // step 函数PDO<=0 返回 1
);
```
## 关联文档
- [[正交投影混合]] — 使用 `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 支持 |
| 文件路径 | 行号 | 修改类型 | 修改内容 |
|---------|------|---------|---------|
| `Shaders/Private/MaterialTemplate.ush` | L2235~L2240 | 新增 | `GetMaterialOrthoBlendWeight` 函数 |
| `Shaders/Private/MaterialTemplate.ush` | L2243~L2252 | 新增 | `GetMaterialScreenAlignedMeshOffset/Scale` 函数 |
| `Shaders/Private/MaterialTemplate.ush` | L2255~L2260 | 新增 | `GetMaterialScreenSpaceDepthOffset` 函数 |
| `Shaders/Private/MaterialTemplate.ush` | L2263~L2268 | 新增 | `GetMaterialLocalPositionScale` 函数 |
| `Shaders/Private/MaterialTemplate.ush` | L2584~L2587 | 新增 | PixelDepthOffset ≤ 0 时使用原始深度 |
| `Source/Runtime/Engine/Public/SceneTypes.h` | — | 新增 | `MP_OrthoBlendWeight` 等枚举值 |
| `Source/Runtime/Engine/Classes/Materials/Material.h` | — | 新增 | `bScreenAlignedMesh``bForcedPrepass` 标记 |
| `Source/Runtime/Engine/Classes/Materials/REDMaterialInstanceDynamic.h` | 全文 | **新增文件** | 自定义 MaterialInstanceDynamic |
| `Source/Runtime/Engine/Private/Materials/REDMaterialInstanceDynamic.cpp` | 全文 | **新增文件** | 实现 |
| `Source/Runtime/Engine/Private/Materials/HLSLMaterialTranslator.cpp` | — | 修改 | 新属性编译支持 |
| `Source/Editor/MaterialEditor/` | — | 修改 | 编辑器 UI 支持 |