From 5d32bb962f6740d9dfe8d0f44840352595501017 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 11 Mar 2025 23:09:47 +0100 Subject: [PATCH] Add warning when cloth paint is incorrect size --- Source/Engine/Level/Actors/ModelInstanceActor.cpp | 5 +++++ Source/Engine/Level/Actors/ModelInstanceActor.h | 2 ++ Source/Engine/Physics/Actors/Cloth.cpp | 4 ++++ Source/Engine/Serialization/JsonTools.cpp | 2 +- 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Source/Engine/Level/Actors/ModelInstanceActor.cpp b/Source/Engine/Level/Actors/ModelInstanceActor.cpp index 6021daadc..6c770ad64 100644 --- a/Source/Engine/Level/Actors/ModelInstanceActor.cpp +++ b/Source/Engine/Level/Actors/ModelInstanceActor.cpp @@ -9,6 +9,11 @@ ModelInstanceActor::ModelInstanceActor(const SpawnParams& params) { } +String ModelInstanceActor::MeshReference::ToString() const +{ + return String::Format(TEXT("Actor={},LOD={},Mesh={}"), Actor ? Actor->GetNamePath() : String::Empty, LODIndex, MeshIndex); +} + void ModelInstanceActor::SetEntries(const Array& value) { WaitForModelLoad(); diff --git a/Source/Engine/Level/Actors/ModelInstanceActor.h b/Source/Engine/Level/Actors/ModelInstanceActor.h index f3c6cd5e1..247a51df2 100644 --- a/Source/Engine/Level/Actors/ModelInstanceActor.h +++ b/Source/Engine/Level/Actors/ModelInstanceActor.h @@ -27,6 +27,8 @@ API_CLASS(Abstract) class FLAXENGINE_API ModelInstanceActor : public Actor API_FIELD() int32 LODIndex = 0; // Index of the mesh (within the LOD). API_FIELD() int32 MeshIndex = 0; + + String ToString() const; }; protected: diff --git a/Source/Engine/Physics/Actors/Cloth.cpp b/Source/Engine/Physics/Actors/Cloth.cpp index 3b7bf6718..f9ae6b259 100644 --- a/Source/Engine/Physics/Actors/Cloth.cpp +++ b/Source/Engine/Physics/Actors/Cloth.cpp @@ -644,6 +644,7 @@ void Cloth::CalculateInvMasses(Array& invMasses) if (_paint.Count() != verticesCount) { // Fix incorrect paint data + LOG(Warning, "Incorrect cloth '{}' paint size {} for mesh '{}' that has {} vertices", GetNamePath(), _paint.Count(), mesh.ToString(), verticesCount); int32 countBefore = _paint.Count(); _paint.Resize(verticesCount); for (int32 i = countBefore; i < verticesCount; i++) @@ -781,7 +782,10 @@ bool Cloth::OnPreUpdate() if (mesh.Actor->GetMeshData(mesh, MeshBufferType::Vertex0, verticesData, verticesCount)) return false; if (verticesCount != _paint.Count()) + { + LOG(Warning, "Incorrect cloth '{}' paint size {} for mesh '{}' that has {} vertices", GetNamePath(), _paint.Count(), mesh.ToString(), verticesCount); return false; + } PROFILE_CPU_NAMED("Skinned Pose"); auto vbStride = (uint32)verticesData.Length() / verticesCount; ASSERT(vbStride == sizeof(VB0SkinnedElementType)); diff --git a/Source/Engine/Serialization/JsonTools.cpp b/Source/Engine/Serialization/JsonTools.cpp index be711f77a..b8d24c2ca 100644 --- a/Source/Engine/Serialization/JsonTools.cpp +++ b/Source/Engine/Serialization/JsonTools.cpp @@ -185,7 +185,7 @@ Ray JsonTools::GetRay(const Value& value) { return Ray( GetVector3(value, "Position", Vector3::Zero), - GetVector3(value, "Direction", Vector3::One) + GetVector3(value, "Direction", Vector3::Forward) ); }