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

@@ -1,7 +1,7 @@
---
title: Animation
date: 2026-05-03 00:00:00
excerpt: ARC 引擎动画系统修改分类索引
excerpt: ARC 引擎动画系统修改常量关键帧压缩、FBX 导入扩展
tags:
- ARC
- Animation
@@ -18,7 +18,161 @@ ARC 引擎的动画系统修改围绕**格斗游戏对帧精确动画的需求**
## 功能列表
| 功能 | 文档 | 说明 |
|------|------|------|
| 常量关键帧压缩 | [[常量关键帧压缩]] | 60fps 帧限动画、4F 间隔校正 |
| FBX 导入扩展 | [[FBX导入扩展]] | RED 动画数据、轮廓线 ID、首末帧处理 |
| 功能 | 说明 |
|------|------|
| 常量关键帧压缩 | 60fps 帧限动画、4F 间隔校正 |
| FBX 导入扩展 | RED 动画数据、轮廓线 ID、首末帧处理 |
## 常量关键帧压缩
### 概述
新增 `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` 也被扩展以支持常量帧模式选项。
### 完整代码解析
```cpp
// AnimCompress_Constant.h/.cpp
// 常量关键帧压缩 — 不做帧间插值
class UAnimCompress_Constant : public UAnimCompress
{
// 每帧独立存储位置/旋转/缩放
// 运行时取值 snap 到最近关键帧(不做线性插值)
// 确保 60fps 下每帧状态确定性
// 4F 间隔自动校正Avatar 动画):
// 将导入的帧时间 snap 到 4 帧倍数
// 原始帧: 0, 3, 7, 11, ...
// 校正后: 0, 4, 8, 12, ...
};
```
### 关联文档
- [[Animation#FBX 导入扩展]] — `bImportREDAnimationData` 控制导入时的帧限处理
### 代码修改情况
| 文件路径 | 修改类型 | 修改内容 |
|---------|---------|---------|
| `Source/Runtime/Engine/Public/Animation/AnimCompress_Constant.h` | **新增文件** | 常量关键帧压缩类声明 |
| `Source/Runtime/Engine/Private/Animation/AnimCompress_Constant.cpp` | **新增文件** | 实现:无插值采样 + 4F 间隔校正 |
| `Source/Runtime/Engine/Public/Animation/AnimCompress_Automatic.h` | 修改 | 扩展支持常量帧模式选项 |
## FBX 导入扩展
### 概述
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 自定义骨骼网格数据。
### 完整代码解析
```cpp
// FbxImporter.h — 新增导入选项
struct FBXImportOptions
{
bool bImportREDAnimationData; // 启用 60fps 帧限动画导入
bool bDeleteFirstFrame; // 删除第一帧T-Pose
bool bCopyLastFrame; // 复制末帧到动画结尾
int32 OutlineIndexUVChannel; // 轮廓线 ID 所在的 UV 通道
// -1 = 不导入 OutlineID
// 0 = UV0, 1 = UV1, ... N = UVN
};
// 法线导入模式扩展
enum EFBXNormalImportMethod
{
FBXNIM_ComputeNormals,
FBXNIM_ImportNormals,
FBXNIM_ImportNormalsAndTangents,
FBXNIM_ImportNormalsAndComputeNormalsToTangents // <-- ASW 新增
// 导入法线 + 从导入的法线计算切线
// 标准 UE4 只支持"导入法线和切线"或"完全计算"
};
```
### 关联文档
- [[RED自定义数据通道]] — OutlineID 的渲染端使用
### 代码修改情况
| 文件路径 | 修改类型 | 修改内容 |
|---------|---------|---------|
| `Source/Editor/UnrealEd/Public/FbxImporter.h` | 修改 | 新增 `bImportREDAnimationData``OutlineIndexUVChannel` 等选项 |
| `Source/Editor/UnrealEd/Private/Fbx/FbxAnimationImport.cpp` | 修改 | 60fps 帧限导入 + 首末帧处理 |
| `Source/Editor/UnrealEd/Private/Fbx/FbxMeshImport.cpp` | 修改 | 轮廓线 ID 从 UV 通道导入 |
| `Source/Editor/UnrealEd/Private/Fbx/FbxMainImport.cpp` | 修改 | XSI 2015 FBX 格式支持 |
| `Source/Editor/UnrealEd/Private/Fbx/FbxStaticMeshImport.cpp` | 修改 | `FBXNIM_ImportNormalsAndComputeNormalsToTangents` 法线模式 |
| `Source/Editor/UnrealEd/Private/SkeletalMeshEdit.cpp` | 修改 | LOD 重导入时保留 OutlineID |
| `Source/Editor/UnrealEd/Private/StaticMeshEdit.cpp` | 修改 | 同上 |

View File

@@ -1,76 +0,0 @@
---
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` | 同上 |

View File

@@ -1,56 +0,0 @@
---
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` | 扩展 |