Files
BladeSmith/docs/_archive/plans/2026-01-23-淬火退火相变系统设计.md
T
starmen1265 56cb314799 docs: 归档原 plans 目录,迁移实施清单到 impl/
原 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>
2026-08-11 08:57:46 +08:00

10 KiB
Raw Blame History

淬火退火相变系统设计

项目: 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 状态: 设计完成,待评审