56cb314799
原 docs/plans/ 下的 10 份混合文档(需求+设计混杂)归档到 docs/_archive/plans/ 作为决策考古用途。hammer-deformation-enhancement 实施清单迁移到 docs/impl/。后续工作产出统一进入 docs/requirements/ 与 docs/design/ 两个清晰分层。 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
12 KiB
12 KiB
淬火退火相变与应力疲劳系统总览
项目: BladeSmith 日期: 2026-01-23 目标: 实现游戏娱乐级的高真实度冶金学物理系统 性能目标: 60 FPS @ 锤击操作
1. 设计目标
1.1 核心物理现象
实现以下冶金学物理过程:
-
淬火硬化(马氏体相变)
- 快速冷却改变晶体结构
- 极大提升硬度和脆性
- 温度区间与冷却速率双参数控制
-
退火/回火机制
- 重新加热软化材料
- 应力松弛,硬度降低
- 可逆性支持(可多次热处理)
-
应力累积与松弛
- 多来源应力:塑性形变、热应力、相变应力、残余应力
- 应力影响形变阻力和开裂风险
- 温度驱动的应力松弛机制
-
疲劳累积与耐久度
- 反复锻打导致的材料疲劳
- 裂纹起始与扩展机制
- 刀具使用中的耐久度系统
1.2 设计原则
- 游戏体验优先: 简化物理模型,保留核心机制,60 FPS性能
- 三阶段可视化: 淬火过程高辨识度→冷却过渡→真实物理表现
- 渐进式实现: 分阶段开发,每阶段可独立运行
- 架构扩展性: 为未来功能预留接口
- YAGNI原则: 避免过度设计,专注核心功能
2. 整体架构方案
2.1 混合体素-顶点架构
核心思想: 体素存储"物理场",顶点存储"材料历史"
┌─────────────────────────────────────────────────────────┐
│ 锤击输入 │
└─────────────────┬───────────────────────────────────────┘
│
┌────────┴────────┐
│ │
┌────▼─────┐ ┌─────▼────┐
│ 体素层 │ │ 顶点层 │
│ (GPU) │ │ (GPU) │
└────┬─────┘ └─────┬────┘
│ │
│ 双向采样通信 │
└────────┬────────┘
│
┌────────▼────────┐
│ 渲染 & 显示 │
└─────────────────┘
2.2 体素层(全局物理场)
存储内容:
- 温度场(已有)
- 冷却速率场(用于淬火判定)
- 相态标记(0=奥氏体, 1=马氏体, 2=珠光体, 3=开裂)
分辨率: 50×50×50(可配置) 更新方式: GPU Compute Shader(Ping-Pong双缓冲)
2.3 顶点层(局部材料历史)
存储内容:
- 硬度系数(影响形变阻力)
- 脆性系数(影响开裂风险)
- 内部应力值(标量简化)
- 疲劳值(0-1,影响耐久度)
- 相态标记(从体素采样)
- 回火颜色(用于真实视觉表现)
- 氧化层度数(用于氧化层表现)
- 打磨度(表面状态)
数量: 20-50万顶点(基础)
2.4 数据流
锤击事件
↓
1. 形变计算(顶点位移)
↓
2. 应力累积(塑性应力+残余应力)
↓
3. 从温度体素采样相态和材料参数
↓
4. 硬度/脆性计算(基于相变+冷却速率)
↓
5. 更新顶点属性(硬度、应力、疲劳)
↓
6. 应力扩散与松弛
↓
7. 疲劳累积与裂纹判定
↓
8. 材质可视化更新
3. 子系统概述
3.1 淬火退火相变系统
目标: 实现基于温度和冷却速率的真实热处理效果
核心机制:
- 温度区间判定(800-1200°C)
- 冷却速率计算(快速/中速/慢速)
- 硬度倍数映射(基于Sigmoid函数)
- 脆性系数增加(基于冷却速率)
- 相态标记永久保留
可视化:
- 三阶段可视化:过程高辨识度→冷却过渡→真实物理表现
- 真实回火色系统(基于最后回火温度)
- 氧化层表现(基于冷却介质)
详细设计: 见 淬火退火相变系统设计.md
3.2 应力累积系统
目标: 模拟多来源应力累积与物理表现
应力来源:
- 塑性形变应力(锤击)
- 热应力(温度梯度)
- 相变应力(马氏体膨胀)
- 残余应力(外部约束)
物理表现:
- 弯曲/扭曲(应力梯度导致)
- 裂纹起始与扩展(应力超阈值)
- 应力松弛(温度驱动)
辅助功能:
- 应力扫描模式(玩家主动开启)
- 彩虹色谱可视化应力分布
详细设计: 见 应力累积系统设计.md
3.3 疲劳累积与耐久度系统
目标: 模拟材料疲劳和刀具耐久度
疲劳机制:
- 累积式疲劳值(每次锻打增加)
- 应力和温度影响疲劳率
- 疲劳裂纹起始与扩展
耐久度系统:
- 基于平均疲劳、裂纹数量、最大应力
- 使用中的损伤累积
- 回火部分恢复耐久度
详细设计: 见 疲劳累积与耐久度系统设计.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 CoolingRate; // 冷却速率(°C/s)
UPROPERTY()
uint8 PhaseState; // 相态(0=奥氏体, 1=马氏体, 2=珠光体, 3=开裂)
FTemperatureVoxel()
: Temperature(20.0f)
, PlasticityCoefficient(0.0f)
, Flags(0)
, CoolingRate(0.0f)
, PhaseState(0)
{}
};
4.2 顶点自定义属性
// 在DynamicIronBlock.h中添加
class ADynamicIronBlock : public ADynamicMeshActor
{
// 顶点属性层(使用FDynamicMesh3的扩展属性系统)
TDynamicMeshVertexAttribute<float>* HardnessCoefficient; // 硬度系数
TDynamicMeshVertexAttribute<float>* Brittleness; // 脆性系数(0-1)
TDynamicMeshVertexAttribute<float>* InternalStress; // 内部应力值
TDynamicMeshVertexAttribute<float>* FatigueValue; // 疲劳值(0-1)
TDynamicMeshVertexAttribute<uint8>* PhaseState; // 相态标记
TDynamicMeshVertexAttribute<FVector>* TemperColor; // 回火颜色
TDynamicMeshVertexAttribute<float>* OxidationLevel; // 氧化层度数
TDynamicMeshVertexAttribute<float>* PolishAmount; // 打磨度
};
4.3 顶点颜色编码方案
由于顶点颜色只有4通道(RGBA),需要精心分配:
| 通道 | 用途 | 范围 | 说明 |
|---|---|---|---|
| R | 温度可视化 | 0-1 | 淬火过程:温度映射,冷却后恢复 |
| G | 打磨度 | 0-1 | 0=生锈,1=光亮金属 |
| B | 噪声种子 | 0-1 | 用于无漂移纹理采样 |
| A | 辅助标记 | 0-3 | 0=正常, 1=裂纹区, 2=淬火区(临时) |
额外数据通过UV1通道或自定义属性传递。
5. GPU-CPU分工
5.1 GPU Compute Shader职责
- 体素层面热力学计算
- 温度场更新
- 冷却速率计算
- 相态判定
- 应力扩散(简化版)
5.2 CPU职责
- 顶点属性更新
- 锤击碰撞检测
- 形变计算
- 硬度/脆性/应力/疲劳公式应用
- 开裂判定
- 材质可视化更新
- 游戏逻辑(辅助功能触发)
6. 性能预算
6.1 目标帧时间分解(60 FPS = 16.67ms)
| 系统 | 预算 | 说明 |
|---|---|---|
| 渲染(UE5基础) | 10ms | 场景渲染、后处理 |
| 锤击形变计算 | 2-3ms | 顶点位移、BVH更新 |
| 网格质量优化 | 1-2ms | 边翻转、平滑 |
| GPU物理计算 | 1ms | Compute Shader(异步) |
| 应力/疲劳更新 | 0.5ms | 公式计算 |
| 材质可视化 | 0.5ms | 顶点颜色更新 |
| 总锤击开销 | ≤7ms | 保持在预算内 |
6.2 内存预算
| 数据 | 大小 | 说明 |
|---|---|---|
| 网格顶点(20万) | 16.8 MB | 84字节/顶点(新增属性) |
| 网格三角形(40万) | 4.8 MB | 3×4字节索引 |
| BVH结构 | 5 MB | 加速结构 |
| 物理场体素(50³) | 0.4 MB | 扩展后的体素结构 |
| GPU缓冲区 | 3 MB | Ping-Pong缓冲 |
| 单铁块总计 | ~30 MB | 可接受 |
7. 实施计划
阶段1:淬火退火相变系统(3-4天)
目标: 实现完整的热处理机制
- 扩展体素结构(冷却速率、相态)
- 顶点硬度/脆性属性系统
- 温度区间判定逻辑
- 冷却速率计算(滑动平均)
- 硬度/脆性公式实现
- 三阶段可视化系统
- 回火色系统
- 氧化层表现
验收标准:
- 淬火后硬度显著提升
- 冷却速率影响硬度和脆性
- 回火后硬度降低,应力松弛
- 视觉表现符合真实物理规律
阶段2:应力累积系统(2-3天)
目标: 实现应力累积与物理表现
- 应力来源分类与计算
- 应力累积规则
- 应力扩散机制
- 形变阻力公式
- 弯曲/扭曲机制
- 裂纹起始判定
- 裂纹扩展逻辑
- 应力扫描辅助功能
验收标准:
- 多来源应力正确累积
- 高应力区域形变困难
- 应力超阈值产生裂纹
- 裂纹沿应力梯度扩展
阶段3:疲劳累积与耐久度系统(2-3天)
目标: 实现材料疲劳和耐久度机制
- 疲劳值累积规则
- 应力和温度影响疲劳率
- 疲劳裂纹起始
- 裂纹扩展概率
- 耐久度计算公式
- 使用中的损伤累积
- 回火恢复机制
- 刀具失效判定
验收标准:
- 反复锻打疲劳累积
- 疲劳裂纹产生并扩展
- 耐久度正确计算
- 使用导致耐久度下降
- 回火部分恢复耐久度
阶段4:集成与优化(1-2天)
目标: 系统集成与性能优化
- 各子系统联动测试
- 参数调优
- 性能Profiling
- 调试工具完善
- 文档更新
验收标准:
- 60 FPS @ 连续锤击
- 所有功能正常运行
- 调试工具完善
- 文档齐全
8. 风险评估
8.1 技术风险
| 风险 | 概率 | 影响 | 缓解措施 |
|---|---|---|---|
| 公式过于复杂,性能不足 | 中 | 高 | 简化计算,使用GPU并行 |
| 参数调优困难 | 中 | 中 | 提供调试工具,分阶段测试 |
| 可视化效果不真实 | 中 | 中 | 参考真实照片,迭代优化 |
| 网格拓扑变化导致属性丢失 | 中 | 高 | 使用持久化ID追踪顶点 |
8.2 设计风险
| 风险 | 概率 | 影响 | 缓解措施 |
|---|---|---|---|
| 过度复杂化,开发周期过长 | 高 | 高 | 严格遵守YAGNI,分阶段验收 |
| 物理模型过于简化,真实感不足 | 中 | 中 | 阶段性用户测试,迭代调整 |
| 辅助功能与真实表现混淆 | 低 | 中 | 明确区分,UI提示清晰 |
9. 参考资料
9.1 物理基础
- 《金属塑性成形原理》(清华大学出版社)
- 《材料科学基础》(上海交通大学出版社)
- 《金属热处理原理与工艺》(机械工业出版社)
- Metals Handbook: Heat Treating (ASM International)
9.2 游戏案例
- My Summer Car - 机械装配真实度
- BeamNG.drive - 动态网格形变
- Dwarf Fortress - 材料属性系统
10. 文件索引
文档版本: 1.0 最后更新: 2026-01-23 状态: 设计完成,待评审