diff --git a/docs/design/00-锻造系统总体技术架构.md b/docs/design/00-锻造系统总体技术架构.md new file mode 100644 index 0000000..9157bcc --- /dev/null +++ b/docs/design/00-锻造系统总体技术架构.md @@ -0,0 +1,404 @@ +# 锻造系统总体技术架构 + +**项目**: BladeSmith +**文档类型**: 技术设计(总体) +**版本**: 2.0 +**最后更新**: 2026-08-11 +**状态**: 整合自原 `2026-01-22-高真实度锻造系统设计.md` 与 `2026-01-23-淬火退火相变与应力疲劳系统总览.md` 的技术部分 + +> 本文档描述锻造系统的总体技术架构、数据结构、性能预算与跨子系统共用决策。需求侧见 [requirements/00-锻造系统总体需求.md](../requirements/00-锻造系统总体需求.md)。各子系统的算法/公式/代码细节见 [design/01~07](./)。 + +--- + +## 1. 架构目标 + +| 目标 | 含义 | +|---|---| +| **性能可控** | 体素层粗、顶点层细,分辨率独立可调,保证 60 FPS | +| **物理直觉清晰** | 全局场(温度、应力扩散)+ 局部历史(材料记忆)职责分明 | +| **复用现有基础** | 在已有的 GPU Compute / Ping-Pong / RDG / DynamicMesh3 基础上扩展 | +| **易于调试** | 体素数据与顶点数据可独立可视化 | +| **架构扩展性** | 顶点属性层是开放的,新增子系统不需要改动核心数据结构 | + +## 2. 总体架构:混合体素-顶点 + +核心思想:**体素层存储"全局物理场",顶点层存储"局部材料历史"**,两层通过双向采样通信。 + +``` +┌─────────────────────────────────────────────────────────┐ +│ 锤击输入(CPU) │ +└─────────────────┬───────────────────────────────────────┘ + │ + ┌────────┴────────┐ + │ │ + ┌────▼─────┐ ┌─────▼─────┐ + │ 体素层 │ │ 顶点层 │ + │ (GPU) │ │ (CPU/GPU) │ + └────┬─────┘ └─────┬────┘ + │ │ + │ 双向采样通信 │ + └────────┬────────┘ + │ + ┌────────▼────────┐ + │ 渲染 & 显示 │ + └─────────────────┘ +``` + +### 2.1 体素层(全局物理场) + +| 字段类别 | 字段 | 说明 | +|---|---|---| +| 已有 | 温度 | °C | +| 已有 | 塑性系数 | 0-1 | +| 已有 | Flags | 标志位(如 bit 0 = 表面体素) | +| 新增 | 平均应变率 | 形变活跃度,0-1 归一化 | +| 新增 | 冷却速率 | °C/s,用于淬火判断 | +| 新增 | 相态 | 奥氏体/马氏体/珠光体/开裂 | +| 新增 | 是否已淬火标记 | bool | + +- **分辨率**: 50×50×50(典型),可配置 30³-80³ +- **更新方式**: GPU Compute Shader,Ping-Pong 双缓冲 +- **优势**: 全局扩散计算(温度传导、应力扩散)在体素层做,与顶点数无关 + +### 2.2 顶点层(局部材料历史) + +| 字段 | 用途 | +|---|---| +| 初始位置 | 无漂移纹理采样 | +| 累积塑性应变 | 加工硬化输入、疲劳计算 | +| 硬度系数 | 形变阻力 | +| 脆性系数 | 开裂风险 | +| 内部应力 | 标量简化,影响形变/弯曲/开裂 | +| 应力方向 | 可选三维向量 | +| 疲劳值 | 0-1,刀具耐久度 | +| 打磨度 | 0=生锈,1=光亮 | +| 晶粒尺寸 | 0-1 归一化 | +| 相态标记 | 从体素采样 | +| 回火颜色 | 真实视觉表现 | +| 氧化层度数 | 氧化层表现 | +| 裂纹状态 | 0=无,1=有 | + +- **数量**: 20-50 万顶点(基础),刀刃区域局部加密到 100 万/cm² +- **存储**: `TDynamicMeshVertexAttribute` 自定义属性层 +- **优势**: 局部历史精确,顶点独立维护,可承载材料记忆 + +### 2.3 双向采样 + +- **体素 → 顶点**: 顶点根据自己的位置,从体素网格三线性插值采样温度、相态、冷却速率等 +- **顶点 → 体素**: 顶点的应变率、形变活跃度回写体素,影响全局扩散 + +## 3. 锤击事件数据流 + +每次锤击触发以下 8 步流水线(各步对应一个子系统设计文档): + +``` +锤击事件 + ↓ +1. 形变计算(顶点位移) ── design/01-刀刃形成 + ↓ +2. 更新顶点应变累积 ── design/04-物理模拟 + ↓ +3. 从温度体素采样塑性/相态 ── 架构层(本节) + ↓ +4. 硬化计算(应变+温度→硬度) ── design/04-物理模拟 + ↓ +5. 应力累积(塑性+热+相变+残余) ── design/06-应力系统 + ↓ +6. 更新体素应变率场、温度/淬火/退火 ── design/05-淬火系统 + ↓ +7. 疲劳累积与裂纹判定 ── design/07-疲劳系统 + ↓ +8. 材质可视化更新(顶点颜色/材质参数) ── design/02-表面磨损、05-淬火系统 +``` + +## 4. 数据结构定义 + +### 4.1 扩展体素结构 + +```cpp +USTRUCT(BlueprintType) +struct FTemperatureVoxel +{ + GENERATED_BODY() + + // ===== 已有字段 ===== + UPROPERTY() + float Temperature; // 温度(°C) + + UPROPERTY() + float PlasticityCoefficient; // 塑性系数(0-1) + + UPROPERTY() + uint8 Flags; // 标志位(bit 0: 表面体素) + + // ===== 新增字段 ===== + UPROPERTY() + float AverageStrainRate; // 平均应变率(0-1) + + UPROPERTY() + float CoolingRate; // 冷却速率(°C/s) + + UPROPERTY() + EPhaseState PhaseState; // 相态 + + UPROPERTY() + bool bHasBeenQuenched; // 是否经历过快速冷却 + + FTemperatureVoxel() + : Temperature(20.0f) + , PlasticityCoefficient(0.0f) + , Flags(0) + , AverageStrainRate(0.0f) + , CoolingRate(0.0f) + , PhaseState(EPhaseState::Austenite) + , bHasBeenQuenched(false) + {} +}; +``` + +### 4.2 相态枚举 + +```cpp +UENUM(BlueprintType) +enum class EPhaseState : uint8 +{ + Austenite UMETA(DisplayName = "奥氏体"), // 高温软相(>800°C) + Martensite UMETA(DisplayName = "马氏体"), // 淬火硬相 + Pearlite UMETA(DisplayName = "珠光体"), // 缓冷软相 + Bainite UMETA(DisplayName = "贝氏体"), // 中间相 + Cracked UMETA(DisplayName = "开裂") // 永久缺陷 +}; +``` + +### 4.3 顶点自定义属性层 + +```cpp +class ADynamicIronBlock : public ADynamicMeshActor +{ +private: + // ===== 几何与历史 ===== + TDynamicMeshVertexAttribute* InitialPositions; // 初始位置(不变,用于无漂移采样) + + // ===== 材料状态 ===== + TDynamicMeshVertexAttribute* AccumulatedStrain; // 累积塑性应变 + TDynamicMeshVertexAttribute* HardnessCoefficient; // 硬度系数(0-1) + TDynamicMeshVertexAttribute* Brittleness; // 脆性系数(0-1) + TDynamicMeshVertexAttribute* GrainSize; // 晶粒尺寸(0-1) + + // ===== 应力与疲劳 ===== + TDynamicMeshVertexAttribute* StressValue; // 标量应力(简化) + TDynamicMeshVertexAttribute* StressDirection; // 应力方向(可选) + TDynamicMeshVertexAttribute* FatigueValue; // 疲劳值(0-1) + TDynamicMeshVertexAttribute* CrackState; // 裂纹状态 + + // ===== 表面与外观 ===== + TDynamicMeshVertexAttribute* PolishAmount; // 打磨度(0=生锈,1=光亮) + TDynamicMeshVertexAttribute* RustSeed; // 铁锈噪声种子 + TDynamicMeshVertexAttribute* OxideThickness; // 氧化层厚度 + TDynamicMeshVertexAttribute* TemperColor; // 回火颜色 + TDynamicMeshVertexAttribute* OxidationLevel; // 氧化层度数 + + // ===== 相态(从体素采样) ===== + TDynamicMeshVertexAttribute* PhaseState; // 相态标记 + +public: + void InitializeVertexAttributes(); + void ReleaseVertexAttributes(); +}; +``` + +### 4.4 顶点颜色编码方案 + +顶点颜色仅 4 通道(RGBA),需精心分配。基础方案: + +| 通道 | 用途 | 范围 | 更新频率 | +|---|---|---|---| +| **R** | 温度可视化 | 0-1 | 每帧 | +| **G** | 打磨度(Polish) | 0-1 | 锤击时 | +| **B** | 噪声种子 / 初始位置 Z | 0-1 | 初始化 | +| **A** | 辅助标记(0=正常, 1=裂纹区, 2=淬火区临时) | 0-3 | 事件触发 | + +淬火过程期间临时占用通道做高辨识度反馈,过渡期恢复到基础方案(详见 [05-淬火退火相变系统设计.md](05-淬火退火相变系统设计.md))。 + +超出 4 通道的数据通过 UV1 通道或自定义顶点属性传递。 + +## 5. GPU-CPU 分工 + +| 模块 | GPU Compute Shader | CPU | +|---|---|---| +| 温度场 | 更新、传导、冷却 | — | +| 冷却速率 | 滑动平均计算 | — | +| 相态判定 | 体素级相变 | — | +| 热应力 | 计算(简化版) | — | +| 应力扩散 | 简化版 | 完整扩散、累积 | +| 形变 | (可选,GPU 化) | 默认实现、与 BVH 同步 | +| 硬度/脆性 | — | 公式应用 | +| 残余应力/塑性应力 | — | 计算 | +| 裂纹判定/扩展 | — | 全部 | +| 疲劳累积 | — | 全部 | +| 材质可视化 | — | 顶点颜色更新、材质参数 | + +### 5.1 异步 Dispatch 模式 + +```cpp +ENQUEUE_RENDER_COMMAND(FMetallurgyComputeDispatch)( + [this, DeltaTime](FRHICommandListImmediate& RHICmdList) + { + FMetallurgyComputeShader::Dispatch( + RHICmdList, + TemperatureBufferA, + TemperatureBufferB, + MetallurgyBuffer, + DeltaTime, + TemperatureResolution + ); + + bMetallurgyComputeComplete = true; + } +); +// CPU 继续其他工作,不等待 GPU +``` + +## 6. 性能与内存预算 + +### 6.1 帧时间预算(60 FPS = 16.67 ms) + +| 系统 | 预算 | 说明 | +|---|---|---| +| 渲染(UE5 基础) | 10 ms | 场景渲染、后处理 | +| 锤击形变计算 | 2-3 ms | 顶点位移、BVH 更新 | +| 网格质量优化 | 1-2 ms | 边翻转、平滑 | +| GPU 物理(温度+冶金) | 0.5-1 ms | Compute Shader(异步) | +| 顶点属性更新 | 0.5 ms | 硬化、应力、疲劳公式 | +| 材质可视化 | 0.5 ms | 顶点颜色更新 | +| **总锤击开销上限** | **≤ 7 ms** | 留足渲染预算 | + +### 6.2 内存预算 + +| 数据 | 大小 | 说明 | +|---|---|---| +| 网格顶点(20 万) | ~17 MB | 84 字节/顶点(含扩展属性) | +| 网格三角形(40 万) | 4.8 MB | 3×4 字节索引 | +| BVH 结构 | 5 MB | 加速结构 | +| 物理场体素(50³) | ~0.4 MB | 扩展后的体素结构 | +| GPU 缓冲区 | ~3 MB | Ping-Pong 缓冲 | +| **单铁块总计** | **~30 MB** | 可接受 | + +### 6.3 可扩展性 + +- **网格密度**: 20 万-100 万顶点可配置 +- **体素分辨率**: 30³-80³ 可配置 +- **子系统开关**: 各子系统可独立禁用 +- **LOD 支持**: 远距离降低网格密度与计算频率 + +## 7. 子系统映射 + +每个子系统专题设计文档对应到本架构的具体位置: + +| 专题设计 | 主要涉及层 | 主要涉及数据 | +|---|---|---| +| [01-刀刃形成-各向异性流动](01-刀刃形成-各向异性流动设计.md) | 顶点 | 顶点位置、InitialPositions | +| [02-表面磨损-顶点属性与无漂移采样](02-表面磨损-顶点属性与无漂移采样设计.md) | 顶点 + 材质 | PolishAmount、RustSeed、UV1、VertexColor | +| [03-网格质量-增量式优化](03-网格质量-增量式优化设计.md) | 顶点(拓扑) | 三角形/边、属性插值 | +| [04-物理模拟-加工硬化与晶粒演化](04-物理模拟-加工硬化与晶粒演化设计.md) | 体素 + 顶点 | 体素全部、HardnessCoefficient、GrainSize | +| [05-淬火退火相变系统](05-淬火退火相变系统设计.md) | 体素 + 顶点 + 材质 | CoolingRate、PhaseState、TemperColor、OxidationLevel | +| [06-应力累积系统](06-应力累积系统设计.md) | 体素 + 顶点 | StressValue、CrackState、应力方向 | +| [07-疲劳与耐久度系统](07-疲劳与耐久度系统设计.md) | 顶点(纯 CPU) | FatigueValue、CrackState、耐久度聚合 | + +## 8. 跨子系统共用决策 + +这些决策被多个子系统共用,统一约定,避免分散定义。 + +### 8.1 顶点 ID 持久化与属性插值 + +网格重网格化(Remesher)/细分/合并会改变顶点 ID。属性必须随顶点保留,否则会出现"颜色错乱""硬化丢失"。 + +约定: +- **新建顶点**: 在 Remesher 回调 `OnVertexSplit` 中,基于 split alpha 对属性做线性插值 +- **最近邻回退**: 回调不可用时,基于位置最近邻查找旧属性(精度损失,仅作降级) +- **不能丢失的关键属性**: InitialPositions、PhaseState、CrackState、AccumulatedStrain + +### 8.2 体素 Ping-Pong 双缓冲 + +温度场、冶金场更新采用 Ping-Pong,避免读写冲突。 + +``` +Buffer A (读) → Compute Shader → Buffer B (写) + 下一帧对调 +``` + +### 8.3 体素-顶点采样约定 + +- **体素 → 顶点**: 三线性插值,顶点位置除以 VoxelSize 得到体素坐标 +- **顶点 → 体素**: 加权累加,顶点的应变率按距离权重回写到周围 8 个体素 + +### 8.4 RDG(Render Dependency Graph) + +所有 GPU 计算走 RDG,自动管理资源生命周期与并行调度。 + +### 8.5 增量式局部处理 + +锤击只影响局部,所有后续处理(网格优化、应力扩散、疲劳累积)都只处理影响半径内的顶点。这是性能可控的关键。 + +## 9. 调试与可视化基础设施 + +各子系统共享一套调试工具,统一在 `ADynamicIronBlock` 上以 `Debug*` 命名: + +| 工具 | 用途 | +|---|---| +| `DebugDrawVoxelData` | 体素可视化:温度、冷却速率、相态 | +| `DebugDrawFlowDirections` | 材料流动方向箭头(刀刃形成) | +| `DebugDrawEdgeVertices` | 边缘顶点高亮 | +| `DebugDrawDegenerateTriangles` | 退化三角形红色标记 | +| `DebugDrawQualityHeatmap` | 网格质量热图 | +| `DebugDrawPolishHeatmap` | 打磨度热图 | +| `DebugDrawStressHeatmap` | 应力热图(蓝→红) | +| `DebugDrawFatigueHeatmap` | 疲劳热图 | +| `DebugPrintVertexAttributes` | 顶点属性统计输出(Min/Max/Avg) | +| `LogMeshQualityStats` | 网格质量统计日志 | + +材质侧统一加 `DebugMode` 参数: +- 0 = 正常 +- 1 = 打磨度 +- 2 = 铁锈图案 +- 3 = 初始位置 +- 4 = 应力 +- 5 = 疲劳 +- 6 = 相态 + +## 10. 已知简化假设(技术债务) + +当前架构基于以下简化,是有意识的取舍,非缺陷: + +1. **应力张量简化为标量**: 真实是 3×3 张量,当前仅用单值。StressDirection 是可选的补丁 +2. **晶粒模型极度简化**: 真实晶粒有复杂 3D 形状与取向,当前用标量 GrainSize +3. **相变模型经验化**: 马氏体转变实际需要 CCT 曲线,当前用冷却速率阈值近似 +4. **无热-力-电-磁耦合**: 忽略形变生热、磁性、电阻率等二次效应 +5. **各向同性假设**: 真实钢有晶粒取向,当前材料各向同性 + +适用场景:**游戏娱乐级**,足够真实感但非科研级精度。 + +## 11. 未来扩展接口 + +以下扩展不需要改动核心架构: + +- **多材料支持**: 新增 `MaterialID` 顶点属性,材质侧按 ID 查材料参数表 +- **焊接系统**: 多个 `ADynamicIronBlock` 通过焊接约束连接,共享体素边界 +- **不同锤头形状**: 在 `OnHammerImpact` 增加 `HammerShape` 参数,影响 ImpactRadius 与形变方向 +- **VR 支持**: 锤击输入改为 VR 控制器,核心数据流不变 + +## 12. 参考资料 + +### 12.1 技术参考 + +- Unreal Engine 5.6 Geometry Scripting 文档 +- *Real-Time Collision Detection* by Christer Ericson(网格优化) +- *GPU Gems 3: Chapter 39* — Parallel Prefix Sum(GPU 算法) +- *Siggraph 2020: Dynamic Mesh Simplification*(网格优化) + +### 12.2 索引 + +- 总体需求: [requirements/00-锻造系统总体需求.md](../requirements/00-锻造系统总体需求.md) +- 专题设计: [01~07](./) +- 实施记录: [impl/](../impl/) +- 原始设计文档(归档): [_archive/plans/](../_archive/plans/) diff --git a/docs/requirements/00-锻造系统总体需求.md b/docs/requirements/00-锻造系统总体需求.md new file mode 100644 index 0000000..39cf9e8 --- /dev/null +++ b/docs/requirements/00-锻造系统总体需求.md @@ -0,0 +1,218 @@ +# 锻造系统总体需求 + +**项目**: BladeSmith +**文档类型**: 需求文档(总体) +**版本**: 2.0 +**最后更新**: 2026-08-11 +**状态**: 整合自原 `2026-01-22-高真实度锻造系统设计.md` 与 `2026-01-23-淬火退火相变与应力疲劳系统总览.md` + +> 本文档从玩家与游戏体验视角描述锻造系统要"做成什么样",不涉及算法、代码、shader 等技术实现细节。技术实现见 [design/00-锻造系统总体技术架构.md](../design/00-锻造系统总体技术架构.md)。 + +--- + +## 1. 项目定位 + +BladeSmith 是一款基于 Unreal Engine 5.6 的真实打铁模拟游戏。玩家在游戏中体验锻造刀具的完整流程,刀具的成型过程通过物理计算还原真实锻造效果——**每一把刀具的造型、纹路、性能都是独特的**。 + +锻造系统是玩法的核心,负责把"玩家敲锤子"这个动作转化为: +- 看得见的金属形变与表面变化 +- 影响后续表现的内部材料状态(硬度、应力、相态、疲劳等) +- 最终决定刀具强度、韧性、耐久度的物理属性 + +## 2. 核心体验目标 + +| 目标 | 含义 | 验收信号 | +|---|---|---| +| **游戏娱乐级真实感** | 物理模型简化但保留核心机制,玩家直觉上"像真打铁" | 玩家测试中能凭常识判断结果 | +| **每一刀都独特** | 锻造路径决定刀具数据,同样的初始材料能产出截然不同的成品 | 同批次的两次锻造产出差异显著 | +| **可读的反馈** | 玩家在任何时刻都能"看懂"金属当前状态,做下一步决策 | 不依赖外部文档即可理解表层状态 | +| **稳定 60 FPS** | 锤击操作期间帧率不掉,操作延迟不可察觉 | 详见 §5 性能与质量目标 | +| **渐进式可实现** | 系统可分阶段交付,每阶段独立可玩 | 详见 §6 实施阶段 | + +## 3. 玩家可见的核心物理过程 + +整个锻造系统要让玩家**直观感知**以下 7 类冶金学物理现象。这些现象构成 7 个专题需求文档的主题。 + +### 3.1 锤击形变与刀刃形成 + +玩家用锤子敲击锻材时: +- 受击处材料被压紧、向四周流动 +- 材料优先沿"最小阻力方向"流动,而非均匀扩散 +- 在边缘附近锻打时,材料沿边缘延展,逐渐形成平整锐利的刀刃 +- 连续锻打能逐步把铁块变形成目标形状 + +详见 [01-锤击形变与刀刃形成需求.md](01-锤击形变与刀刃形成需求.md)。 + +### 3.2 表面磨损与外观 + +锻材的表面状态会随锻造过程演变: +- 新铁块表面是生锈/氧化层(橙红色、粗糙) +- 锤击区域铁锈脱落,露出光亮金属本体 +- 表面特征(铁锈图案、纹路)**必须随形变一起移动**,不能"漂移"或"贴在屏幕上" +- 支持铁锈、氧化层、酸蚀痕迹、划痕等多种表面状态 + +详见 [02-表面磨损与外观需求.md](02-表面磨损与外观需求.md)。 + +### 3.3 网格质量(隐形但关键) + +玩家不应感知到网格退化,因此: +- 连续锻打 50+ 次后,刀刃仍然平整,无明显锯齿 +- 表面着色无条纹、无闪烁、无"空洞" +- 锻打不会让金属"莫名其妙"地出现奇怪形状 + +详见 [03-网格质量与性能需求.md](03-网格质量与性能需求.md)。 + +### 3.4 加工硬化与晶粒演化 + +反复锻打会让金属变硬: +- 同一块金属连续锻打会越来越难变形(需要更用力或更多锤) +- 加热到一定温度后金属软化,可继续加工(回火机制) +- 微观上,晶粒尺寸、形状、取向影响材料特性与视觉花纹 +- 大马士革钢的层状花纹是可见的视觉表达 + +详见 [04-加工硬化与晶粒演化需求.md](04-加工硬化与晶粒演化需求.md)。 + +### 3.5 淬火退火相变 + +热处理是决定刀具最终性能的关键步骤: +- 把高温金属快速冷却(水/油)会显著提升硬度,但同时增加脆性 +- **温度区间**决定淬火效果:黄金区间(900-1100°C)最佳,过低无效,过高有开裂风险 +- **冷却速率**决定结果:水淬硬而脆、油淬适中、空冷近似退火 +- 缓慢冷却(退火)反而让金属变软但韧性提高 +- 视觉上要有清晰的三阶段反馈(详见专题) + +详见 [05-淬火退火相变需求.md](05-淬火退火相变需求.md)。 + +### 3.6 应力累积与开裂 + +不均匀的形变和热处理会在金属内部累积应力: +- 高应力区域更难锻打(需要更用力) +- 应力梯度会让刀身在锻打中自然弯曲或扭曲 +- 应力超过材料强度时会产生裂纹 +- 裂纹会沿应力梯度扩展,最终导致刀具断裂 +- 玩家可通过"应力扫描"辅助功能主动查看应力分布 + +详见 [06-应力累积与开裂需求.md](06-应力累积与开裂需求.md)。 + +### 3.7 疲劳累积与刀具耐久度 + +长期使用让刀具性能衰减: +- 反复锻打累积疲劳,过锻或高应力区加速疲劳 +- 疲劳到达阈值后产生疲劳裂纹 +- 刀具的耐久度由平均疲劳、裂纹数量、最大应力共同决定 +- 使用刀具(切割、砍击)进一步累积损伤 +- 回火可部分恢复疲劳,但裂纹无法愈合 +- 耐久度归零或主裂纹出现时,刀具失效(断裂) + +详见 [07-疲劳与刀具耐久度需求.md](07-疲劳与刀具耐久度需求.md)。 + +## 4. 玩家可执行的核心操作 + +这些操作来自游戏顶层玩法设计,锻造系统必须对其做出物理响应。 + +| 操作 | 锻造系统需要响应的行为 | +|---|---| +| **加热** | 提升温度,增加塑性,软化已硬化的金属,触发回火/相变重置 | +| **捶打** | 形变、表面去锈、累积应变/硬化/应力/疲劳、维护网格质量 | +| **切割**(电锯) | 快速改变锻材形状(独立子系统) | +| **打磨** | 改变表面粗糙度、微调形状、修复表面损伤 | +| **淬火** | 快速冷却触发马氏体相变,提升硬度/脆性,留下氧化层 | +| **强度测试** | 提供场地与道具,验证刀具性能(独立玩法场景) | + +## 5. 性能与质量目标 + +### 5.1 帧率与延迟 + +| 指标 | 目标 | +|---|---| +| 锤击操作期间帧率 | 稳定 60 FPS | +| 单次锤击响应时间 | < 10 ms(玩家不可察觉) | +| 锤击形变计算预算 | 2-3 ms | +| 网格质量优化预算 | 1-2 ms | +| GPU 物理计算预算 | 0.5-1 ms(异步) | +| 顶点属性/材质更新预算 | 0.5-1 ms | +| **总锤击开销上限** | **≤ 7 ms** | + +### 5.2 规模 + +| 维度 | 目标 | +|---|---| +| 单铁块网格顶点数 | 20-50 万(基础),刀刃区域可局部加密到 100 万/cm² | +| 体素分辨率 | 50×50×50(典型),可配置 30³-80³ | +| 单铁块内存 | ~30 MB | +| 连续锻打次数 | 连续 50-100 次锤击后网格质量仍良好 | + +### 5.3 质量验收原则 + +- **网格质量**: 连续锻打 50 次后无明显细长三角形(长宽比 > 10:1),无明显锯齿 +- **表面稳定性**: 形变后表面纹理(铁锈图案)不漂移 +- **可调性**: 所有可调参数可在编辑器实时调节 +- **可调试性**: 提供体素场可视化、应力热图、属性统计等调试工具 + +## 6. 设计原则 + +| 原则 | 含义 | +|---|---| +| **游戏娱乐级精度** | 简化物理模型,保留核心机制与真实感,不做科研级精度 | +| **YAGNI** | 避免过度设计,专注核心功能,不为假想需求预留 | +| **渐进式实现** | 分阶段交付,每阶段可独立运行与验收 | +| **架构扩展性** | 为未来功能(多材料、焊接、VR 等)预留接口,但不提前实现 | +| **过程高辨识,结果真物理** | 热处理等关键时刻给玩家强反馈,平时展示真实物理表现 | +| **辅助功能可选** | 应力扫描、疲劳扫描等"作弊视图"按需启用,不污染真实视觉 | + +## 7. 验收路径(实施阶段) + +按以下阶段交付,每阶段独立验收。详细任务排期见各专题需求文档。 + +| 阶段 | 范围 | 主要验收 | +|---|---|---| +| **阶段 1** | 锤击形变(各向异性) + 表面磨损 + 基础网格平滑 | 锻造边缘材料沿边缘流动;表面铁锈脱落;形变无漂移 | +| **阶段 2** | 完整网格质量系统(边翻转/平滑/重网格) | 连续锻打 50 次网格仍均匀,无细长三角形 | +| **阶段 3** | 物理模拟扩展(加工硬化/淬火/退火) | 连续锻打变硬;加热软化;淬火硬度显著提升 | +| **阶段 4** | 晶粒与视觉(晶粒演化/大马士革/应力可视化/开裂) | 高应变区可视化;支持大马士革花纹;应力过大出现裂纹 | +| **阶段 5** | 疲劳与耐久度 | 反复锻打累积疲劳;耐久度下降;刀具最终可失效 | +| **阶段 6** | 优化与打磨 | Unreal Insights 验证 60 FPS;所有参数蓝图可调;文档齐全 | + +## 8. 风险(玩家可感知的失败模式) + +这些是锻造系统做错时玩家会直接感受到的问题,设计阶段需重点规避: + +| 风险 | 玩家感受 | 严重度 | +|---|---|---| +| 物理模型过于简化 | "假"、"不像打铁" | 中 | +| 系统过度复杂,周期失控 | 长期无新版可玩 | 高 | +| 顶点属性在网格重建时丢失 | 锻打中途表面颜色/状态错乱 | 高 | +| 大马士革花纹实现困难 | 阶段 4 可选功能,可降级或推迟 | 中 | +| 网格重建开销过大 | 锤击延迟突增、掉帧 | 高 | +| 参数难调 | 不同硬件表现差异大 | 中 | + +## 9. 未来扩展方向(超出当前需求范围) + +以下方向**不在**当前需求内,但系统设计不应阻止未来加入: + +- 多材料支持(铜、青铜、钛合金) +- 焊接系统(多块金属连接与材料混合) +- 锻造工具多样性(平锤、圆锤、凿子等不同锤头形状) +- 多人协作锻造(网络同步动态网格) +- VR 支持(空间交互与力反馈) + +## 10. 参考资料 + +### 10.1 物理基础 + +- 《金属塑性成形原理》(清华大学出版社) +- 《材料科学基础》(上海交通大学出版社) +- 《金属热处理原理与工艺》(机械工业出版社) +- *Metals Handbook: Forging and Forming / Heat Treating* (ASM International) + +### 10.2 游戏案例 + +- *My Summer Car* — 机械装配真实度 +- *BeamNG.drive* — 动态网格形变 +- *Dwarf Fortress* — 材料属性系统 + +### 10.3 索引 + +- 技术实现总览: [design/00-锻造系统总体技术架构.md](../design/00-锻造系统总体技术架构.md) +- 专题需求: [01~07](./) +- 原始设计文档(归档): [_archive/plans/](../_archive/plans/)