换了个模型

This commit is contained in:
zhangqing
2025-11-13 19:11:35 +08:00
parent fcc1641189
commit 9d92b65af6
7 changed files with 19 additions and 14 deletions
File diff suppressed because one or more lines are too long
Binary file not shown.
+11 -11
View File
@@ -136,7 +136,7 @@ void AIronBlock::InitializePositionTexture()
// GetStaticMeshVertexPositions(VertexPositions); // GetStaticMeshVertexPositions(VertexPositions);
// 创建位置纹理 // 创建位置纹理
const int32 TextureSize = 1024; // 纹理尺寸 const int32 TextureSize = TexSize; // 纹理尺寸
// TArray<FLinearColor> InitialData; // TArray<FLinearColor> InitialData;
// InitialData.SetNum(TextureSize * TextureSize); // InitialData.SetNum(TextureSize * TextureSize);
// //
@@ -273,7 +273,7 @@ void AIronBlock::OnHammerHit(const FHitResult& HitResult)
FVector2D HitUV; FVector2D HitUV;
UGameplayStatics::FindCollisionUV(HitResult,0,HitUV); UGameplayStatics::FindCollisionUV(HitResult,0,HitUV);
FVector ImpactNormal = -HitResult.ImpactNormal; FVector ImpactNormal = -HitResult.ImpactNormal;
CurrentDeformationRadius = 10.0f/1024.0f; CurrentDeformationRadius = ImpactAffectRange/TexSize;
UTextureRenderTarget2D* LastTex = nullptr; UTextureRenderTarget2D* LastTex = nullptr;
UTextureRenderTarget2D* CurTex = nullptr; UTextureRenderTarget2D* CurTex = nullptr;
if(CurrentTextureIndex == 0) if(CurrentTextureIndex == 0)
@@ -363,7 +363,7 @@ void AIronBlock::ExecuteDeformationCS()
} }
// 计算纹理UV坐标 // 计算纹理UV坐标
const int32 TexSize = ReadTarget->SizeX; const int32 _TexSize = ReadTarget->SizeX;
FVector2D ImpactUV( FVector2D ImpactUV(
(CurrentImpactPoint.X - LocalBounds.Min.X) / LocalBounds.GetSize().X, (CurrentImpactPoint.X - LocalBounds.Min.X) / LocalBounds.GetSize().X,
(CurrentImpactPoint.Y - LocalBounds.Min.Y) / LocalBounds.GetSize().Y (CurrentImpactPoint.Y - LocalBounds.Min.Y) / LocalBounds.GetSize().Y
@@ -387,10 +387,10 @@ void AIronBlock::ExecuteDeformationCS()
// 计算更新区域 (只更新受影响部分) // 计算更新区域 (只更新受影响部分)
//const float RadiusRatio = CurrentDeformationRadius / LocalBounds.GetExtent().GetMax(); //const float RadiusRatio = CurrentDeformationRadius / LocalBounds.GetExtent().GetMax();
FIntRect UpdateRegion; FIntRect UpdateRegion;
UpdateRegion.Min.X = FMath::Clamp(FMath::FloorToInt((ImpactUV.X - RadiusRatio) * TexSize), 0, TexSize - 1); UpdateRegion.Min.X = FMath::Clamp(FMath::FloorToInt((ImpactUV.X - RadiusRatio) * _TexSize), 0, _TexSize - 1);
UpdateRegion.Min.Y = FMath::Clamp(FMath::FloorToInt((ImpactUV.Y - RadiusRatio) * TexSize), 0, TexSize - 1); UpdateRegion.Min.Y = FMath::Clamp(FMath::FloorToInt((ImpactUV.Y - RadiusRatio) * _TexSize), 0, _TexSize - 1);
UpdateRegion.Max.X = FMath::Clamp(FMath::CeilToInt((ImpactUV.X + RadiusRatio) * TexSize), 1, TexSize); UpdateRegion.Max.X = FMath::Clamp(FMath::CeilToInt((ImpactUV.X + RadiusRatio) * _TexSize), 1, _TexSize);
UpdateRegion.Max.Y = FMath::Clamp(FMath::CeilToInt((ImpactUV.Y + RadiusRatio) * TexSize), 1, TexSize); UpdateRegion.Max.Y = FMath::Clamp(FMath::CeilToInt((ImpactUV.Y + RadiusRatio) * _TexSize), 1, _TexSize);
// 确保 Min < Max // 确保 Min < Max
if (UpdateRegion.Min.X >= UpdateRegion.Max.X) UpdateRegion.Max.X = UpdateRegion.Min.X + 1; if (UpdateRegion.Min.X >= UpdateRegion.Max.X) UpdateRegion.Max.X = UpdateRegion.Min.X + 1;
@@ -399,8 +399,8 @@ void AIronBlock::ExecuteDeformationCS()
// 临时代码,先更新全部区域 // 临时代码,先更新全部区域
UpdateRegion.Min.X = 0; UpdateRegion.Min.X = 0;
UpdateRegion.Min.Y = 0; UpdateRegion.Min.Y = 0;
UpdateRegion.Max.X = TexSize; UpdateRegion.Max.X = _TexSize;
UpdateRegion.Max.Y = TexSize; UpdateRegion.Max.Y = _TexSize;
// --- 关键修改:使用 RDG --- // --- 关键修改:使用 RDG ---
ENQUEUE_RENDER_COMMAND(ExecuteDeformationCS_RDG)( ENQUEUE_RENDER_COMMAND(ExecuteDeformationCS_RDG)(
@@ -414,7 +414,7 @@ void AIronBlock::ExecuteDeformationCS()
CurrentDeformationRadius = this->CurrentDeformationRadius, CurrentDeformationRadius = this->CurrentDeformationRadius,
CurrentPlasticity = this->CurrentPlasticity, CurrentPlasticity = this->CurrentPlasticity,
UpdateRegion, // UpdateRegion, //
TexSize // _TexSize //
](FRHICommandListImmediate& RHICmdList) ](FRHICommandListImmediate& RHICmdList)
{ {
// 1. 创建 RDG Builder // 1. 创建 RDG Builder
@@ -439,7 +439,7 @@ void AIronBlock::ExecuteDeformationCS()
Params->DeformationRadius = CurrentDeformationRadius; Params->DeformationRadius = CurrentDeformationRadius;
Params->Plasticity = CurrentPlasticity; Params->Plasticity = CurrentPlasticity;
Params->UpdateRegionParam = FIntVector4(UpdateRegion.Min.X, UpdateRegion.Min.Y, UpdateRegion.Max.X, UpdateRegion.Max.Y); Params->UpdateRegionParam = FIntVector4(UpdateRegion.Min.X, UpdateRegion.Min.Y, UpdateRegion.Max.X, UpdateRegion.Max.Y);
Params->TextureSize = FIntVector(TexSize, TexSize, 1); Params->TextureSize = FIntVector(_TexSize, _TexSize, 1);
UE_LOG(LogTemp,Display,TEXT("[AIronBlock::ExecuteDeformationCS]ImpactForce:%f, ImpactPoint:%s,ImpactNormal:%s,DeformationRadius:%f,Plasticity:%f,UpdateRegion:%s") UE_LOG(LogTemp,Display,TEXT("[AIronBlock::ExecuteDeformationCS]ImpactForce:%f, ImpactPoint:%s,ImpactNormal:%s,DeformationRadius:%f,Plasticity:%f,UpdateRegion:%s")
,Params->ImpactForce,*Params->ImpactPoint.ToString(),*Params->ImpactNormal.ToString(),Params->DeformationRadius,Params->Plasticity,*Params->UpdateRegionParam.ToString()); ,Params->ImpactForce,*Params->ImpactPoint.ToString(),*Params->ImpactNormal.ToString(),Params->DeformationRadius,Params->Plasticity,*Params->UpdateRegionParam.ToString());
+5 -1
View File
@@ -38,7 +38,11 @@ class BLADESMITH_API AIronBlock : public AActor
UPROPERTY(EditAnywhere) UPROPERTY(EditAnywhere)
float ImpactForce; float ImpactForce;
UPROPERTY(EditAnywhere)
float ImpactAffectRange;
UPROPERTY(EditAnywhere)
float TexSize;
public: public:
// Sets default values for this actor's properties // Sets default values for this actor's properties
AIronBlock(); AIronBlock();