Files
BladeSmith/docs/design/05-淬火退火相变系统设计.md
starmen1265 fbb2baa854 docs: 添加物理模拟与淬火系统技术设计
design/04 仅保留加工硬化与晶粒演化,应力/淬火部分引用 design/05、design/06。design/05 涵盖温度区间、冷却速率、Sigmoid 硬度映射、相态系统、三阶段可视化(过程高辨识→冷却过渡→真实回火色)。

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-11 08:58:38 +08:00

11 KiB
Raw Permalink Blame History

淬火退火相变系统设计

项目: BladeSmith 文档类型: 技术设计(专题) 版本: 2.0 最后更新: 2026-08-11 状态: 整合自原 2026-01-23-淬火退火相变系统设计.md

本文档描述淬火退火相变系统的技术实现。需求见 [../requirements/05-淬火退火相变需求.md]。总体架构见 00-锻造系统总体技术架构.md。


1. 技术背景

淬火退火相变系统模拟热处理过程中的相变行为,基于温度和冷却速率计算材料状态变化。系统通过温度区间判定、冷却速率计算、相态判定、硬度/脆性计算以及三阶段可视化,实现真实的热处理效果模拟。


2. 温度区间判定

2.1 温度阈值定义

三个关键温度阈值:

阈值名称 温度范围 效果
临界下限 < 800°C 淬火无效,硬度无提升
黄金区间 900-1100°C 最佳淬火,硬度最大提升
临界上限 > 1200°C 材料开裂风险,硬度提升低

2.2 温度区间修正系数

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, 温度过高且可能开裂)

3. 冷却速率计算

3.1 基础冷却速率公式

CoolingRate = |T_current - T_previous| / Δt

参数说明:

  • T_current: 当前帧体素温度
  • T_previous: Δt时间前的体素温度
  • Δt: 采样时间窗口(推荐0.5-1.0秒)

3.2 滑动平均平滑

平滑公式:

CoolingRate_smoothed = Σ(CoolingRate_i) / N  (i=1 to N, N=10)

使用过去10帧的平均值,消除瞬时波动。


4. 硬度映射系统

4.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: 曲线陡峭度(可调节)

4.2 冷却速率分类

冷却速率 范围 淬火方式 硬度表现
快速冷却 > 50°C/s 水淬 硬度最高
中速冷却 20-50°C/s 油淬 硬度适中
慢速冷却 < 20°C/s 空冷 硬度低(退火)

4.3 最终硬度计算

综合硬度公式:

FinalHardness = InitialHardness × HardnessMultiplier × TemperatureFactor

4.4 硬度对形变的影响

形变阻力公式:

HardnessFactor = 1.0 + (Hardness / MaxHardness) × 2.0

硬度越高,形变阻力越大(最大3倍阻力)。


5. 脆性计算系统

5.1 脆性系数公式

基础脆性公式:

Brittleness = BaseBrittleness + BrittlenessIncrease × CoolingRate_normalized

参数说明:

  • BaseBrittleness = 0.1: 基准脆性(未经淬火的钢)
  • BrittlenessIncrease = 0.6: 最大脆性增加量
  • CoolingRate_normalized: 归一化冷却速率

归一化公式:

CoolingRate_normalized = clamp(CoolingRate / 80°C/s, 0, 1)

5.2 脆性对开裂的影响

脆性系数与开裂概率直接相关,详见应力系统文档。

5.3 脆性可视化阈值

脆性范围 颜色 含义
< 0.3 绿色 韧性良好
0.3 - 0.6 黄色 中度脆性
≥ 0.6 红色 高度脆性

6. 内部应力公式

6.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)

6.2 总应力

综合应力公式:

InternalStress = StressThermal + StressPhase

6.3 应力松弛机制

温度驱动的松弛公式:

RelaxationFactor =
  0.99 (T < 100°C, 常温慢松弛)
  0.90 (200°C ≤ T < 400°C, 回火快松弛)
  0.85 (T ≥ 400°C, 快速松弛)

每帧更新:

InternalStress = InternalStress × RelaxationFactor

7. 相态系统

7.1 相态枚举

EPhaseState 定义:

UENUM(BlueprintType)
enum class EPhaseState : uint8
{
    Austenite = 0,  // 奥氏体(软)
    Martensite = 1, // 马氏体(硬)
    Pearlite = 2,   // 珠光体(中)
    Cracked = 3     // 开裂(永久缺陷)
};

7.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;
    // 材料回到软态,可重新淬火
}

8. 三阶段可视化设计

8.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(镜面反光)

8.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

8.3 阶段3:最终真实表现(永久保留)

8.3.1 回火色系统

回火色映射表:

回火温度 颜色 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属性。

8.3.2 氧化层表现

OxidationLevel 属性定义(0-1):

冷却介质 OxidationLevel 视觉效果
水淬 0.8-1.0 深色氧化层
油淬 0.4-0.6 浅棕色氧化层
空冷 0.1-0.3 轻微氧化

8.3.3 最终材质组合

基础颜色公式:

BaseColor = OxidationColor × (1 - PolishAmount) + TemperColor × PolishAmount

参数说明:

  • OxidationColor: 基于OxidationLevel的深灰色
  • TemperColor: 基于TemperColor的回火色
  • PolishAmount: 打磨度(打磨后露出金属底色)

8.3.4 相态的微妙影响

虽然马氏体组织肉眼不可见,但通过细微色调表现:

  • 马氏体区域: 略微更冷色调(蓝灰倾向)
  • 珠光体区域: 略微更暖色调(棕灰倾向)
  • 奥氏体区域: 中性灰调

9. 实现架构

9.1 GPU-CPU分工

GPU Compute Shader职责:

  • 体素层面热力学计算
  • 温度场更新
  • 冷却速率计算(滑动平均)
  • 相态判定
  • 热应力计算

CPU职责:

  • 顶点属性更新
  • 硬度/脆性公式应用
  • 相态采样到顶点
  • 三阶段可视化逻辑
  • 材质参数更新

9.2 数据流

温度更新(GPU)
  ↓
冷却速率计算(GPU)
  ↓
相态判定(GPU)
  ↓
硬度/脆性公式(CPU)
  ↓
顶点属性更新(CPU)
  ↓
材质可视化(CPU)

9.3 性能优化

冷却速率计算:

  • 使用Ping-Pong双缓冲避免冲突
  • 滑动平均使用历史缓冲,减少计算量

相态判定:

  • 只在温度变化时重新计算
  • 使用标志位避免重复判定

可视化:

  • 临时效果使用简单着色器
  • 最终效果复用现有材质系统

10. 参数配置

10.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 回火松弛时间

10.2 调试工具

  • 体素可视化:显示温度、冷却速率、相态
  • 顶点属性检查:硬度、脆性、应力值
  • 时间线:记录淬火-回火过程
  • 统计面板:覆盖率、平均硬度、最大脆性

11. 实施计划

11.1 第一阶段:核心公式(1天)

  • 冷却速率计算
  • 硬度/脆性公式
  • 相态判定逻辑
  • 单元测试

11.2 第二阶段:顶点属性(1天)

  • 顶点属性扩展
  • 公式应用到顶点
  • 材质参数更新
  • 基础可视化

11.3 第三阶段:三阶段可视化(1-2天)

  • 淬火过程临时效果
  • 冷却过渡动画
  • 回火色系统
  • 氧化层表现
  • UI辅助工具

11.4 第四阶段:集成测试(0.5天)

  • 完整流程测试
  • 性能Profiling
  • 参数调优
  • 文档更新

12. 已知限制

  1. 相变模型经验化: 真实马氏体转变需要CCT曲线,当前用冷却速率阈值近似
  2. 各向同性假设: 真实钢有晶粒取向,当前材料各向同性
  3. 简化热力学: 忽略形变生热、磁性等二次效应

13. 引用