应力设计文档
This commit is contained in:
@@ -0,0 +1,530 @@
|
||||
# 应力累积系统设计
|
||||
|
||||
**项目**: BladeSmith
|
||||
**日期**: 2026-01-23
|
||||
**目标**: 模拟多来源应力累积与物理表现
|
||||
**设计原则**: 真实物理表现优先,辅助功能可选
|
||||
|
||||
---
|
||||
|
||||
## 1. 应力来源分类
|
||||
|
||||
### 1.1 塑性形变应力
|
||||
|
||||
**来源**: 锤击导致材料永久形变
|
||||
|
||||
**计算公式**:
|
||||
```
|
||||
Stress_plastic = k_plastic × StrainIncrement × Hardness
|
||||
```
|
||||
|
||||
**参数说明**:
|
||||
- `k_plastic = 10.0`: 塑性应力系数(可调)
|
||||
- `StrainIncrement`: 本次锤击的应变增量
|
||||
- `Hardness`: 当前硬度系数
|
||||
|
||||
**应用范围**: 锤击影响区域内的所有顶点
|
||||
|
||||
### 1.2 热应力
|
||||
|
||||
**来源**: 温度梯度导致内部膨胀不均匀
|
||||
|
||||
**计算公式**:
|
||||
```
|
||||
Stress_thermal = ThermalStressCoeff × CoolingRate × (T_current - 20°C)
|
||||
```
|
||||
|
||||
**参数说明**:
|
||||
- `ThermalStressCoeff = 0.005`: 热应力系数(可调)
|
||||
- `CoolingRate`: 冷却速率(°C/s)
|
||||
- `T_current`: 当前温度(°C)
|
||||
- 20°C: 环境温度
|
||||
|
||||
**应用范围**: 所有体素和顶点
|
||||
|
||||
### 1.3 相变应力
|
||||
|
||||
**来源**: 马氏体转变导致体积膨胀
|
||||
|
||||
**计算公式**:
|
||||
```
|
||||
Stress_phase = PhaseStressCoeff × MartensiteFraction
|
||||
```
|
||||
|
||||
**参数说明**:
|
||||
- `PhaseStressCoeff = 50.0`: 相变应力系数(可调)
|
||||
- `MartensiteFraction`: 马氏体转化比例
|
||||
```
|
||||
MartensiteFraction = clamp(CoolingRate / 80°C/s, 0, 1)
|
||||
```
|
||||
|
||||
**应用范围**: 淬火区域的所有顶点
|
||||
|
||||
### 1.4 残余应力
|
||||
|
||||
**来源**: 锤击时周边材料限制形变
|
||||
|
||||
**计算公式**:
|
||||
```
|
||||
Stress_residual = k_residual × (TargetStrain - ActualStrain)
|
||||
```
|
||||
|
||||
**参数说明**:
|
||||
- `k_residual = 5.0`: 残余应力系数(可调)
|
||||
- `TargetStrain`: 目标应变(基于锤击强度)
|
||||
- `ActualStrain`: 实际应变(受限后)
|
||||
|
||||
**应用范围**: 锤击区域周边的顶点
|
||||
|
||||
---
|
||||
|
||||
## 2. 应力累积规则
|
||||
|
||||
### 2.1 总应力计算
|
||||
|
||||
**综合应力公式**:
|
||||
```
|
||||
TotalStress = Stress_plastic + Stress_thermal + Stress_phase + Stress_residual
|
||||
```
|
||||
|
||||
**顶点更新**:
|
||||
```
|
||||
InternalStress += TotalStress × DeltaTime
|
||||
```
|
||||
|
||||
**应力限制**:
|
||||
```
|
||||
InternalStress = clamp(InternalStress, 0.0, MaxStress)
|
||||
```
|
||||
|
||||
其中`MaxStress`为材料极限应力,可配置。
|
||||
|
||||
### 2.2 应力扩散机制
|
||||
|
||||
**目的**: 应力向周围顶点扩散,模拟真实物理行为
|
||||
|
||||
**拉普拉斯平滑**:
|
||||
```
|
||||
Stress_diffused = Stress_original + α × (AverageNeighborStress - Stress_original)
|
||||
```
|
||||
|
||||
**参数说明**:
|
||||
- `α`: 扩散系数(0.1-0.3,可调)
|
||||
- `AverageNeighborStress`: 相邻顶点的平均应力
|
||||
|
||||
**实现方式**:
|
||||
每帧对每个顶点执行扩散,迭代1-2次。
|
||||
|
||||
### 2.3 应力松弛机制
|
||||
|
||||
**温度驱动的松弛**:
|
||||
|
||||
**松弛因子**:
|
||||
```
|
||||
RelaxationFactor =
|
||||
0.99 (T < 100°C, 常温慢松弛)
|
||||
0.90 (200°C ≤ T < 400°C, 回火快松弛)
|
||||
0.85 (T ≥ 400°C, 快速松弛)
|
||||
```
|
||||
|
||||
**每帧更新**:
|
||||
```
|
||||
InternalStress = InternalStress × RelaxationFactor
|
||||
```
|
||||
|
||||
**时间常数公式**:
|
||||
```
|
||||
InternalStress = InternalStress × exp(-t / τ)
|
||||
```
|
||||
|
||||
其中:
|
||||
- `t`: 时间(秒)
|
||||
- `τ`: 松弛时间常数
|
||||
- τ = 60秒(常温)
|
||||
- τ = 10秒(回火温度)
|
||||
|
||||
---
|
||||
|
||||
## 3. 应力对形变阻力的影响
|
||||
|
||||
### 3.1 形变阻力公式
|
||||
|
||||
**DeformationResistance(形变阻力)**:
|
||||
```
|
||||
DeformationResistance = BaseResistance × HardnessFactor × StressFactor × TemperatureFactor
|
||||
```
|
||||
|
||||
### 3.2 各因子详细公式
|
||||
|
||||
**基础阻力**:
|
||||
```
|
||||
BaseResistance = 1.0
|
||||
```
|
||||
|
||||
**硬度因子**:
|
||||
```
|
||||
HardnessFactor = 1.0 + (Hardness / MaxHardness) × 2.0
|
||||
```
|
||||
|
||||
硬度越高,形变阻力越大(最大3倍阻力)。
|
||||
|
||||
**应力因子**:
|
||||
```
|
||||
StressFactor = 1.0 + (InternalStress / StressLimit) × 1.5
|
||||
```
|
||||
|
||||
应力越高,材料越难形变(最大2.5倍阻力)。
|
||||
|
||||
**温度因子**:
|
||||
```
|
||||
TemperatureFactor =
|
||||
3.0 (T > 800°C, 高温软)
|
||||
1.5 (500°C < T ≤ 800°C, 中温)
|
||||
1.0 (T ≤ 500°C, 常温)
|
||||
```
|
||||
|
||||
### 3.3 顶点位移计算
|
||||
|
||||
**锤击位移**:
|
||||
```
|
||||
Displacement = BaseDisplacement / DeformationResistance
|
||||
```
|
||||
|
||||
**应力高的区域**:
|
||||
- 更难锻打
|
||||
- 需要更用力
|
||||
- 或重复锤击
|
||||
|
||||
---
|
||||
|
||||
## 4. 应力物理表现
|
||||
|
||||
### 4.1 弯曲/扭曲机制
|
||||
|
||||
**弯曲角度公式**:
|
||||
```
|
||||
BendAngle = (StressLocal - StressAverage) × BendSensitivity
|
||||
BendDirection = CrossProduct(HammerDirection, Normal)
|
||||
```
|
||||
|
||||
**实现步骤**:
|
||||
1. 计算应力梯度:
|
||||
```
|
||||
∇Stress = Stress_neighbor - Stress_center
|
||||
```
|
||||
|
||||
2. 应用顶点位移:
|
||||
```
|
||||
VertexPosition += BendDirection × BendAngle × DistanceFromCenter
|
||||
```
|
||||
|
||||
**扭曲公式**:
|
||||
当材料两侧应力不均匀时:
|
||||
```
|
||||
TwistAngle = (Stress_Left - Stress_Right) × TwistSensitivity
|
||||
VertexPosition = RotateAroundAxis(VertexPosition, Axis, TwistAngle)
|
||||
```
|
||||
|
||||
**视觉效果**:
|
||||
- 刀身沿应力梯度方向自然弯曲
|
||||
- 应力集中区域出现扭曲
|
||||
- 大幅应力差导致明显形变
|
||||
|
||||
### 4.2 裂纹起始判定
|
||||
|
||||
**临界应力阈值**:
|
||||
```
|
||||
CriticalStressThreshold = MaterialStrength × SafetyFactor
|
||||
```
|
||||
|
||||
其中:
|
||||
- `MaterialStrength`: 材料强度(可配置,默认100.0)
|
||||
- `SafetyFactor`: 安全系数(默认1.2)
|
||||
|
||||
**开裂条件**:
|
||||
```
|
||||
if (InternalStress > CriticalStressThreshold)
|
||||
{
|
||||
CreateCrack(Vertex);
|
||||
}
|
||||
```
|
||||
|
||||
**概率开裂**:
|
||||
为避免一次性开裂过多,引入概率:
|
||||
```
|
||||
CrackProbability = (InternalStress / CriticalStressThreshold) - 1.0
|
||||
if (Random() < CrackProbability)
|
||||
{
|
||||
CreateCrack(Vertex);
|
||||
}
|
||||
```
|
||||
|
||||
### 4.3 裂纹扩展机制
|
||||
|
||||
**裂纹生长方向**:
|
||||
优先沿应力梯度方向扩展(应力最大方向)
|
||||
|
||||
**每帧检查**:
|
||||
```
|
||||
if (Vertex.IsCracked)
|
||||
{
|
||||
// 裂纹扩展概率
|
||||
ExtendProbability = (InternalStress / CriticalStressThreshold) - 0.8
|
||||
|
||||
if (Random() < ExtendProbability)
|
||||
{
|
||||
// 找到应力最高的相邻顶点
|
||||
TargetNeighbor = FindMaxStressNeighbor();
|
||||
CrackTo(TargetNeighbor);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**裂纹合并**:
|
||||
当两条裂纹相交时:
|
||||
- 大块材料脱落
|
||||
- 网格拓扑断裂
|
||||
- 几何处理: 删除被包围的顶点和三角形
|
||||
|
||||
### 4.4 裂纹视觉表现
|
||||
|
||||
**几何表现**:
|
||||
1. **裂缝开口**:
|
||||
```
|
||||
CrackVertex.Position += Normal × CrackOpeningWidth
|
||||
```
|
||||
其中`CrackOpeningWidth`为裂缝开口宽度(可配置)
|
||||
|
||||
2. **边缘抖动**:
|
||||
裂纹边缘顶点位置随机抖动,模拟粗糙断裂
|
||||
|
||||
**材质表现**:
|
||||
1. **锈迹**:
|
||||
- 裂纹区域显示RustTexture
|
||||
- 锈迹深度基于裂纹时间
|
||||
|
||||
2. **内部氧化**:
|
||||
- 裂缝深处更暗
|
||||
- 模拟内部氧化
|
||||
|
||||
3. **纹理扰动**:
|
||||
使用顶点法线扰动模拟裂纹纹理
|
||||
|
||||
**物理影响**:
|
||||
- 裂纹区域的硬度系数降为0.3
|
||||
- 裂纹顶点不再参与后续锻打形变(断裂)
|
||||
|
||||
### 4.5 应力释放事件
|
||||
|
||||
**开裂后应力释放**:
|
||||
```
|
||||
if (CrackCreated)
|
||||
{
|
||||
InternalStress = InternalStress × 0.3 // 应力释放
|
||||
// 释放应力用于下次计算
|
||||
}
|
||||
```
|
||||
|
||||
**回火对应力的影响**:
|
||||
加热至回火温度(200-400°C):
|
||||
- 加速应力松弛(详见松弛机制)
|
||||
- 但如果已经开裂,裂纹无法愈合
|
||||
|
||||
---
|
||||
|
||||
## 5. 应力可视化(辅助功能)
|
||||
|
||||
### 5.1 应力扫描模式
|
||||
|
||||
**触发方式**:
|
||||
- 玩家按住特定键(如Alt键)切换到"应力视图"
|
||||
- 或在UI中选择"应力扫描"工具
|
||||
|
||||
**视觉效果**:
|
||||
|
||||
**顶点颜色着色**(彩虹色谱):
|
||||
```
|
||||
// 蓝色:低应力(< 30% StressLimit)
|
||||
if (Stress < 0.3 × StressLimit)
|
||||
{
|
||||
Color = Lerp(Blue, Green, StressRatio);
|
||||
}
|
||||
// 绿色:中等应力(30-60% StressLimit)
|
||||
else if (Stress < 0.6 × StressLimit)
|
||||
{
|
||||
Color = Lerp(Green, Yellow, StressRatio);
|
||||
}
|
||||
// 黄色:高应力(60-90% StressLimit)
|
||||
else if (Stress < 0.9 × StressLimit)
|
||||
{
|
||||
Color = Lerp(Yellow, Red, StressRatio);
|
||||
}
|
||||
// 红色:接近开裂(≥ 90% StressLimit)
|
||||
else
|
||||
{
|
||||
Color = Red;
|
||||
// 叠加闪烁效果
|
||||
Emissive = Flicker();
|
||||
}
|
||||
```
|
||||
|
||||
**应力流线**(可选):
|
||||
- 显示应力传导路径
|
||||
- 从高应力区域流向低应力区域
|
||||
- 帮助玩家理解应力分布
|
||||
|
||||
**UI面板**:
|
||||
- 实时显示最大应力值
|
||||
- 平均应力值
|
||||
- 超阈值顶点数量
|
||||
- 裂纹数量
|
||||
|
||||
### 5.2 退出可视化
|
||||
|
||||
**恢复正常视觉**:
|
||||
释放辅助功能键后,完全恢复正常视觉表现:
|
||||
- 顶点颜色恢复到正常状态(打磨度、回火色等)
|
||||
- 材质参数恢复
|
||||
- 无任何残留效果
|
||||
|
||||
---
|
||||
|
||||
## 6. 实现架构
|
||||
|
||||
### 6.1 GPU-CPU分工
|
||||
|
||||
**GPU Compute Shader职责**:
|
||||
- 热应力计算
|
||||
- 应力扩散(简化版)
|
||||
|
||||
**CPU职责**:
|
||||
- 塑性应力计算
|
||||
- 相变应力应用
|
||||
- 残余应力计算
|
||||
- 应力累积
|
||||
- 形变阻力计算
|
||||
- 弯曲/扭曲应用
|
||||
- 裂纹判定与扩展
|
||||
- 应力扫描可视化
|
||||
|
||||
### 6.2 数据结构
|
||||
|
||||
**顶点属性扩展**:
|
||||
```cpp
|
||||
TDynamicMeshVertexAttribute<float>* InternalStress; // 内部应力值
|
||||
TDynamicMeshVertexAttribute<uint8>* CrackState; // 裂纹状态(0=无, 1=有)
|
||||
```
|
||||
|
||||
**裂纹数据结构**:
|
||||
```cpp
|
||||
USTRUCT(BlueprintType)
|
||||
struct FCrackData
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
UPROPERTY()
|
||||
int32 StartVertex; // 裂纹起始顶点ID
|
||||
|
||||
UPROPERTY()
|
||||
int32 EndVertex; // 裂纹结束顶点ID
|
||||
|
||||
UPROPERTY()
|
||||
float CrackWidth; // 裂纹宽度
|
||||
|
||||
UPROPERTY()
|
||||
float CrackDepth; // 裂纹深度
|
||||
|
||||
UPROPERTY()
|
||||
float CreationTime; // 创建时间
|
||||
};
|
||||
```
|
||||
|
||||
### 6.3 性能优化
|
||||
|
||||
**应力扩散**:
|
||||
- 只在锤击后更新,每帧不需要
|
||||
- 局部扩散,仅受影响区域
|
||||
|
||||
**裂纹判定**:
|
||||
- 仅在高应力区域检查
|
||||
- 使用空间分区加速
|
||||
|
||||
**可视化**:
|
||||
- 应力扫描模式按需启用
|
||||
- 使用简化着色器
|
||||
|
||||
---
|
||||
|
||||
## 7. 参数配置
|
||||
|
||||
### 7.1 可调参数(蓝图可配)
|
||||
|
||||
| 参数名 | 默认值 | 范围 | 说明 |
|
||||
|-------|--------|------|------|
|
||||
| `MaxStress` | 150.0 | 100-200 | 最大应力值 |
|
||||
| `k_plastic` | 10.0 | 5-20 | 塑性应力系数 |
|
||||
| `ThermalStressCoeff` | 0.005 | 0.001-0.01 | 热应力系数 |
|
||||
| `PhaseStressCoeff` | 50.0 | 20-100 | 相变应力系数 |
|
||||
| `k_residual` | 5.0 | 2-10 | 残余应力系数 |
|
||||
| `DiffusionAlpha` | 0.2 | 0.1-0.3 | 扩散系数 |
|
||||
| `BendSensitivity` | 0.001 | 0.0005-0.002 | 弯曲敏感度 |
|
||||
| `TwistSensitivity` | 0.0005 | 0.0002-0.001 | 扭曲敏感度 |
|
||||
| `CriticalStressThreshold` | 120.0 | 80-150 | 临界应力 |
|
||||
| `CrackOpeningWidth` | 0.05 | 0.01-0.1 | 裂纹宽度 |
|
||||
| `RelaxationTimeNormal` | 60.0 | 30-120 | 常温松弛时间 |
|
||||
| `RelaxationTimeTemper` | 10.0 | 5-20 | 回火松弛时间 |
|
||||
|
||||
### 7.2 调试工具
|
||||
|
||||
- 应力热图:实时显示应力分布
|
||||
- 裂纹追踪:记录裂纹生成和扩展
|
||||
- 应力时间线:记录应力变化历史
|
||||
- 统计面板:最大应力、平均应力、裂纹数量
|
||||
|
||||
---
|
||||
|
||||
## 8. 实施计划
|
||||
|
||||
### 8.1 第一阶段:应力计算(1天)
|
||||
|
||||
- [ ] 四种应力来源实现
|
||||
- [ ] 应力累积规则
|
||||
- [ ] 应力扩散机制
|
||||
- [ ] 应力松弛机制
|
||||
- [ ] 单元测试
|
||||
|
||||
### 8.2 第二阶段:形变阻力(0.5天)
|
||||
|
||||
- [ ] 形变阻力公式
|
||||
- [ ] 顶点位移计算
|
||||
- [ ] 参数调优
|
||||
- [ ] 集成测试
|
||||
|
||||
### 8.3 第三阶段:物理表现(1.5天)
|
||||
|
||||
- [ ] 弯曲/扭曲机制
|
||||
- [ ] 裂纹起始判定
|
||||
- [ ] 裂纹扩展逻辑
|
||||
- [ ] 裂纹视觉表现
|
||||
- [ ] 几何处理(裂纹开口、抖动)
|
||||
- [ ] 材质表现(锈迹、氧化)
|
||||
|
||||
### 8.4 第四阶段:辅助功能(0.5天)
|
||||
|
||||
- [ ] 应力扫描模式
|
||||
- [ ] 顶点颜色着色
|
||||
- [ ] UI面板
|
||||
- [ ] 应力流线(可选)
|
||||
|
||||
### 8.5 第五阶段:集成测试(0.5天)
|
||||
|
||||
- [ ] 完整流程测试
|
||||
- [ ] 性能Profiling
|
||||
- [ ] 参数调优
|
||||
- [ ] 文档更新
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: 1.0
|
||||
**最后更新**: 2026-01-23
|
||||
**状态**: 设计完成,待评审
|
||||
@@ -0,0 +1,424 @@
|
||||
# 淬火退火相变与应力疲劳系统总览
|
||||
|
||||
**项目**: BladeSmith
|
||||
**日期**: 2026-01-23
|
||||
**目标**: 实现游戏娱乐级的高真实度冶金学物理系统
|
||||
**性能目标**: 60 FPS @ 锤击操作
|
||||
|
||||
---
|
||||
|
||||
## 1. 设计目标
|
||||
|
||||
### 1.1 核心物理现象
|
||||
|
||||
实现以下冶金学物理过程:
|
||||
|
||||
1. **淬火硬化(马氏体相变)**
|
||||
- 快速冷却改变晶体结构
|
||||
- 极大提升硬度和脆性
|
||||
- 温度区间与冷却速率双参数控制
|
||||
|
||||
2. **退火/回火机制**
|
||||
- 重新加热软化材料
|
||||
- 应力松弛,硬度降低
|
||||
- 可逆性支持(可多次热处理)
|
||||
|
||||
3. **应力累积与松弛**
|
||||
- 多来源应力:塑性形变、热应力、相变应力、残余应力
|
||||
- 应力影响形变阻力和开裂风险
|
||||
- 温度驱动的应力松弛机制
|
||||
|
||||
4. **疲劳累积与耐久度**
|
||||
- 反复锻打导致的材料疲劳
|
||||
- 裂纹起始与扩展机制
|
||||
- 刀具使用中的耐久度系统
|
||||
|
||||
### 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](./2026-01-23-淬火退火相变系统设计.md)
|
||||
|
||||
### 3.2 应力累积系统
|
||||
|
||||
**目标**: 模拟多来源应力累积与物理表现
|
||||
|
||||
**应力来源**:
|
||||
- 塑性形变应力(锤击)
|
||||
- 热应力(温度梯度)
|
||||
- 相变应力(马氏体膨胀)
|
||||
- 残余应力(外部约束)
|
||||
|
||||
**物理表现**:
|
||||
- 弯曲/扭曲(应力梯度导致)
|
||||
- 裂纹起始与扩展(应力超阈值)
|
||||
- 应力松弛(温度驱动)
|
||||
|
||||
**辅助功能**:
|
||||
- 应力扫描模式(玩家主动开启)
|
||||
- 彩虹色谱可视化应力分布
|
||||
|
||||
**详细设计**: 见 [应力累积系统设计.md](./2026-01-23-应力累积系统设计.md)
|
||||
|
||||
### 3.3 疲劳累积与耐久度系统
|
||||
|
||||
**目标**: 模拟材料疲劳和刀具耐久度
|
||||
|
||||
**疲劳机制**:
|
||||
- 累积式疲劳值(每次锻打增加)
|
||||
- 应力和温度影响疲劳率
|
||||
- 疲劳裂纹起始与扩展
|
||||
|
||||
**耐久度系统**:
|
||||
- 基于平均疲劳、裂纹数量、最大应力
|
||||
- 使用中的损伤累积
|
||||
- 回火部分恢复耐久度
|
||||
|
||||
**详细设计**: 见 [疲劳累积与耐久度系统设计.md](./2026-01-23-疲劳累积与耐久度系统设计.md)
|
||||
|
||||
---
|
||||
|
||||
## 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 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 顶点自定义属性
|
||||
|
||||
```cpp
|
||||
// 在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. 文件索引
|
||||
|
||||
- [淬火退火相变系统设计.md](./2026-01-23-淬火退火相变系统设计.md)
|
||||
- [应力累积系统设计.md](./2026-01-23-应力累积系统设计.md)
|
||||
- [疲劳累积与耐久度系统设计.md](./2026-01-23-疲劳累积与耐久度系统设计.md)
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: 1.0
|
||||
**最后更新**: 2026-01-23
|
||||
**状态**: 设计完成,待评审
|
||||
@@ -0,0 +1,436 @@
|
||||
# 淬火退火相变系统设计
|
||||
|
||||
**项目**: 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 相态枚举
|
||||
|
||||
每个体素维护相态标记:
|
||||
|
||||
```cpp
|
||||
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
|
||||
**状态**: 设计完成,待评审
|
||||
@@ -0,0 +1,629 @@
|
||||
# 疲劳累积与耐久度系统设计
|
||||
|
||||
**项目**: BladeSmith
|
||||
**日期**: 2026-01-23
|
||||
**目标**: 模拟材料疲劳和刀具耐久度
|
||||
**设计原则**: 累积式疲劳,可恢复耐久度
|
||||
|
||||
---
|
||||
|
||||
## 1. 疲劳累积机制
|
||||
|
||||
### 1.1 疲劳值定义
|
||||
|
||||
**疲劳值(Fatigue)**:
|
||||
- 范围:0(完好)到 1(完全疲劳/失效)
|
||||
- 每个顶点独立维护
|
||||
- 累积式,不可逆(除非回火)
|
||||
|
||||
### 1.2 疲劳累积规则
|
||||
|
||||
**基础公式**:
|
||||
```
|
||||
Fatigue += BaseFatigueRate × StressFactor × TemperatureFactor × DeltaTime
|
||||
```
|
||||
|
||||
### 1.3 各因子详细说明
|
||||
|
||||
**基础疲劳率(BaseFatigueRate)**:
|
||||
|
||||
| 锻打类型 | BaseFatigueRate | 说明 |
|
||||
|---------|---------------|------|
|
||||
| 正常锻打 | 0.001 | 标准锤击 |
|
||||
| 过度锻打 | 0.005 | 形变过大(超过阈值) |
|
||||
| 应力集中 | 0.010 | 高应力区域 |
|
||||
|
||||
判定过度锻打:
|
||||
```
|
||||
if (StrainIncrement > CriticalStrainThreshold)
|
||||
{
|
||||
BaseFatigueRate = 0.005; // 过度锻打
|
||||
}
|
||||
```
|
||||
|
||||
**应力因子**:
|
||||
```
|
||||
StressFactor = clamp(InternalStress / StressLimit, 1.0, 3.0)
|
||||
```
|
||||
|
||||
应力越高,疲劳累积越快:
|
||||
- 应力 < 1.0 × StressLimit: StressFactor = 1.0
|
||||
- 应力 = 1.5 × StressLimit: StressFactor = 1.5
|
||||
- 应力 ≥ 3.0 × StressLimit: StressFactor = 3.0
|
||||
|
||||
**温度因子**:
|
||||
```
|
||||
TemperatureFactor =
|
||||
0.1 (T > 800°C, 高温疲劳慢)
|
||||
1.0 (常温)
|
||||
2.0 (T < 200°C, 低温疲劳快)
|
||||
```
|
||||
|
||||
高温时材料更"柔软",疲劳较慢;低温时更"脆",疲劳快。
|
||||
|
||||
### 1.4 疲劳限制
|
||||
|
||||
```
|
||||
Fatigue = clamp(Fatigue, 0.0, 1.0)
|
||||
```
|
||||
|
||||
疲劳值达到1.0后不再增加,但可能触发失效。
|
||||
|
||||
---
|
||||
|
||||
## 2. 疲劳可视化(辅助功能)
|
||||
|
||||
### 2.1 疲劳扫描模式
|
||||
|
||||
**触发方式**:
|
||||
- 玩家按住特定键(如Shift键)切换到"疲劳视图"
|
||||
- 或在UI中选择"疲劳扫描"工具
|
||||
|
||||
### 2.2 视觉效果
|
||||
|
||||
**顶点颜色着色**:
|
||||
```
|
||||
// 蓝色:疲劳值 < 0.3
|
||||
if (Fatigue < 0.3)
|
||||
{
|
||||
Color = Lerp(Blue, Green, Fatigue / 0.3);
|
||||
}
|
||||
// 绿色:疲劳值 0.3-0.7
|
||||
else if (Fatigue < 0.7)
|
||||
{
|
||||
Color = Lerp(Green, Yellow, (Fatigue - 0.3) / 0.4);
|
||||
}
|
||||
// 黄色:疲劳值 0.7-0.9
|
||||
else if (Fatigue < 0.9)
|
||||
{
|
||||
Color = Lerp(Yellow, Orange, (Fatigue - 0.7) / 0.2);
|
||||
}
|
||||
// 红色:疲劳值 > 0.9(危险区)
|
||||
else
|
||||
{
|
||||
Color = Red;
|
||||
// 叠加脉冲效果
|
||||
Pulse = sin(Time × 5.0) × 0.5 + 0.5;
|
||||
Emissive = Pulse × Red;
|
||||
}
|
||||
```
|
||||
|
||||
### 2.3 UI面板
|
||||
|
||||
- 平均疲劳值
|
||||
- 最大疲劳值
|
||||
- 危险区域数量(Fatigue > 0.9)
|
||||
- 预估寿命
|
||||
|
||||
### 2.4 退出可视化
|
||||
|
||||
释放辅助功能键后,完全恢复正常视觉表现。
|
||||
|
||||
---
|
||||
|
||||
## 3. 疲劳裂纹系统
|
||||
|
||||
### 3.1 疲劳裂纹起始
|
||||
|
||||
**触发条件**:
|
||||
```
|
||||
if (Fatigue > 0.9 && InternalStress > 0.5 × StressLimit)
|
||||
{
|
||||
// 触发疲劳开裂
|
||||
if (Random() < CrackProbability)
|
||||
{
|
||||
CreateFatigueCrack(Vertex);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**疲劳开裂概率**:
|
||||
```
|
||||
CrackProbability = (Fatigue - 0.9) × 10.0 // 最大1.0
|
||||
```
|
||||
|
||||
疲劳值越高,开裂概率越大:
|
||||
- Fatigue = 0.9: CrackProbability = 0.0
|
||||
- Fatigue = 0.95: CrackProbability = 0.5
|
||||
- Fatigue = 1.0: CrackProbability = 1.0
|
||||
|
||||
### 3.2 疲劳裂纹扩展
|
||||
|
||||
**每次锻打检查**:
|
||||
```
|
||||
if (Vertex.IsCracked && CrackType == Fatigue)
|
||||
{
|
||||
// 裂纹扩展概率
|
||||
ExtendProbability = (Fatigue - 0.7) × 2.0
|
||||
|
||||
if (Random() < ExtendProbability)
|
||||
{
|
||||
// 找到疲劳值最高的相邻顶点
|
||||
TargetNeighbor = FindMaxFatigueNeighbor();
|
||||
CrackTo(TargetNeighbor);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**疲劳裂纹特点**:
|
||||
- 沿高疲劳值方向扩展
|
||||
- 扩展速度与疲劳值成正比
|
||||
- 可能产生多条细小裂纹(应力裂纹通常是单条)
|
||||
|
||||
### 3.3 疲劳裂纹视觉表现
|
||||
|
||||
**几何表现**:
|
||||
1. **细小裂缝**:
|
||||
- 开口宽度较小(0.01-0.02)
|
||||
- 多条裂纹可能交织
|
||||
|
||||
2. **边缘锯齿**:
|
||||
- 裂纹边缘不光滑
|
||||
- 顶点位置随机抖动
|
||||
|
||||
**材质表现**:
|
||||
1. **表面氧化**:
|
||||
- 显示轻微锈迹
|
||||
- 氧化程度与时间相关
|
||||
|
||||
2. **内部损伤**:
|
||||
- 深处 darker
|
||||
- 模拟材料损伤
|
||||
|
||||
---
|
||||
|
||||
## 4. 耐久度系统
|
||||
|
||||
### 4.1 耐久度定义
|
||||
|
||||
**耐久度(Durability)**:
|
||||
- 范围:0(损坏)到 1.0(完好)
|
||||
- 基于整个刀具计算
|
||||
- 影响刀具使用效果
|
||||
|
||||
### 4.2 耐久度计算公式
|
||||
|
||||
**综合耐久度**:
|
||||
```
|
||||
Durability = 1.0 - (AverageFatigue + CrackPenalty + StressPenalty)
|
||||
```
|
||||
|
||||
**各分量说明**:
|
||||
|
||||
**平均疲劳**:
|
||||
```
|
||||
AverageFatigue = Σ(Fatigue_i) / VertexCount
|
||||
```
|
||||
|
||||
**裂纹惩罚**:
|
||||
```
|
||||
CrackPenalty = CrackCount × 0.1 // 每条裂纹扣10%耐久
|
||||
```
|
||||
|
||||
裂纹包括:
|
||||
- 应力裂纹(由应力超阈值产生)
|
||||
- 疲劳裂纹(由疲劳累积产生)
|
||||
|
||||
**应力惩罚**:
|
||||
```
|
||||
StressPenalty = (MaxStress / StressLimit) × 0.2
|
||||
```
|
||||
|
||||
高应力区域最高扣除20%耐久度。
|
||||
|
||||
### 4.3 耐久度限制
|
||||
|
||||
```
|
||||
Durability = clamp(Durability, 0.0, 1.0)
|
||||
```
|
||||
|
||||
耐久度降到0后刀具可能失效。
|
||||
|
||||
---
|
||||
|
||||
## 5. 使用中的损伤累积
|
||||
|
||||
### 5.1 刀具使用场景
|
||||
|
||||
**切割/砍击**:
|
||||
- 每次使用造成冲击
|
||||
- 冲击点附近疲劳增加
|
||||
|
||||
**抛光/打磨**:
|
||||
- 减少疲劳(回火效果)
|
||||
- 恢复部分耐久度
|
||||
|
||||
### 5.2 冲击疲劳计算
|
||||
|
||||
**冲击应力**:
|
||||
```
|
||||
ImpactStress = ImpactForce × MaterialStiffness × (1 - ImpactAngle)
|
||||
```
|
||||
|
||||
其中:
|
||||
- `ImpactForce`: 冲击力(来自物理引擎)
|
||||
- `MaterialStiffness`: 材料刚度
|
||||
- `ImpactAngle`: 冲击角度(0-1,垂直=1.0)
|
||||
|
||||
**疲劳增量**:
|
||||
```
|
||||
Fatigue += ImpactStress / Durability × FatigueRate
|
||||
```
|
||||
|
||||
其中:
|
||||
- `FatigueRate`: 疲劳率(可配置,默认0.0001)
|
||||
|
||||
**局部更新**:
|
||||
冲击影响半径内的顶点更新疲劳值。
|
||||
|
||||
### 5.3 耐久度实时更新
|
||||
|
||||
**每次使用后**:
|
||||
```
|
||||
// 重新计算耐久度
|
||||
Durability = CalculateDurability();
|
||||
|
||||
// 更新UI
|
||||
UpdateDurabilityUI();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. 耐久度恢复机制
|
||||
|
||||
### 6.1 回火恢复
|
||||
|
||||
**加热至回火温度**(200-400°C):
|
||||
|
||||
**疲劳恢复**:
|
||||
```
|
||||
if (Temperature > 200°C && Temperature < 400°C)
|
||||
{
|
||||
Fatigue -= 0.1 × DeltaTime; // 慢慢消除疲劳
|
||||
Fatigue = clamp(Fatigue, 0.0, 1.0);
|
||||
}
|
||||
```
|
||||
|
||||
**耐久度恢复**:
|
||||
```
|
||||
if (Temperature > 200°C && Temperature < 400°C)
|
||||
{
|
||||
Durability += 0.05 × DeltaTime;
|
||||
Durability = clamp(Durability, 0.0, 1.0);
|
||||
}
|
||||
```
|
||||
|
||||
**注意事项**:
|
||||
- 疲劳可部分恢复
|
||||
- 但裂纹无法愈合
|
||||
- 裂纹惩罚永久存在
|
||||
|
||||
### 6.2 打磨恢复
|
||||
|
||||
**打磨操作**:
|
||||
|
||||
**表面损伤修复**:
|
||||
- 打磨可去除表面疲劳痕迹
|
||||
- 减少视觉上的"老伤"
|
||||
|
||||
**疲劳影响**:
|
||||
```
|
||||
if (PolishAmount > OldPolishAmount)
|
||||
{
|
||||
Fatigue -= (PolishAmount - OldPolishAmount) × 0.5;
|
||||
Fatigue = clamp(Fatigue, 0.0, 1.0);
|
||||
}
|
||||
```
|
||||
|
||||
**耐久度影响**:
|
||||
- 打磨不恢复耐久度
|
||||
- 但可以改善外观
|
||||
|
||||
---
|
||||
|
||||
## 7. 刀具失效判定
|
||||
|
||||
### 7.1 失效条件
|
||||
|
||||
**条件1: 耐久度耗尽**:
|
||||
```
|
||||
if (Durability < 0.0)
|
||||
{
|
||||
BreakWeapon();
|
||||
}
|
||||
```
|
||||
|
||||
**条件2: 主裂纹存在**:
|
||||
```
|
||||
if (MajorCrackExists)
|
||||
{
|
||||
// 主裂纹判定:长度超过阈值或穿过关键区域
|
||||
if (CrackLength > MajorCrackThreshold || CrackThroughCriticalArea)
|
||||
{
|
||||
BreakWeapon();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**条件3: 瞬时过载**:
|
||||
```
|
||||
if (ImpactForce > UltimateStrength)
|
||||
{
|
||||
// 瞬间断裂
|
||||
InstantBreakWeapon();
|
||||
}
|
||||
```
|
||||
|
||||
### 7.2 失效表现
|
||||
|
||||
**几何表现**:
|
||||
1. **断裂**:
|
||||
- 刀身分离成两段
|
||||
- 网格拓扑断裂
|
||||
- 删除断裂部分的顶点和三角形
|
||||
|
||||
2. **破碎**:
|
||||
- 多个小碎片
|
||||
- 适合薄刃刀具
|
||||
|
||||
**材质表现**:
|
||||
1. **断口**:
|
||||
- 显示粗糙断裂面
|
||||
- 颜色暗淡
|
||||
- 无光泽
|
||||
|
||||
2. **音效**:
|
||||
- 断裂音效
|
||||
- 碎片掉落声
|
||||
|
||||
**物理表现**:
|
||||
- 断裂部分掉落
|
||||
- 受重力影响
|
||||
- 碰撞地面产生音效
|
||||
|
||||
---
|
||||
|
||||
## 8. 实现架构
|
||||
|
||||
### 8.1 数据结构
|
||||
|
||||
**顶点属性扩展**:
|
||||
```cpp
|
||||
TDynamicMeshVertexAttribute<float>* FatigueValue; // 疲劳值(0-1)
|
||||
```
|
||||
|
||||
**裂纹数据结构**:
|
||||
```cpp
|
||||
UENUM(BlueprintType)
|
||||
enum class ECrackType : uint8
|
||||
{
|
||||
Stress = 0, // 应力裂纹
|
||||
Fatigue = 1, // 疲劳裂纹
|
||||
Impact = 2 // 冲击裂纹
|
||||
};
|
||||
|
||||
USTRUCT(BlueprintType)
|
||||
struct FCrackData
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
UPROPERTY()
|
||||
int32 StartVertex; // 裂纹起始顶点ID
|
||||
|
||||
UPROPERTY()
|
||||
int32 EndVertex; // 裂纹结束顶点ID
|
||||
|
||||
UPROPERTY()
|
||||
TEnumAsByte<ECrackType> CrackType; // 裂纹类型
|
||||
|
||||
UPROPERTY()
|
||||
float CrackWidth; // 裂纹宽度
|
||||
|
||||
UPROPERTY()
|
||||
float CrackDepth; // 裂纹深度
|
||||
|
||||
UPROPERTY()
|
||||
float CreationTime; // 创建时间
|
||||
|
||||
UPROPERTY()
|
||||
bool bIsMajor; // 是否主裂纹
|
||||
};
|
||||
```
|
||||
|
||||
**刀具耐久度数据**:
|
||||
```cpp
|
||||
USTRUCT(BlueprintType)
|
||||
struct FWeaponDurability
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
UPROPERTY()
|
||||
float Durability; // 耐久度(0-1)
|
||||
|
||||
UPROPERTY()
|
||||
float AverageFatigue; // 平均疲劳
|
||||
|
||||
UPROPERTY()
|
||||
int32 CrackCount; // 裂纹数量
|
||||
|
||||
UPROPERTY()
|
||||
float MaxStress; // 最大应力
|
||||
|
||||
UPROPERTY()
|
||||
int32 MajorCrackCount; // 主裂纹数量
|
||||
};
|
||||
```
|
||||
|
||||
### 8.2 GPU-CPU分工
|
||||
|
||||
**GPU Compute Shader职责**:
|
||||
- 无(疲劳计算纯CPU)
|
||||
|
||||
**CPU职责**:
|
||||
- 疲劳累积计算
|
||||
- 疲劳裂纹判定
|
||||
- 裂纹扩展逻辑
|
||||
- 耐久度计算
|
||||
- 使用中的损伤累积
|
||||
- 回火/打磨恢复
|
||||
- 刀具失效判定
|
||||
- 疲劳扫描可视化
|
||||
|
||||
---
|
||||
|
||||
## 9. 性能优化
|
||||
|
||||
### 9.1 疲劳计算优化
|
||||
|
||||
**局部更新**:
|
||||
- 锤击时仅更新受影响区域
|
||||
- 使用空间分区加速查询
|
||||
|
||||
**批量更新**:
|
||||
- 每帧最多更新N个顶点
|
||||
- 使用优先级队列(高疲劳优先)
|
||||
|
||||
### 9.2 裂纹判定优化
|
||||
|
||||
**阈值检查**:
|
||||
```
|
||||
// 仅检查接近阈值的顶点
|
||||
if (Fatigue > 0.8 && InternalStress > 0.5 × StressLimit)
|
||||
{
|
||||
// 检查裂纹
|
||||
}
|
||||
```
|
||||
|
||||
**空间分区**:
|
||||
- 使用八叉树或BVH
|
||||
- 快速查询相邻顶点
|
||||
|
||||
### 9.3 可视化优化
|
||||
|
||||
**疲劳扫描**:
|
||||
- 按需启用
|
||||
- 使用简化着色器
|
||||
- 降低更新频率
|
||||
|
||||
---
|
||||
|
||||
## 10. 参数配置
|
||||
|
||||
### 10.1 可调参数(蓝图可配)
|
||||
|
||||
| 参数名 | 默认值 | 范围 | 说明 |
|
||||
|-------|--------|------|------|
|
||||
| `BaseFatigueRateNormal` | 0.001 | 0.0005-0.002 | 正常锻打疲劳率 |
|
||||
| `BaseFatigueRateOverwork` | 0.005 | 0.002-0.01 | 过度锻打疲劳率 |
|
||||
| `BaseFatigueRateStress` | 0.010 | 0.005-0.02 | 应力集中疲劳率 |
|
||||
| `CriticalStrainThreshold` | 0.1 | 0.05-0.2 | 临界应变阈值 |
|
||||
| `TemperatureFactorHigh` | 0.1 | 0.05-0.2 | 高温疲劳因子 |
|
||||
| `TemperatureFactorNormal` | 1.0 | 0.8-1.2 | 常温疲劳因子 |
|
||||
| `TemperatureFactorLow` | 2.0 | 1.5-2.5 | 低温疲劳因子 |
|
||||
| `CrackPenalty` | 0.1 | 0.05-0.2 | 单条裂纹惩罚 |
|
||||
| `StressPenalty` | 0.2 | 0.1-0.3 | 应力惩罚系数 |
|
||||
| `FatigueRecoveryRate` | 0.1 | 0.05-0.2 | 回火疲劳恢复率 |
|
||||
| `DurabilityRecoveryRate` | 0.05 | 0.02-0.1 | 回火耐久恢复率 |
|
||||
| `ImpactFatigueRate` | 0.0001 | 0.00005-0.0002 | 冲击疲劳率 |
|
||||
| `MajorCrackThreshold` | 10.0 | 5.0-20.0 | 主裂纹长度阈值 |
|
||||
|
||||
### 10.2 调试工具
|
||||
|
||||
- 疲劳热图:实时显示疲劳分布
|
||||
- 疲劳时间线:记录疲劳变化历史
|
||||
- 裂纹追踪:记录裂纹生成和扩展
|
||||
- 耐久度面板:实时显示耐久度
|
||||
- 预估寿命:基于当前疲劳率预估
|
||||
|
||||
---
|
||||
|
||||
## 11. 实施计划
|
||||
|
||||
### 11.1 第一阶段:疲劳累积(1天)
|
||||
|
||||
- [ ] 疲劳值属性系统
|
||||
- [ ] 疲劳累积规则
|
||||
- [ ] 应力和温度因子
|
||||
- [ ] 疲劳限制
|
||||
- [ ] 单元测试
|
||||
|
||||
### 11.2 第二阶段:疲劳裂纹(1天)
|
||||
|
||||
- [ ] 疲劳裂纹起始判定
|
||||
- [ ] 疲劳裂纹扩展逻辑
|
||||
- [ ] 疲劳裂纹视觉表现
|
||||
- [ ] 集成测试
|
||||
|
||||
### 11.3 第三阶段:耐久度系统(1天)
|
||||
|
||||
- [ ] 耐久度计算公式
|
||||
- [ ] 使用中的损伤累积
|
||||
- [ ] 回火/打磨恢复
|
||||
- [ ] 耐久度UI
|
||||
- [ ] 集成测试
|
||||
|
||||
### 11.4 第四阶段:刀具失效(0.5天)
|
||||
|
||||
- [ ] 失效条件判定
|
||||
- [ ] 失效表现(几何/材质/音效)
|
||||
- [ ] 集成测试
|
||||
|
||||
### 11.5 第五阶段:辅助功能(0.5天)
|
||||
|
||||
- [ ] 疲劳扫描模式
|
||||
- [ ] 疲劳热图
|
||||
- [ ] UI面板
|
||||
- [ ] 调试工具
|
||||
|
||||
### 11.6 第六阶段:集成测试(0.5天)
|
||||
|
||||
- [ ] 完整流程测试
|
||||
- [ ] 性能Profiling
|
||||
- [ ] 参数调优
|
||||
- [ ] 文档更新
|
||||
|
||||
---
|
||||
|
||||
## 12. 风险评估
|
||||
|
||||
### 12.1 技术风险
|
||||
|
||||
| 风险 | 概率 | 影响 | 缓解措施 |
|
||||
|------|------|------|---------|
|
||||
| 疲劳计算性能不足 | 中 | 中 | 局部更新,批量处理 |
|
||||
| 裂纹判定过于频繁 | 低 | 高 | 提高阈值,减少检查 |
|
||||
| 耐久度平衡困难 | 中 | 中 | 参数可调,快速迭代 |
|
||||
|
||||
### 12.2 设计风险
|
||||
|
||||
| 风险 | 概率 | 影响 | 缓解措施 |
|
||||
|------|------|------|---------|
|
||||
| 疲劳积累过快,玩家受挫 | 中 | 高 | 降低基础疲劳率,提供恢复机制 |
|
||||
| 刀具失效过于突然 | 低 | 中 | 增加预警,渐进式失效 |
|
||||
| 辅助功能滥用 | 低 | 低 | 限制使用时长,增加冷却 |
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: 1.0
|
||||
**最后更新**: 2026-01-23
|
||||
**状态**: 设计完成,待评审
|
||||
Reference in New Issue
Block a user