diff --git a/WickedEngine/wiPhysics_Jolt.cpp b/WickedEngine/wiPhysics_Jolt.cpp index edf4c8692..f52f9f1ad 100644 --- a/WickedEngine/wiPhysics_Jolt.cpp +++ b/WickedEngine/wiPhysics_Jolt.cpp @@ -259,6 +259,7 @@ namespace wi::physics SoftBodySharedSettings shared_settings; Array simulation_normals; Array position_offsets; + wi::vector vertex_tangents_tmp; ~SoftBody() { @@ -517,7 +518,7 @@ namespace wi::physics settings.mFriction = physicscomponent.friction; settings.mRestitution = physicscomponent.restitution; settings.mUpdatePosition = false; - settings.mAllowSleeping = false; + settings.mAllowSleeping = !physicscomponent.IsDisableDeactivation(); settings.mUserData = (uint64_t)&physicsobject; BodyInterface& body_interface = physics_scene.physics_system.GetBodyInterface(); // locking version because this is called from job system! @@ -532,6 +533,7 @@ namespace wi::physics physicsobject.simulation_normals.resize(physicsobject.shared_settings.mVertices.size()); + physicsobject.vertex_tangents_tmp.resize(mesh.vertex_tangents.size()); physicsobject.position_offsets.resize(mesh.vertex_positions.size()); for (size_t i = 0; i < mesh.vertex_positions.size(); ++i) { @@ -1615,26 +1617,26 @@ namespace wi::physics XMFLOAT3 t; XMStoreFloat3(&t, tangent); - physicscomponent.vertex_tangents_tmp[i0].x += t.x; - physicscomponent.vertex_tangents_tmp[i0].y += t.y; - physicscomponent.vertex_tangents_tmp[i0].z += t.z; - physicscomponent.vertex_tangents_tmp[i0].w = sign; + physicsobject.vertex_tangents_tmp[i0].x += t.x; + physicsobject.vertex_tangents_tmp[i0].y += t.y; + physicsobject.vertex_tangents_tmp[i0].z += t.z; + physicsobject.vertex_tangents_tmp[i0].w = sign; - physicscomponent.vertex_tangents_tmp[i1].x += t.x; - physicscomponent.vertex_tangents_tmp[i1].y += t.y; - physicscomponent.vertex_tangents_tmp[i1].z += t.z; - physicscomponent.vertex_tangents_tmp[i1].w = sign; + physicsobject.vertex_tangents_tmp[i1].x += t.x; + physicsobject.vertex_tangents_tmp[i1].y += t.y; + physicsobject.vertex_tangents_tmp[i1].z += t.z; + physicsobject.vertex_tangents_tmp[i1].w = sign; - physicscomponent.vertex_tangents_tmp[i2].x += t.x; - physicscomponent.vertex_tangents_tmp[i2].y += t.y; - physicscomponent.vertex_tangents_tmp[i2].z += t.z; - physicscomponent.vertex_tangents_tmp[i2].w = sign; + physicsobject.vertex_tangents_tmp[i2].x += t.x; + physicsobject.vertex_tangents_tmp[i2].y += t.y; + physicsobject.vertex_tangents_tmp[i2].z += t.z; + physicsobject.vertex_tangents_tmp[i2].w = sign; } } for (size_t i = 0; i < physicscomponent.vertex_tangents_simulation.size(); ++i) { - physicscomponent.vertex_tangents_simulation[i].FromFULL(physicscomponent.vertex_tangents_tmp[i]); + physicscomponent.vertex_tangents_simulation[i].FromFULL(physicsobject.vertex_tangents_tmp[i]); } } diff --git a/WickedEngine/wiScene_Components.cpp b/WickedEngine/wiScene_Components.cpp index 25167d6f4..83dabf8cf 100644 --- a/WickedEngine/wiScene_Components.cpp +++ b/WickedEngine/wiScene_Components.cpp @@ -1496,8 +1496,12 @@ namespace wi::scene } // 3.) Find duplicated vertices by POSITION and UV0 and UV1 and ATLAS and SUBSET and remove them: - for (auto& subset : subsets) + uint32_t first_subset = 0; + uint32_t last_subset = 0; + GetLODSubsetRange(0, first_subset, last_subset); + for (uint32_t subsetIndex = first_subset; subsetIndex < last_subset; ++subsetIndex) { + const MeshComponent::MeshSubset& subset = subsets[subsetIndex]; for (uint32_t i = 0; i < subset.indexCount - 1; i++) { uint32_t ind0 = indices[subset.indexOffset + (uint32_t)i]; @@ -1980,7 +1984,6 @@ namespace wi::scene { vertex_positions_simulation.resize(mesh.vertex_positions.size()); vertex_normals_simulation.resize(mesh.vertex_normals.size()); - vertex_tangents_tmp.resize(mesh.vertex_tangents.size()); vertex_tangents_simulation.resize(mesh.vertex_tangents.size()); XMFLOAT3 _min = XMFLOAT3(std::numeric_limits::max(), std::numeric_limits::max(), std::numeric_limits::max()); diff --git a/WickedEngine/wiScene_Components.h b/WickedEngine/wiScene_Components.h index 56368cd0f..e3f8914ec 100644 --- a/WickedEngine/wiScene_Components.h +++ b/WickedEngine/wiScene_Components.h @@ -983,7 +983,6 @@ namespace wi::scene XMFLOAT4X4 worldMatrix = wi::math::IDENTITY_MATRIX; wi::vector vertex_positions_simulation; // graphics vertices after simulation (world space) wi::vector vertex_normals_simulation; - wi::vectorvertex_tangents_tmp; wi::vector vertex_tangents_simulation; wi::primitive::AABB aabb; diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index c0e3c5a26..aab69ed10 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wi::version // minor features, major updates, breaking compatibility changes const int minor = 71; // minor bug fixes, alterations, refactors, updates - const int revision = 496; + const int revision = 497; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);