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>
10 KiB
10 KiB
淬火退火相变系统设计
项目: BladeSmith 日期: 2026-01-23 目标: 实现基于温度和冷却速率的真实热处理效果 设计原则: 游戏体验优先,三阶段可视化
1. 核心机制
1.1 温度区间判定
三个关键温度阈值:
| 阈值名称 | 温度范围 | 效果 |
|---|---|---|
| 临界下限 | < 800°C | 淬火无效,硬度无提升 |
| 黄金区间 | 900-1100°C | 最佳淬火,硬度最大提升 |
| 临界上限 | > 1200°C | 材料开裂风险,硬度提升低 |
温度区间修正系数(TemperatureFactor):
TemperatureFactor =
3.0 (900°C ≤ T ≤ 1100°C, 黄金区间)
1.8 (800°C ≤ T < 900°C 或 1100°C < T ≤ 1200°C, 次优区间)
0.5 (T < 800°C, 温度过低)
0.2 (T > 1200°C, 温度过高且可能开裂)
1.2 冷却速率计算
基础公式:
CoolingRate = |T_current - T_previous| / Δt
T_current: 当前帧体素温度T_previous: Δt时间前的体素温度Δt: 采样时间窗口(推荐0.5-1.0秒)
滑动平均平滑:
CoolingRate_smoothed = Σ(CoolingRate_i) / N (i=1 to N, N=10)
使用过去10帧的平均值,消除瞬时波动。
2. 硬度映射系统
2.1 硬度倍数公式
基于冷却速率的Sigmoid函数:
HardnessMultiplier = BaseMultiplier × Sigmoid(CoolingRate)
其中:
Sigmoid(CoolingRate) = 1 + 2 / (1 + exp(-k × (CoolingRate - Threshold)))
参数说明:
BaseMultiplier = 1.0: 基准倍数Threshold = 35°C/s: 中点冷却速率k = 0.1: 曲线陡峭度(可调节)
冷却速率分类:
- 快速冷却(>50°C/s): 水淬,硬度最高
- 中速冷却(20-50°C/s): 油淬,硬度适中
- 慢速冷却(<20°C/s): 空冷,硬度低(退火)
2.2 最终硬度计算
综合硬度公式:
FinalHardness = InitialHardness × HardnessMultiplier × TemperatureFactor
硬度系数对形变的影响:
HardnessFactor = 1.0 + (Hardness / MaxHardness) × 2.0
硬度越高,形变阻力越大(最大3倍阻力)。
3. 脆性计算系统
3.1 脆性系数公式
基础脆性公式:
Brittleness = BaseBrittleness + BrittlenessIncrease × CoolingRate_normalized
参数说明:
BaseBrittleness = 0.1: 基准脆性(未经淬火的钢)BrittlenessIncrease = 0.6: 最大脆性增加量CoolingRate_normalized: 归一化冷却速率CoolingRate_normalized = clamp(CoolingRate / 80°C/s, 0, 1)
脆性对开裂的影响: 脆性系数与开裂概率直接相关,详见应力系统文档。
3.2 脆性可视化阈值
| 脆性范围 | 颜色 | 含义 |
|---|---|---|
| < 0.3 | 绿色 | 韧性良好 |
| 0.3 - 0.6 | 黄色 | 中度脆性 |
| ≥ 0.6 | 红色 | 高度脆性 |
4. 内部应力公式
4.1 应力分量
热应力分量(温度梯度):
StressThermal = ThermalStressCoeff × CoolingRate × (T_current - 20°C)
ThermalStressCoeff = 0.005: 热应力系数(可调)T_current: 当前温度(°C)- 20°C: 环境温度
相变应力分量(马氏体体积膨胀):
StressPhase = PhaseStressCoeff × MartensiteFraction
PhaseStressCoeff = 50.0: 相变应力系数MartensiteFraction: 马氏体转化比例MartensiteFraction = clamp(CoolingRate / 80°C/s, 0, 1)
总应力:
InternalStress = StressThermal + StressPhase
4.2 应力松弛机制
温度驱动的松弛公式:
RelaxationFactor =
0.99 (T < 100°C, 常温慢松弛)
0.90 (200°C ≤ T < 400°C, 回火快松弛)
0.85 (T ≥ 400°C, 快速松弛)
每帧更新:
InternalStress = InternalStress × RelaxationFactor
5. 相态系统
5.1 相态枚举
每个体素维护相态标记:
enum class EPhaseState : uint8
{
Austenite = 0, // 奥氏体(软)
Martensite = 1, // 马氏体(硬)
Pearlite = 2, // 珠光体(中)
Cracked = 3 // 开裂(永久缺陷)
};
5.2 相变判定规则
奥氏体→马氏体(淬火):
if (Temperature > 800°C && CoolingRate > 20°C/s)
{
PhaseState = EPhaseState::Martensite;
// 硬度和脆性提升
}
奥氏体→珠光体(退火):
if (Temperature > 800°C && CoolingRate < 20°C/s)
{
PhaseState = EPhaseState::Pearlite;
// 硬度适中,脆性低
}
重置相态:
if (Temperature > 800°C && TimeAbove800C > 5.0s)
{
PhaseState = EPhaseState::Austenite;
// 材料回到软态,可重新淬火
}
6. 三阶段可视化设计
6.1 阶段1:淬火过程(临时高辨识度)
目的: 给玩家实时反馈,知道淬火是否成功、哪些区域被覆盖
顶点颜色强制覆盖:
// R通道:温度的互补色
R = 1.0 - Temperature / MaxTemperature
// G通道:冷却速率(快=绿色,慢=红色)
G = clamp(1.0 - CoolingRate / 80°C/s, 0, 1)
// B通道:硬度倍数(暗色=软,亮色=硬)
B = (Hardness - MinHardness) / (MaxHardness - MinHardness)
// A通道:脆性(透明=韧性,不透明=脆)
A = Brittleness
材质临时参数:
- 自发光:启用,随温度变化
- 金属度:暂时设为1.0(全金属感)
- 粗糙度:暂时设为0.0(镜面反光)
UI辅助:
- 屏幕边缘显示"淬火进行中"
- 顶点统计:"淬火覆盖率:XX%"
- 品质评分实时显示
6.2 阶段2:冷却过渡(逐步恢复正常)
目的: 从游戏化反馈平滑过渡到真实物理表现
颜色过渡(0.5-1.0秒):
// 插值因子
Alpha = (CurrentTime - QuenchStartTime) / TransitionDuration
// R通道:温度回归到常温
R = Lerp(TemporaryR, 0.0, Alpha)
// G通道:恢复到打磨度
G = Lerp(TemporaryG, PolishAmount, Alpha)
// B通道:恢复到噪声种子
B = Lerp(TemporaryB, NoiseSeed, Alpha)
// A通道:保留相态标记
A = PhaseState // 0=奥氏体, 1=马氏体, 2=珠光体, 3=开裂
材质过渡:
// 自发光:指数衰减至0
Emissive = TemporaryEmissive × exp(-Alpha × 5.0)
// 金属度/粗糙度:恢复到打磨度驱动
Metallic = 0.5 + PolishAmount × 0.5
Roughness = 0.6 - PolishAmount × 0.4
6.3 阶段3:最终真实表现(永久保留)
目的: 展示真实的物理热处理效果
回火色系统:
回火色映射(新增TemperColor顶点属性):
| 回火温度 | 颜色 | RGB值 |
|---|---|---|
| 20-150°C(无回火) | 银灰色 | (0.8, 0.8, 0.8) |
| 150-200°C | 淡黄色 | (0.95, 0.9, 0.7) |
| 200-250°C | 金黄/麦秆色 | (0.95, 0.8, 0.4) |
| 250-300°C | 棕色 | (0.7, 0.5, 0.3) |
| 300-350°C | 紫色 | (0.6, 0.4, 0.7) |
| 350-400°C | 蓝色 | (0.4, 0.5, 0.8) |
| >400°C | 灰色 | (0.6, 0.6, 0.6) |
实现方式: 根据最后回火温度设置顶点TemperColor属性。
氧化层表现:
新增OxidationLevel顶点属性(0-1):
| 冷却介质 | OxidationLevel | 视觉效果 |
|---|---|---|
| 水淬 | 0.8-1.0 | 深色氧化层 |
| 油淬 | 0.4-0.6 | 浅棕色氧化层 |
| 空冷 | 0.1-0.3 | 轻微氧化 |
最终材质组合:
BaseColor = OxidationColor × (1 - PolishAmount) + TemperColor × PolishAmount
其中:
OxidationColor: 基于OxidationLevel的深灰色TemperColor: 基于TemperColor的回火色PolishAmount: 打磨度(打磨后露出金属底色)
相态的微妙影响: 虽然马氏体组织肉眼不可见,但通过细微色调表现:
- 马氏体区域: 略微更冷色调(蓝灰倾向)
- 珠光体区域: 略微更暖色调(棕灰倾向)
- 奥氏体区域: 中性灰调
7. 实现架构
7.1 GPU-CPU分工
GPU Compute Shader职责:
- 体素层面热力学计算
- 温度场更新
- 冷却速率计算(滑动平均)
- 相态判定
- 热应力计算
CPU职责:
- 顶点属性更新
- 硬度/脆性公式应用
- 相态采样到顶点
- 三阶段可视化逻辑
- 材质参数更新
7.2 数据流
温度更新(GPU)
↓
冷却速率计算(GPU)
↓
相态判定(GPU)
↓
硬度/脆性公式(CPU)
↓
顶点属性更新(CPU)
↓
材质可视化(CPU)
7.3 性能优化
冷却速率计算:
- 使用Ping-Pong双缓冲避免冲突
- 滑动平均使用历史缓冲,减少计算量
相态判定:
- 只在温度变化时重新计算
- 使用标志位避免重复判定
可视化:
- 临时效果使用简单着色器
- 最终效果复用现有材质系统
8. 参数配置
8.1 可调参数(蓝图可配)
| 参数名 | 默认值 | 范围 | 说明 |
|---|---|---|---|
CriticalTempLow |
800.0°C | 600-900 | 临界下限 |
CriticalTempHigh |
1200.0°C | 1100-1400 | 临界上限 |
GoldTempMin |
900.0°C | 800-1000 | 黄金区间下限 |
GoldTempMax |
1100.0°C | 1000-1200 | 黄金区间上限 |
CoolingRateThreshold |
35.0°C/s | 20-50 | Sigmoid中点 |
SigmoidK |
0.1 | 0.05-0.2 | 曲线陡峭度 |
ThermalStressCoeff |
0.005 | 0.001-0.01 | 热应力系数 |
PhaseStressCoeff |
50.0 | 20-100 | 相变应力系数 |
RelaxationTimeNormal |
60.0s | 30-120 | 常温松弛时间 |
RelaxationTimeTemper |
10.0s | 5-20 | 回火松弛时间 |
8.2 调试工具
- 体素可视化:显示温度、冷却速率、相态
- 顶点属性检查:硬度、脆性、应力值
- 时间线:记录淬火-回火过程
- 统计面板:覆盖率、平均硬度、最大脆性
9. 实施计划
9.1 第一阶段:核心公式(1天)
- 冷却速率计算
- 硬度/脆性公式
- 相态判定逻辑
- 单元测试
9.2 第二阶段:顶点属性(1天)
- 顶点属性扩展
- 公式应用到顶点
- 材质参数更新
- 基础可视化
9.3 第三阶段:三阶段可视化(1-2天)
- 淬火过程临时效果
- 冷却过渡动画
- 回火色系统
- 氧化层表现
- UI辅助工具
9.4 第四阶段:集成测试(0.5天)
- 完整流程测试
- 性能Profiling
- 参数调优
- 文档更新
文档版本: 1.0 最后更新: 2026-01-23 状态: 设计完成,待评审