0b551a0c21
Fixed cloth simulation generating incorrect normals. Also added option in Cloth Component to update normals of static particles (disabled by default). User will want to keep the option disabled when continuity of the normals is important, like in characters, but for environmental cloth the mesh could look better when the normals of static particles are updated too. Enable 'Update normals of static particles' option on blind slices of Nvcloth gem Fix unit tests
135 lines
4.8 KiB
C++
135 lines
4.8 KiB
C++
/*
|
|
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
|
* its licensors.
|
|
*
|
|
* For complete copyright and license terms please see the LICENSE at the root of this
|
|
* distribution (the "License"). All use of this software is governed by the License,
|
|
* or, if provided, by the license below or the license accompanying this file. Do not
|
|
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
*
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AzCore/RTTI/RTTI.h>
|
|
#include <AzCore/Component/EntityId.h>
|
|
#include <AzCore/Math/Vector3.h>
|
|
#include <AzCore/std/function/function_template.h>
|
|
|
|
#include <Utils/AssetHelper.h>
|
|
|
|
namespace AZ
|
|
{
|
|
class ReflectContext;
|
|
}
|
|
|
|
namespace NvCloth
|
|
{
|
|
//! Configuration data for Cloth.
|
|
struct ClothConfiguration
|
|
{
|
|
AZ_CLASS_ALLOCATOR(ClothConfiguration, AZ::SystemAllocator, 0);
|
|
AZ_TYPE_INFO(ClothConfiguration, "{96E2AF5E-3C98-4872-8F90-F56302A44F2A}");
|
|
|
|
static void Reflect(AZ::ReflectContext* context);
|
|
|
|
virtual ~ClothConfiguration() = default;
|
|
|
|
bool IsUsingWorldBusGravity() const { return !m_useCustomGravity; }
|
|
bool IsUsingWindBus() const { return !m_useCustomWindVelocity; }
|
|
|
|
AZStd::string m_meshNode;
|
|
|
|
// Mass and Gravity parameters
|
|
float m_mass = 1.0f;
|
|
bool m_useCustomGravity = false;
|
|
AZ::Vector3 m_customGravity = AZ::Vector3(0.0f, 0.0f, -9.81f);
|
|
float m_gravityScale = 1.0f;
|
|
|
|
// Global stiffness frequency
|
|
float m_stiffnessFrequency = 10.0f;
|
|
|
|
// Motion constraints Parameters
|
|
float m_motionConstraintsMaxDistance = 10.0f;
|
|
float m_motionConstraintsScale = 1.0f;
|
|
float m_motionConstraintsBias = 0.0f;
|
|
float m_motionConstraintsStiffness = 1.0f;
|
|
|
|
// Backstop Parameters
|
|
float m_backstopRadius = 0.1f;
|
|
float m_backstopBackOffset = 0.0f;
|
|
float m_backstopFrontOffset = 0.0f;
|
|
|
|
// Damping parameters
|
|
AZ::Vector3 m_damping = AZ::Vector3(0.2f, 0.2f, 0.2f);
|
|
AZ::Vector3 m_linearDrag = AZ::Vector3(0.2f, 0.2f, 0.2f);
|
|
AZ::Vector3 m_angularDrag = AZ::Vector3(0.2f, 0.2f, 0.2f);
|
|
|
|
// Inertia parameters
|
|
AZ::Vector3 m_linearInteria = AZ::Vector3::CreateOne();
|
|
AZ::Vector3 m_angularInteria = AZ::Vector3::CreateOne();
|
|
AZ::Vector3 m_centrifugalInertia = AZ::Vector3::CreateOne();
|
|
|
|
// Wind parameters
|
|
bool m_useCustomWindVelocity = true;
|
|
AZ::Vector3 m_windVelocity = AZ::Vector3(0.0f, 20.0f, 0.0f);
|
|
float m_airDragCoefficient = 0.0f;
|
|
float m_airLiftCoefficient = 0.0f;
|
|
float m_fluidDensity = 1.0f;
|
|
|
|
// Collision parameters
|
|
float m_collisionFriction = 0.0f;
|
|
float m_collisionMassScale = 0.0f;
|
|
bool m_continuousCollisionDetection = false;
|
|
bool m_collisionAffectsStaticParticles = false;
|
|
|
|
// Self Collision parameters
|
|
float m_selfCollisionDistance = 0.0f;
|
|
float m_selfCollisionStiffness = 0.2f;
|
|
|
|
// Tether Constraints parameters
|
|
float m_tetherConstraintStiffness = 1.0f;
|
|
float m_tetherConstraintScale = 1.0f;
|
|
|
|
// Quality parameters
|
|
float m_solverFrequency = 300.0f;
|
|
uint32_t m_accelerationFilterIterations = 30;
|
|
bool m_removeStaticTriangles = true;
|
|
bool m_updateNormalsOfStaticParticles = false;
|
|
|
|
// Fabric phases parameters
|
|
float m_horizontalStiffness = 1.0f;
|
|
float m_horizontalStiffnessMultiplier = 0.0f;
|
|
float m_horizontalCompressionLimit = 0.0f;
|
|
float m_horizontalStretchLimit = 0.0f;
|
|
float m_verticalStiffness = 1.0f;
|
|
float m_verticalStiffnessMultiplier = 0.0f;
|
|
float m_verticalCompressionLimit = 0.0f;
|
|
float m_verticalStretchLimit = 0.0f;
|
|
float m_bendingStiffness = 1.0f;
|
|
float m_bendingStiffnessMultiplier = 0.0f;
|
|
float m_bendingCompressionLimit = 0.0f;
|
|
float m_bendingStretchLimit = 0.0f;
|
|
float m_shearingStiffness = 1.0f;
|
|
float m_shearingStiffnessMultiplier = 0.0f;
|
|
float m_shearingCompressionLimit = 0.0f;
|
|
float m_shearingStretchLimit = 0.0f;
|
|
|
|
private:
|
|
// Making private functionality related with the Editor Context reflection,
|
|
// it's unnecessary for the clients using ClothConfiguration.
|
|
friend class EditorClothComponent;
|
|
|
|
// Callback functions set by the EditorClothComponent.
|
|
AZStd::function<MeshNodeList()> m_populateMeshNodeListCallback;
|
|
AZStd::function<bool()> m_hasBackstopDataCallback;
|
|
AZStd::function<AZ::EntityId()> m_getEntityIdCallback;
|
|
|
|
// Used by data elements in EditorClothComponent edit context.
|
|
MeshNodeList PopulateMeshNodeList();
|
|
bool HasBackstopData();
|
|
AZ::EntityId GetEntityId();
|
|
};
|
|
} // namespace NvCloth
|