Files
BladeSmith/docs/plans/2026-01-23-应力累积系统设计.md
T
2026-01-23 18:52:18 +08:00

11 KiB
Raw Blame History

应力累积系统设计

项目: 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 数据结构

顶点属性扩展:

TDynamicMeshVertexAttribute<float>* InternalStress;  // 内部应力值
TDynamicMeshVertexAttribute<uint8>* CrackState;      // 裂纹状态(0=无, 1=有)

裂纹数据结构:

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