14 KiB
14 KiB
高真实度锻造系统设计
项目: BladeSmith 日期: 2026-01-22 目标: 实现游戏娱乐级的高真实度金属锻造物理系统 性能目标: 60 FPS @ 锤击操作
1. 设计目标
1.1 核心物理现象
实现以下四大冶金学物理过程:
-
加工硬化/应变硬化
- 金属在锻打过程中逐渐变硬
- 需要回火(加热)才能继续加工
- 影响后续形变的阻力
-
应力/应变分布
- 不均匀形变导致内部应力累积
- 可能引起开裂、扭曲、回弹
- 影响武器最终性能
-
淬火硬化(马氏体相变)
- 快速冷却改变晶体结构
- 极大提升硬度和脆性
- 临界温度控制(800-1200°C)
-
微观组织演化(晶粒)
- 晶粒尺寸、形状、取向影响材料特性
- 影响强度、韧性、视觉花纹
- 支持大马士革钢花纹效果
1.2 设计原则
- 游戏娱乐级精度: 简化物理模型,保持真实感,60 FPS性能
- 渐进式实现: 分阶段开发,每阶段可独立运行
- 架构扩展性: 为未来功能预留接口
- YAGNI原则: 避免过度设计,专注核心功能
2. 整体架构方案
2.1 技术方案:混合体素-顶点架构
核心思想: 体素存储"物理场",顶点存储"材料历史"
┌─────────────────────────────────────────────────────────┐
│ 锤击输入 │
└─────────────────┬───────────────────────────────────────┘
│
┌────────┴────────┐
│ │
┌────▼─────┐ ┌─────▼────┐
│ 体素层 │ │ 顶点层 │
│ (GPU) │ │ (GPU) │
└────┬─────┘ └─────┬────┘
│ │
│ 双向采样通信 │
└────────┬────────┘
│
┌────────▼────────┐
│ 渲染 & 显示 │
└─────────────────┘
体素层(全局物理场)
存储内容:
- 温度场(已有)
- 平均应变率场(新增)
- 冷却速率场(用于淬火判断)
- 表面打磨度场(可选)
分辨率: 50×50×50(可配置) 更新方式: GPU Compute Shader(Ping-Pong双缓冲)
顶点层(局部材料历史)
存储内容:
- 累积塑性应变(记录形变历史)
- 当前硬度系数(影响形变阻力)
- 晶粒尺寸/取向(简化标量)
- 应力张量(简化为标量应力值)
- 初始位置(用于纹理固定)
- 打磨度(表面状态)
数量: 20-50万顶点(基础),刀刃区域局部加密至100万顶点/cm²
2.2 数据流
锤击事件
↓
1. 形变计算(顶点位移)
↓
2. 更新顶点应变累积
↓
3. 从温度体素采样塑性系数
↓
4. 硬化计算(基于应变+温度)
↓
5. 更新顶点硬度系数
↓
6. 更新体素应变率场
↓
7. 温度/淬火/退火判断
↓
8. 材质可视化更新
2.3 关键优势
| 特性 | 优势 |
|---|---|
| 性能可控 | 体素粗糙(50³),顶点精细(20-50万),可调节 |
| 物理直觉清晰 | 全局场(温度、应力扩散)+ 局部历史(材料记忆) |
| 利用现有基础 | 复用GPU Compute、Ping-Pong、RDG基础设施 |
| 易于调试 | 体素和顶点数据可独立可视化 |
3. 核心子系统设计
3.1 刀刃形成系统
目标: 解决锻打边缘时材料流动方向性,形成平整锐利的刀刃
技术方案: 各向异性材料流动 + 局部边缘约束
详细设计: 见 刀刃形成技术细节.md
关键特性:
- 材料优先沿边缘方向流动(非均匀扩散)
- 边缘顶点保持共线约束
- 自适应网格细分(刀刃区域高密度)
3.2 表面磨损系统
目标: 锤击在表面留下痕迹(铁锈脱落、金属光亮、划痕)
技术方案: 顶点属性存储 + 程序化细节 + 无漂移采样
详细设计: 见 表面磨损系统细节.md
关键特性:
- 顶点存储"打磨度"和"初始位置"
- 材质基于初始位置采样噪声(无漂移)
- 支持铁锈、氧化层、酸蚀痕迹等多种表面状态
- 金属度、粗糙度动态更新
3.3 网格质量维护系统
目标: 防止锻打导致的网格退化(细长三角形、分布不均)
技术方案: 增量式局部优化
详细设计: 见 网格质量优化细节.md
关键特性:
- 每次锤击后局部优化(仅受影响区域)
- 边翻转 + Laplacian平滑 + 自适应重网格化
- 保留顶点属性(打磨度、应变等)
- 性能开销: +5-15ms/次
3.4 物理模拟系统
目标: 实现温度-塑性-硬化-相变的完整冶金学循环
技术方案: GPU Compute Shader多物理场耦合
详细设计: 见 物理模拟架构细节.md
关键特性:
- 温度传导与冷却(已有,需扩展)
- 加工硬化模型(基于累积应变)
- 淬火/退火相变判断
- 应力累积与松弛
4. 数据结构设计
4.1 扩展体素结构
USTRUCT(BlueprintType)
struct FTemperatureVoxel
{
GENERATED_BODY()
// ===== 已有字段 =====
UPROPERTY()
float Temperature; // 温度(°C)
UPROPERTY()
float PlasticityCoefficient; // 塑性系数(0-1)
UPROPERTY()
uint8 Flags; // 标志位(bit 0: 表面体素)
// ===== 新增字段 =====
UPROPERTY()
float AverageStrainRate; // 平均应变率(记录形变活跃度)
UPROPERTY()
float CoolingRate; // 冷却速率(用于淬火判断)
UPROPERTY()
uint8 PhaseState; // 相态(0=奥氏体, 1=马氏体, 2=珠光体)
FTemperatureVoxel()
: Temperature(20.0f)
, PlasticityCoefficient(0.0f)
, Flags(0)
, AverageStrainRate(0.0f)
, CoolingRate(0.0f)
, PhaseState(0)
{}
};
4.2 顶点自定义属性
// 在DynamicIronBlock.h中添加
class ADynamicIronBlock : public ADynamicMeshActor
{
// 顶点属性层(使用FDynamicMesh3的扩展属性系统)
TDynamicMeshVertexAttribute<FVector>* InitialPositions; // 初始位置(不变)
TDynamicMeshVertexAttribute<float>* AccumulatedStrain; // 累积应变
TDynamicMeshVertexAttribute<float>* HardnessCoefficient; // 硬度系数
TDynamicMeshVertexAttribute<float>* PolishAmount; // 打磨度
TDynamicMeshVertexAttribute<float>* GrainSize; // 晶粒尺寸
TDynamicMeshVertexAttribute<float>* StressValue; // 应力值(简化)
};
4.3 顶点颜色编码方案
由于顶点颜色只有4通道(RGBA),需要精心分配:
| 通道 | 用途 | 范围 | 说明 |
|---|---|---|---|
| R | 温度可视化 | 0-1 | 从体素采样,映射到颜色 |
| G | 打磨度 | 0-1 | 0=生锈,1=光亮金属 |
| B | 噪声种子 | 0-1 | 用于无漂移纹理采样 |
| A | 硬度/应变 | 0-1 | 可视化应变或硬化程度 |
额外数据通过UV1通道或自定义属性传递。
5. 性能预算
5.1 目标帧时间分解(60 FPS = 16.67ms)
| 系统 | 预算 | 说明 |
|---|---|---|
| 渲染(UE5基础) | 10ms | 场景渲染、后处理 |
| 锤击形变计算 | 2-3ms | 顶点位移、BVH更新 |
| 网格质量优化 | 1-2ms | 边翻转、平滑 |
| GPU温度计算 | 0.5ms | Compute Shader(异步) |
| 顶点属性更新 | 0.5ms | 硬化、应力计算 |
| 材质可视化 | 1ms | 顶点颜色更新 |
| 总锤击开销 | ≤7ms | 保持在预算内 |
5.2 内存预算
| 数据 | 大小 | 说明 |
|---|---|---|
| 网格顶点(20万) | 13.6 MB | 68字节/顶点 |
| 网格三角形(40万) | 4.8 MB | 3×4字节索引 |
| BVH结构 | 5 MB | 加速结构 |
| 温度体素(50³) | 0.3 MB | 24字节/体素 |
| GPU缓冲区 | 2 MB | Ping-Pong温度缓冲 |
| 单铁块总计 | ~26 MB | 可接受 |
5.3 可扩展性
- 网格密度: 可配置20万-100万顶点
- 体素分辨率: 可配置30³-80³
- 优化开关: 各子系统可独立禁用
- LOD支持: 远距离降低网格密度
6. 实施计划
阶段1:核心形变增强(2-3天)
目标: 实现刀刃形成和表面磨损的基础版本
- 各向异性材料流动(刀刃方向检测)
- 顶点打磨度属性系统
- 初始位置存储(无漂移采样)
- 材质扩展(铁锈/金属混合)
- 简单Laplacian平滑(网格质量维护基础)
验收标准:
- 锻打边缘时材料优先沿边缘流动
- 锤击后表面铁锈脱落,露出光亮金属
- 形变后铁锈图案不"滑动"
阶段2:网格质量系统(1-2天)
目标: 防止网格退化
- 三角形质量检测(长宽比、面积)
- 边翻转优化算法
- 增量式Laplacian平滑(带权重)
- 局部自适应重网格化(FRemesher集成)
- 性能优化(仅处理受影响区域)
验收标准:
- 连续锻打50次后网格仍保持均匀
- 无明显细长三角形(长宽比>0.1)
- 锤击响应时间<10ms
阶段3:物理模拟扩展(3-4天)
目标: 实现完整冶金学循环
- 扩展体素结构(应变率、冷却率、相态)
- 顶点应变累积系统
- 加工硬化模型(应变→硬度映射)
- 淬火判断逻辑(温度+冷却速率→马氏体转变)
- 退火/回火逻辑(温度+时间→硬度降低)
- GPU Compute Shader扩展(多物理场耦合)
验收标准:
- 连续锻打后铁块变硬(形变阻力增加)
- 加热后硬度降低,可继续加工
- 淬火后硬度显著提升(快速冷却)
阶段4:晶粒与视觉效果(2-3天)
目标: 视觉真实度提升
- 晶粒尺寸标量模拟(简化模型)
- 大马士革花纹支持(多层材料ID)
- 应力可视化(顶点颜色.A通道)
- 程序化细节噪声(材质层)
- 开裂判定与可视化(应力阈值)
验收标准:
- 高应变区域可视化(颜色变化)
- 支持简单的大马士革花纹(层状结构)
- 应力过大时出现视觉裂纹(不破坏网格)
阶段5:优化与打磨(1-2天)
目标: 性能优化和细节调整
- 性能Profiling(Unreal Insights)
- GPU Compute优化(共享内存、波前优化)
- 参数曝光到Blueprint(方便调试)
- 调试可视化工具(体素场可视化、应力热图)
- 文档和示例场景
验收标准:
- 60 FPS @ 连续锤击
- 所有参数可在编辑器调节
- 提供完整的使用文档
7. 风险评估
7.1 技术风险
| 风险 | 概率 | 影响 | 缓解措施 |
|---|---|---|---|
| 网格拓扑动态变化导致属性丢失 | 中 | 高 | 使用UUID或持久化ID追踪顶点 |
| GPU Compute性能不足 | 低 | 高 | 降低体素分辨率,异步计算 |
| 大马士革花纹实现困难 | 高 | 中 | 阶段4可选功能,简化模型 |
| 网格重建开销过大 | 中 | 中 | 限制重建频率,局部优化 |
7.2 设计风险
| 风险 | 概率 | 影响 | 缓解措施 |
|---|---|---|---|
| 过度复杂化,开发周期过长 | 高 | 高 | 严格遵守YAGNI,分阶段验收 |
| 物理模型过于简化,真实感不足 | 中 | 中 | 阶段性用户测试,迭代调整 |
| 顶点通道不足,数据无法传递 | 低 | 中 | 使用UV1或自定义缓冲区 |
8. 技术债务与未来扩展
8.1 当前简化假设
- 应力张量简化为标量: 真实应力是3×3张量,当前仅用单值
- 晶粒模型极度简化: 真实晶粒有复杂的3D形状和取向
- 相变模型经验化: 马氏体转变实际需要CCT曲线
- 无热-力-电-磁耦合: 忽略了磁性、电阻率等二次效应
8.2 未来可扩展方向
- 多材料支持: 当前仅钢,未来可扩展铜、青铜、钛合金
- 焊接系统: 多块金属的连接与材料混合
- 锻造工具多样性: 不同形状的锤头(平锤、圆锤、凿子)
- 多人协作锻造: 网络同步动态网格
- VR支持: 空间交互与力反馈
9. 参考资料
9.1 物理基础
- 《金属塑性成形原理》(清华大学出版社)
- 《材料科学基础》(上海交通大学出版社)
- Metals Handbook: Forging and Forming (ASM International)
9.2 技术参考
- Unreal Engine 5 Geometry Scripting文档
- Real-Time Collision Detection by Christer Ericson (网格优化)
- GPU Gems 3: Chapter 39 - Parallel Prefix Sum (GPU算法)
- Siggraph 2020: Dynamic Mesh Simplification (网格优化)
9.3 游戏案例
- My Summer Car - 机械装配真实度
- BeamNG.drive - 动态网格形变
- Dwarf Fortress - 材料属性系统
10. 附录
10.1 术语表
| 术语 | 英文 | 说明 |
|---|---|---|
| 塑性形变 | Plastic Deformation | 永久性的形状改变 |
| 加工硬化 | Work Hardening | 形变导致材料变硬的现象 |
| 马氏体 | Martensite | 淬火后的硬相组织 |
| 奥氏体 | Austenite | 高温下的软相组织 |
| 晶粒 | Grain | 金属微观结构的基本单元 |
| 应变 | Strain | 材料的相对变形量 |
| 应力 | Stress | 材料内部的力 |
| BVH | Bounding Volume Hierarchy | 碰撞检测加速结构 |
| RDG | Render Dependency Graph | UE5的GPU任务调度系统 |
10.2 文件索引
文档版本: 1.0 最后更新: 2026-01-22 状态: 设计完成,待评审