feat: 适配 UE5.8 升级与仓库配置整理
- 升级 Target.cs 构建设置到 V7 / EngineIncludeOrderVersion.Unreal5_8 - DynamicIronBlock 温度计算从手动 RHI dispatch 迁移到 RDG (FRDGBuilder + FComputeShaderUtils::Dispatch + FRDGPooledBuffer 包装外部缓冲) - 移除两个 shader 头中废弃的 SHADER_USE_PARAMETER_STRUCT 宏 (UE5.8 已不需要) - BladeSmith.uproject: 关联 UE5.8 + 启用 ModelContextProtocol/AllToolsets/MCPClientToolset 插件 - DefaultEngine.ini: r.Substrate=False - 移除废弃的 DeformAsyncTask.cpp - 新增项目级 opencode.json (MCP unreal-mcp 配置) 与 .vscode 手写配置 (c_cpp_properties/mcp) - 整理 .gitignore: 永久排除 AI 工具配置/缓存 (.claude/.codex/.cursor/.gemini/.codegraph/.planning 等)、graphify 缓存、IDE 生成物 - 移出跟踪: .claude/ (含 session-namer 技能)、.vsconfig
This commit is contained in:
@@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"permissions": {
|
|
||||||
"allow": [
|
|
||||||
"Bash(\"E:\\MiceCola\\work\\UE_5_6\\Engine\\Build\\BatchFiles\\Build.bat\" BladeSmithEditor Win64 Development \"-Project=E:\\MiceCola\\work\\BladeSmith\\BladeSmith.uproject\" -WaitMutex -FromMsBuild)",
|
|
||||||
"Bash(dir:*)",
|
|
||||||
"Bash(git add:*)",
|
|
||||||
"Bash(git commit:*)",
|
|
||||||
"Skill(gsd:*)",
|
|
||||||
"Bash(findstr:*)",
|
|
||||||
"Bash(powershell:*)",
|
|
||||||
"Bash(Select-Object -Last 20)",
|
|
||||||
"WebSearch"
|
|
||||||
],
|
|
||||||
"deny": [],
|
|
||||||
"ask": []
|
|
||||||
},
|
|
||||||
"outputStyle": "Explanatory"
|
|
||||||
}
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
---
|
|
||||||
name: session-namer
|
|
||||||
description: 会话命名管理工具 - 在开始新任务前帮助命名或恢复会话
|
|
||||||
---
|
|
||||||
|
|
||||||
# 会话命名管理
|
|
||||||
|
|
||||||
当您开始新的工作会话时,此技能帮助您管理会话命名。
|
|
||||||
|
|
||||||
## 当前会话状态
|
|
||||||
|
|
||||||
请检查是否需要命名当前会话:
|
|
||||||
|
|
||||||
### 可用操作
|
|
||||||
|
|
||||||
1. **命名当前会话**
|
|
||||||
使用命令: `/rename <会话名称>`
|
|
||||||
例如: `/rename 实现各向异性形变`
|
|
||||||
|
|
||||||
2. **恢复历史会话**
|
|
||||||
使用命令: `/resume <会话名称>`
|
|
||||||
或在 REPL 中使用: `/continue`
|
|
||||||
|
|
||||||
3. **继续当前会话**
|
|
||||||
如果不需要命名,直接开始工作即可
|
|
||||||
|
|
||||||
## BladeSmith 项目常用会话命名建议
|
|
||||||
|
|
||||||
基于项目结构,建议的会话命名模式:
|
|
||||||
|
|
||||||
- **功能开发**: `feat-功能名称` (如 `feat-温度系统`)
|
|
||||||
- **Bug 修复**: `fix-问题描述` (如 `fix-边缘约束问题`)
|
|
||||||
- **代码重构**: `refactor-模块名称` (如 `refactor-GPU着色器`)
|
|
||||||
- **性能优化**: `perf-优化目标` (如 `perf-网格简化`)
|
|
||||||
- **文档编写**: `docs-文档主题` (如 `docs-API文档`)
|
|
||||||
- **测试相关**: `test-测试内容` (如 `test-形变系统`)
|
|
||||||
|
|
||||||
## 最近的 Git 分支作为参考
|
|
||||||
|
|
||||||
当前分支: hammer-deformation-phase1
|
|
||||||
|
|
||||||
如果需要查看更多分支或上下文,我可以帮您:
|
|
||||||
- 列出最近的 git 分支
|
|
||||||
- 查看最近的提交历史
|
|
||||||
- 查看未完成的工作
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**是否需要我帮助您命名当前会话?** 请告诉我您计划做什么,或者直接使用 `/rename` 命令。
|
|
||||||
+29
@@ -75,3 +75,32 @@ Plugins/**/Intermediate/*
|
|||||||
DerivedDataCache/*
|
DerivedDataCache/*
|
||||||
|
|
||||||
nul
|
nul
|
||||||
|
|
||||||
|
# ==================== AI/agent 工具配置与缓存 (机器相关,不入库) ====================
|
||||||
|
.claude/
|
||||||
|
.codex/
|
||||||
|
.cursor/
|
||||||
|
.gemini/
|
||||||
|
.codegraph/
|
||||||
|
.planning/
|
||||||
|
.omo/run-continuation/
|
||||||
|
|
||||||
|
# graphify 技能缓存
|
||||||
|
.graphify_python
|
||||||
|
.graphify_uncached.txt
|
||||||
|
.ignore
|
||||||
|
graphify-out/
|
||||||
|
Source/BladeSmith/graphify-out/
|
||||||
|
|
||||||
|
# IDE 生成缓存
|
||||||
|
.vsconfig
|
||||||
|
.vscode/compileCommands_*/
|
||||||
|
.vscode/compileCommands_*.json
|
||||||
|
.vscode/compile_commands.json
|
||||||
|
BladeSmith.code-workspace
|
||||||
|
|
||||||
|
# MCP 配置 (改用 opencode.json)
|
||||||
|
.mcp.json
|
||||||
|
|
||||||
|
# 构建日志
|
||||||
|
upgrade_build.log
|
||||||
Vendored
+11
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Win32",
|
||||||
|
"cStandard": "c17",
|
||||||
|
"cppStandard": "c++20",
|
||||||
|
"intelliSenseMode": "msvc-x64"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": 4
|
||||||
|
}
|
||||||
Vendored
+10
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"servers":
|
||||||
|
{
|
||||||
|
"unreal-mcp":
|
||||||
|
{
|
||||||
|
"type": "http",
|
||||||
|
"url": "http://127.0.0.1:8000/mcp"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"version": "1.0",
|
|
||||||
"components": [
|
|
||||||
"Component.Unreal.Debugger",
|
|
||||||
"Component.Unreal.Ide",
|
|
||||||
"Microsoft.Net.Component.4.6.2.TargetingPack",
|
|
||||||
"Microsoft.VisualStudio.Component.VC.14.38.17.8.ATL",
|
|
||||||
"Microsoft.VisualStudio.Component.VC.14.38.17.8.x86.x64",
|
|
||||||
"Microsoft.VisualStudio.Component.VC.Llvm.Clang",
|
|
||||||
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
|
|
||||||
"Microsoft.VisualStudio.Component.Windows11SDK.22621",
|
|
||||||
"Microsoft.VisualStudio.Workload.CoreEditor",
|
|
||||||
"Microsoft.VisualStudio.Workload.ManagedDesktop",
|
|
||||||
"Microsoft.VisualStudio.Workload.NativeDesktop",
|
|
||||||
"Microsoft.VisualStudio.Workload.NativeGame"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
+25
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"FileVersion": 3,
|
"FileVersion": 3,
|
||||||
"EngineAssociation": "5.6",
|
"EngineAssociation": "{91698CCB-4566-3FC8-DE61-969023373C2D}",
|
||||||
"Category": "",
|
"Category": "",
|
||||||
"Description": "",
|
"Description": "",
|
||||||
"Modules": [
|
"Modules": [
|
||||||
@@ -28,6 +28,30 @@
|
|||||||
{
|
{
|
||||||
"Name": "HDRIBackdrop",
|
"Name": "HDRIBackdrop",
|
||||||
"Enabled": true
|
"Enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "GeometryProcessing",
|
||||||
|
"Enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "MeshModelingToolset",
|
||||||
|
"Enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "RiderLink",
|
||||||
|
"Enabled": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "MCPClientToolset",
|
||||||
|
"Enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "ModelContextProtocol",
|
||||||
|
"Enabled": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "AllToolsets",
|
||||||
|
"Enabled": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -39,6 +39,7 @@ r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8
|
|||||||
r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8
|
r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8
|
||||||
r.DefaultFeature.AutoExposure=False
|
r.DefaultFeature.AutoExposure=False
|
||||||
r.Lumen.TraceMeshSDFs=1
|
r.Lumen.TraceMeshSDFs=1
|
||||||
|
r.Substrate=False
|
||||||
|
|
||||||
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
|
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
|
||||||
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
|
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ extern FThreadSafeDeformationParams GDeformationParams;
|
|||||||
class MICESHADERS_API FDeformComputeShader : public FGlobalShader
|
class MICESHADERS_API FDeformComputeShader : public FGlobalShader
|
||||||
{
|
{
|
||||||
DECLARE_GLOBAL_SHADER(FDeformComputeShader);
|
DECLARE_GLOBAL_SHADER(FDeformComputeShader);
|
||||||
SHADER_USE_PARAMETER_STRUCT(FDeformComputeShader, FGlobalShader);
|
|
||||||
|
|
||||||
BEGIN_SHADER_PARAMETER_STRUCT(FParameters, )
|
BEGIN_SHADER_PARAMETER_STRUCT(FParameters, )
|
||||||
// 碰撞参数
|
// 碰撞参数
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ extern MICESHADERS_API FThreadSafeTemperatureParams GTemperatureParams;
|
|||||||
class MICESHADERS_API FTemperatureComputeShader : public FGlobalShader
|
class MICESHADERS_API FTemperatureComputeShader : public FGlobalShader
|
||||||
{
|
{
|
||||||
DECLARE_GLOBAL_SHADER(FTemperatureComputeShader);
|
DECLARE_GLOBAL_SHADER(FTemperatureComputeShader);
|
||||||
SHADER_USE_PARAMETER_STRUCT(FTemperatureComputeShader, FGlobalShader);
|
|
||||||
|
|
||||||
BEGIN_SHADER_PARAMETER_STRUCT(FParameters, )
|
BEGIN_SHADER_PARAMETER_STRUCT(FParameters, )
|
||||||
// 体素网格参数
|
// 体素网格参数
|
||||||
|
|||||||
@@ -8,8 +8,9 @@ public class BladeSmithTarget : TargetRules
|
|||||||
public BladeSmithTarget(TargetInfo Target) : base(Target)
|
public BladeSmithTarget(TargetInfo Target) : base(Target)
|
||||||
{
|
{
|
||||||
Type = TargetType.Game;
|
Type = TargetType.Game;
|
||||||
DefaultBuildSettings = BuildSettingsVersion.V5;
|
DefaultBuildSettings = BuildSettingsVersion.V7;
|
||||||
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_5;
|
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_8;
|
||||||
|
CppStandard = CppStandardVersion.Cpp20;
|
||||||
ExtraModuleNames.Add("BladeSmith");
|
ExtraModuleNames.Add("BladeSmith");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -955,8 +955,7 @@ void ADynamicIronBlock::UpdateVertexColors()
|
|||||||
FVector VertexPosFloat(VertexPos.X, VertexPos.Y, VertexPos.Z);
|
FVector VertexPosFloat(VertexPos.X, VertexPos.Y, VertexPos.Z);
|
||||||
|
|
||||||
// 采样该位置的温度
|
// 采样该位置的温度
|
||||||
//float Temperature = SampleTemperatureAtPosition(VertexPosFloat);
|
float Temperature = SampleTemperatureAtPosition(VertexPosFloat);
|
||||||
float Temperature = 900;
|
|
||||||
// 统计温度范围
|
// 统计温度范围
|
||||||
MinTemp = FMath::Min(MinTemp, Temperature);
|
MinTemp = FMath::Min(MinTemp, Temperature);
|
||||||
MaxTemp = FMath::Max(MaxTemp, Temperature);
|
MaxTemp = FMath::Max(MaxTemp, Temperature);
|
||||||
@@ -1294,6 +1293,14 @@ void ADynamicIronBlock::DispatchTemperatureCompute(float DeltaTime)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 验证其他缓冲区
|
||||||
|
if (!PlasticityBuffer.IsValid() || !SurfaceVoxelFlagsBuffer.IsValid())
|
||||||
|
{
|
||||||
|
UE_LOG(LogTemp, Error, TEXT("DynamicIronBlock: Plasticity or Flags buffer not valid! P=%d F=%d"),
|
||||||
|
PlasticityBuffer.IsValid(), SurfaceVoxelFlagsBuffer.IsValid());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 准备调度参数(捕获到lambda中)
|
// 准备调度参数(捕获到lambda中)
|
||||||
FIntVector Resolution = TemperatureResolution;
|
FIntVector Resolution = TemperatureResolution;
|
||||||
float Conductivity = ThermalConductivity;
|
float Conductivity = ThermalConductivity;
|
||||||
@@ -1305,16 +1312,17 @@ void ADynamicIronBlock::DispatchTemperatureCompute(float DeltaTime)
|
|||||||
UE_LOG(LogTemp, Log, TEXT("DynamicIronBlock: Dispatching temperature compute - Resolution=(%d,%d,%d), DeltaTime=%.4f"),
|
UE_LOG(LogTemp, Log, TEXT("DynamicIronBlock: Dispatching temperature compute - Resolution=(%d,%d,%d), DeltaTime=%.4f"),
|
||||||
Resolution.X, Resolution.Y, Resolution.Z, DeltaTime);
|
Resolution.X, Resolution.Y, Resolution.Z, DeltaTime);
|
||||||
|
|
||||||
// Ping-Pong缓冲区引用(捕获到lambda传递给RDG)
|
// Ping-Pong缓冲区引用(捕获到lambda传递给渲染线程)
|
||||||
FBufferRHIRef InputBuffer = bUseBufferA ? TemperatureBufferA : TemperatureBufferB;
|
const bool bCurrentBufferA = bUseBufferA;
|
||||||
FBufferRHIRef OutputBuffer = bUseBufferA ? TemperatureBufferB : TemperatureBufferA;
|
FBufferRHIRef InputBuffer = bCurrentBufferA ? TemperatureBufferA : TemperatureBufferB;
|
||||||
|
FBufferRHIRef OutputBuffer = bCurrentBufferA ? TemperatureBufferB : TemperatureBufferA;
|
||||||
FBufferRHIRef FlagsBuffer = SurfaceVoxelFlagsBuffer;
|
FBufferRHIRef FlagsBuffer = SurfaceVoxelFlagsBuffer;
|
||||||
FBufferRHIRef PlasticityBuf = PlasticityBuffer;
|
FBufferRHIRef PlasticityBuf = PlasticityBuffer;
|
||||||
|
|
||||||
// 切换缓冲区(下次Tick使用新的缓冲区)
|
// 切换缓冲区(下次Tick使用新的缓冲区)
|
||||||
bUseBufferA = !bUseBufferA;
|
bUseBufferA = !bUseBufferA;
|
||||||
|
|
||||||
// 调度GPU计算(使用RDG正确的资源管理)
|
// 调度GPU计算(UE5.8已移除手动RHI Compute dispatch API,改用RDG)
|
||||||
ENQUEUE_RENDER_COMMAND(DispatchTemperatureCS)(
|
ENQUEUE_RENDER_COMMAND(DispatchTemperatureCS)(
|
||||||
[Resolution, Conductivity, Cooling, Ambient, ForgeMin, ForgeMax, DeltaTime,
|
[Resolution, Conductivity, Cooling, Ambient, ForgeMin, ForgeMax, DeltaTime,
|
||||||
InputBuffer, OutputBuffer, FlagsBuffer, PlasticityBuf]
|
InputBuffer, OutputBuffer, FlagsBuffer, PlasticityBuf]
|
||||||
@@ -1336,48 +1344,47 @@ void ADynamicIronBlock::DispatchTemperatureCompute(float DeltaTime)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
UE_LOG(LogTemp, Log, TEXT("DynamicIronBlock [RenderThread]: Shader valid, creating RDG..."));
|
UE_LOG(LogTemp, Log, TEXT("DynamicIronBlock [RenderThread]: Shader valid, setting up RDG compute dispatch..."));
|
||||||
|
|
||||||
// 使用RDG
|
// 构建RDG图
|
||||||
FRDGBuilder GraphBuilder(RHICmdList, RDG_EVENT_NAME("TemperatureConduction"));
|
FRDGBuilder GraphBuilder(RHICmdList);
|
||||||
|
|
||||||
// 将外部RHI缓冲区正确注册到RDG系统
|
// 将外部裸RHI缓冲区包装为FRDGPooledBuffer后注册到RDG
|
||||||
// 创建缓冲区描述符
|
//(UE5.8的RegisterExternalBuffer只接受FRDGPooledBuffer,不再接受裸FBufferRHIRef)
|
||||||
const uint32 NumElements = InputBuffer->GetSize() / sizeof(float);
|
auto WrapExternalBuffer = [&GraphBuilder](FBufferRHIRef RawBuffer, const TCHAR* Name) -> FRDGBufferRef
|
||||||
FRDGBufferDesc TempBufferDesc = FRDGBufferDesc::CreateBufferDesc(sizeof(float), NumElements);
|
{
|
||||||
FRDGBufferDesc FlagsBufferDesc = FRDGBufferDesc::CreateBufferDesc(sizeof(uint32), NumElements);
|
// 所有缓冲区均为4字节typed元素(float温度/塑性 或 uint体素标志)
|
||||||
|
const uint32 BytesPerElement = sizeof(float);
|
||||||
|
const uint32 NumElements = RawBuffer->GetSize() / BytesPerElement;
|
||||||
|
FRDGBufferDesc Desc = FRDGBufferDesc::CreateBufferDesc(BytesPerElement, NumElements);
|
||||||
|
TRefCountPtr<FRDGPooledBuffer> PooledBuffer = new FRDGPooledBuffer(RawBuffer, Desc, NumElements, Name);
|
||||||
|
return GraphBuilder.RegisterExternalBuffer(PooledBuffer);
|
||||||
|
};
|
||||||
|
|
||||||
// 创建FRDGPooledBuffer并注册
|
FRDGBufferRef InputRDG = WrapExternalBuffer(InputBuffer, TEXT("InputTemperature"));
|
||||||
TRefCountPtr<FRDGPooledBuffer> InputPooledBuffer = new FRDGPooledBuffer(RHICmdList, InputBuffer, TempBufferDesc, NumElements, TEXT("InputTemperatureBuffer"));
|
FRDGBufferRef OutputRDG = WrapExternalBuffer(OutputBuffer, TEXT("OutputTemperature"));
|
||||||
TRefCountPtr<FRDGPooledBuffer> OutputPooledBuffer = new FRDGPooledBuffer(RHICmdList, OutputBuffer, TempBufferDesc, NumElements, TEXT("OutputTemperatureBuffer"));
|
FRDGBufferRef FlagsRDG = WrapExternalBuffer(FlagsBuffer, TEXT("SurfaceVoxelFlags"));
|
||||||
TRefCountPtr<FRDGPooledBuffer> FlagsPooledBuffer = new FRDGPooledBuffer(RHICmdList, FlagsBuffer, FlagsBufferDesc, NumElements, TEXT("SurfaceVoxelFlagsBuffer"));
|
FRDGBufferRef PlasticityRDG = WrapExternalBuffer(PlasticityBuf, TEXT("Plasticity"));
|
||||||
TRefCountPtr<FRDGPooledBuffer> PlasticityPooledBuffer = new FRDGPooledBuffer(RHICmdList, PlasticityBuf, TempBufferDesc, NumElements, TEXT("PlasticityBuffer"));
|
|
||||||
|
|
||||||
FRDGBufferRef InputTempRDG = GraphBuilder.RegisterExternalBuffer(InputPooledBuffer);
|
// 通过RDG创建SRV/UAV(格式必须与缓冲区创建时一致:温度/塑性=PF_R32_FLOAT,体素标志=PF_R32_UINT)
|
||||||
FRDGBufferRef OutputTempRDG = GraphBuilder.RegisterExternalBuffer(OutputPooledBuffer);
|
FRDGBufferSRV* InputTempSRV = GraphBuilder.CreateSRV(FRDGBufferSRVDesc(InputRDG, PF_R32_FLOAT));
|
||||||
FRDGBufferRef FlagsRDG = GraphBuilder.RegisterExternalBuffer(FlagsPooledBuffer);
|
FRDGBufferSRV* FlagsSRV = GraphBuilder.CreateSRV(FRDGBufferSRVDesc(FlagsRDG, PF_R32_UINT));
|
||||||
FRDGBufferRef PlasticityRDG = GraphBuilder.RegisterExternalBuffer(PlasticityPooledBuffer);
|
FRDGBufferUAV* OutputTempUAV = GraphBuilder.CreateUAV(FRDGBufferUAVDesc(OutputRDG, PF_R32_FLOAT));
|
||||||
|
FRDGBufferUAV* OutputPlasticityUAV = GraphBuilder.CreateUAV(FRDGBufferUAVDesc(PlasticityRDG, PF_R32_FLOAT));
|
||||||
|
|
||||||
|
// 分配并填充参数(RDG参数指针由GraphBuilder托管生命周期)
|
||||||
UE_LOG(LogTemp, Log, TEXT("DynamicIronBlock [RenderThread]: External RHI buffers registered to RDG, setting shader parameters..."));
|
FTemperatureComputeShader::FParameters* Parameters = GraphBuilder.AllocParameters<FTemperatureComputeShader::FParameters>();
|
||||||
|
Parameters->VoxelResolution = Resolution;
|
||||||
// 设置Shader参数
|
Parameters->ThermalConductivity = Conductivity;
|
||||||
FTemperatureComputeShader::FParameters* PassParameters = GraphBuilder.AllocParameters<FTemperatureComputeShader::FParameters>();
|
Parameters->CoolingRate = Cooling;
|
||||||
PassParameters->VoxelResolution = Resolution;
|
Parameters->AmbientTemperature = Ambient;
|
||||||
PassParameters->ThermalConductivity = Conductivity;
|
Parameters->ForgeTemperatureMin = ForgeMin;
|
||||||
PassParameters->CoolingRate = Cooling;
|
Parameters->ForgeTemperatureMax = ForgeMax;
|
||||||
PassParameters->AmbientTemperature = Ambient;
|
Parameters->DeltaTime = DeltaTime;
|
||||||
PassParameters->ForgeTemperatureMin = ForgeMin;
|
Parameters->InputTemperatureBuffer = InputTempSRV;
|
||||||
PassParameters->ForgeTemperatureMax = ForgeMax;
|
Parameters->SurfaceVoxelFlagsBuffer = FlagsSRV;
|
||||||
PassParameters->DeltaTime = DeltaTime;
|
Parameters->OutputTemperatureBuffer = OutputTempUAV;
|
||||||
|
Parameters->OutputPlasticityBuffer = OutputPlasticityUAV;
|
||||||
// 创建SRV和UAV(使用正确注册的RDG资源)
|
|
||||||
PassParameters->InputTemperatureBuffer = GraphBuilder.CreateSRV(FRDGBufferSRVDesc(InputTempRDG, PF_R32_FLOAT));
|
|
||||||
PassParameters->SurfaceVoxelFlagsBuffer = GraphBuilder.CreateSRV(FRDGBufferSRVDesc(FlagsRDG, PF_R32_UINT));
|
|
||||||
PassParameters->OutputTemperatureBuffer = GraphBuilder.CreateUAV(FRDGBufferUAVDesc(OutputTempRDG, PF_R32_FLOAT));
|
|
||||||
PassParameters->OutputPlasticityBuffer = GraphBuilder.CreateUAV(FRDGBufferUAVDesc(PlasticityRDG, PF_R32_FLOAT));
|
|
||||||
|
|
||||||
UE_LOG(LogTemp, Log, TEXT("DynamicIronBlock [RenderThread]: Shader parameters set, calculating group count..."));
|
|
||||||
|
|
||||||
// 计算线程组数量
|
// 计算线程组数量
|
||||||
FIntVector GroupSize = FTemperatureComputeShader::GetGroupSize();
|
FIntVector GroupSize = FTemperatureComputeShader::GetGroupSize();
|
||||||
@@ -1387,21 +1394,24 @@ void ADynamicIronBlock::DispatchTemperatureCompute(float DeltaTime)
|
|||||||
FMath::DivideAndRoundUp(Resolution.Z, GroupSize.Z)
|
FMath::DivideAndRoundUp(Resolution.Z, GroupSize.Z)
|
||||||
);
|
);
|
||||||
|
|
||||||
UE_LOG(LogTemp, Log, TEXT("DynamicIronBlock [RenderThread]: GroupCount=(%d,%d,%d), adding compute pass..."),
|
UE_LOG(LogTemp, Log, TEXT("DynamicIronBlock [RenderThread]: GroupCount=(%d,%d,%d), dispatching..."),
|
||||||
GroupCount.X, GroupCount.Y, GroupCount.Z);
|
GroupCount.X, GroupCount.Y, GroupCount.Z);
|
||||||
|
|
||||||
// 添加计算Pass
|
// 添加Compute Pass并调度(RDG自动处理资源状态转换与屏障)
|
||||||
FComputeShaderUtils::AddPass(
|
GraphBuilder.AddPass(
|
||||||
GraphBuilder,
|
RDG_EVENT_NAME("TemperatureCompute"),
|
||||||
RDG_EVENT_NAME("TemperatureConduction"),
|
Parameters,
|
||||||
ComputeShader,
|
ERDGPassFlags::Compute,
|
||||||
PassParameters,
|
[ComputeShader, Parameters, GroupCount](FRHIComputeCommandList& CommandList)
|
||||||
GroupCount
|
{
|
||||||
);
|
FComputeShaderUtils::Dispatch(
|
||||||
|
CommandList,
|
||||||
|
ComputeShader,
|
||||||
|
*Parameters,
|
||||||
|
GroupCount);
|
||||||
|
});
|
||||||
|
|
||||||
UE_LOG(LogTemp, Log, TEXT("DynamicIronBlock [RenderThread]: Compute pass added, executing RDG..."));
|
// 执行RDG图(编译并提交到RHI命令列表)
|
||||||
|
|
||||||
// 执行RDG,自动处理资源转换和同步
|
|
||||||
GraphBuilder.Execute();
|
GraphBuilder.Execute();
|
||||||
|
|
||||||
UE_LOG(LogTemp, Log, TEXT("DynamicIronBlock: Temperature compute dispatched successfully (%d x %d x %d groups)"),
|
UE_LOG(LogTemp, Log, TEXT("DynamicIronBlock: Temperature compute dispatched successfully (%d x %d x %d groups)"),
|
||||||
|
|||||||
@@ -8,8 +8,9 @@ public class BladeSmithEditorTarget : TargetRules
|
|||||||
public BladeSmithEditorTarget(TargetInfo Target) : base(Target)
|
public BladeSmithEditorTarget(TargetInfo Target) : base(Target)
|
||||||
{
|
{
|
||||||
Type = TargetType.Editor;
|
Type = TargetType.Editor;
|
||||||
DefaultBuildSettings = BuildSettingsVersion.V5;
|
DefaultBuildSettings = BuildSettingsVersion.V7;
|
||||||
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_5;
|
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_8;
|
||||||
|
CppStandard = CppStandardVersion.Cpp20;
|
||||||
ExtraModuleNames.Add("BladeSmith");
|
ExtraModuleNames.Add("BladeSmith");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://opencode.ai/config.json",
|
||||||
|
"mcp": {
|
||||||
|
"unreal-mcp": {
|
||||||
|
"type": "remote",
|
||||||
|
"url": "http://127.0.0.1:8000/mcp",
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user