243 lines
9.5 KiB
C++
243 lines
9.5 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "ChaosClothAsset/SimulationBendingConfigNode.h"
|
|
#include "Chaos/CollectionPropertyFacade.h"
|
|
|
|
#include UE_INLINE_GENERATED_CPP_BY_NAME(SimulationBendingConfigNode)
|
|
|
|
FChaosClothAssetSimulationBendingConfigNode::FChaosClothAssetSimulationBendingConfigNode(const UE::Dataflow::FNodeParameters& InParam, FGuid InGuid)
|
|
: FChaosClothAssetSimulationBaseConfigNode(InParam, InGuid)
|
|
{
|
|
RegisterCollectionConnections();
|
|
RegisterInputConnection(&FlatnessRatio.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
RegisterInputConnection(&RestAngle.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
RegisterInputConnection(&BendingStiffness.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
RegisterInputConnection(&BendingStiffnessWarp.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
RegisterInputConnection(&BendingStiffnessWeft.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
RegisterInputConnection(&BendingStiffnessBias.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
RegisterInputConnection(&BendingDamping.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
RegisterInputConnection(&BendingAnisoDamping.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
RegisterInputConnection(&AnisoBucklingRatio.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
RegisterInputConnection(&BucklingStiffness.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
RegisterInputConnection(&BucklingStiffnessWarp.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
RegisterInputConnection(&BucklingStiffnessWeft.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
RegisterInputConnection(&BucklingStiffnessBias.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
RegisterInputConnection(&BucklingRatioWeighted.WeightMap)
|
|
.SetCanHidePin(true)
|
|
.SetPinIsHidden(true);
|
|
}
|
|
|
|
void FChaosClothAssetSimulationBendingConfigNode::AddProperties(FPropertyHelper& PropertyHelper) const
|
|
{
|
|
if(SolverType == EChaosClothAssetConstraintSolverType::XPBD)
|
|
{
|
|
if(DistributionType == EChaosClothAssetConstraintDistributionType::Isotropic)
|
|
{
|
|
if(ConstraintType == EChaosClothAssetBendingConstraintType::FacesSpring)
|
|
{
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("XPBDBendingSpringStiffness")), BendingStiffness,{
|
|
FName(TEXT("XPBDBendingElementStiffness")),
|
|
FName(TEXT("XPBDAnisoBendingStiffnessWarp")),
|
|
FName(TEXT("BendingSpringStiffness")),
|
|
FName(TEXT("BendingElementStiffness"))});
|
|
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("XPBDBendingSpringDamping")), BendingDamping,{
|
|
FName(TEXT("XPBDBendingElementDamping")),
|
|
FName(TEXT("XPBDAnisoBendingDamping"))});
|
|
}
|
|
else
|
|
{
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("XPBDBendingElementStiffness")), BendingStiffness,{
|
|
FName(TEXT("XPBDBendingSpringStiffness")),
|
|
FName(TEXT("XPBDAnisoBendingStiffnessWarp")),
|
|
FName(TEXT("BendingSpringStiffness")),
|
|
FName(TEXT("BendingElementStiffness"))});
|
|
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("XPBDBendingElementDamping")), BendingDamping,{
|
|
FName(TEXT("XPBDBendingSpringDamping")),
|
|
FName(TEXT("XPBDAnisoBendingDamping"))});
|
|
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("XPBDBucklingStiffness")), BucklingStiffness,{
|
|
FName(TEXT("XPBDAnisoBucklingStiffnessWarp")),
|
|
FName(TEXT("BucklingStiffness"))});
|
|
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("XPBDBucklingRatio")), BucklingRatioWeighted, {
|
|
FName(TEXT("XPBDAnisoBucklingRatio")),
|
|
FName(TEXT("BucklingRatio"))});
|
|
}
|
|
PropertyHelper.SetPropertyEnum(FName(TEXT("XPBDRestAngleType")), RestAngleType, {
|
|
FName(TEXT("XPBDAnisoRestAngleType")),
|
|
FName(TEXT("RestAngleType"))
|
|
}, ECollectionPropertyFlags::None);
|
|
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("XPBDFlatnessRatio")), FlatnessRatio, {
|
|
FName(TEXT("XPBDAnisoFlatnessRatio")),
|
|
FName(TEXT("FlatnessRatio"))
|
|
});
|
|
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("XPBDRestAngle")), RestAngle, {
|
|
FName(TEXT("XPBDAnisoRestAngle")),
|
|
FName(TEXT("RestAngle"))
|
|
});
|
|
}
|
|
else
|
|
{
|
|
PropertyHelper.SetFabricPropertyWeighted(FName(TEXT("XPBDAnisoBendingStiffnessWarp")), BendingStiffnessWarp, [](
|
|
const UE::Chaos::ClothAsset::FCollectionClothFabricFacade& FabricFacade)-> float
|
|
{
|
|
return FabricFacade.GetBendingStiffness().Warp;
|
|
}, {
|
|
FName(TEXT("BendingSpringStiffness")),
|
|
FName(TEXT("BendingElementStiffness")),
|
|
FName(TEXT("XPBDBendingSpringStiffness")),
|
|
FName(TEXT("XPBDBendingElementStiffness"))});
|
|
|
|
PropertyHelper.SetFabricPropertyWeighted(FName(TEXT("XPBDAnisoBendingStiffnessWeft")), BendingStiffnessWeft, [](
|
|
const UE::Chaos::ClothAsset::FCollectionClothFabricFacade& FabricFacade)-> float
|
|
{
|
|
return FabricFacade.GetBendingStiffness().Weft;
|
|
}, {});
|
|
|
|
PropertyHelper.SetFabricPropertyWeighted(FName(TEXT("XPBDAnisoBendingStiffnessBias")), BendingStiffnessBias, [](
|
|
const UE::Chaos::ClothAsset::FCollectionClothFabricFacade& FabricFacade)-> float
|
|
{
|
|
return FabricFacade.GetBendingStiffness().Bias;
|
|
}, {});
|
|
|
|
PropertyHelper.SetFabricPropertyWeighted(FName(TEXT("XPBDAnisoBucklingStiffnessWarp")), BucklingStiffnessWarp, [](
|
|
const UE::Chaos::ClothAsset::FCollectionClothFabricFacade& FabricFacade)-> float
|
|
{
|
|
return FabricFacade.GetBucklingRatio() > UE_SMALL_NUMBER ? FabricFacade.GetBucklingStiffness().Warp : FabricFacade.GetBendingStiffness().Warp;
|
|
}, {
|
|
FName(TEXT("BucklingStiffness")),
|
|
FName(TEXT("XPBDBucklingStiffness"))});
|
|
|
|
PropertyHelper.SetFabricPropertyWeighted(FName(TEXT("XPBDAnisoBucklingStiffnessWeft")), BucklingStiffnessWeft, [](
|
|
const UE::Chaos::ClothAsset::FCollectionClothFabricFacade& FabricFacade)-> float
|
|
{
|
|
return FabricFacade.GetBucklingRatio() > UE_SMALL_NUMBER ? FabricFacade.GetBucklingStiffness().Weft : FabricFacade.GetBendingStiffness().Weft;
|
|
},{});
|
|
|
|
PropertyHelper.SetFabricPropertyWeighted(FName(TEXT("XPBDAnisoBucklingStiffnessBias")), BucklingStiffnessBias, [](
|
|
const UE::Chaos::ClothAsset::FCollectionClothFabricFacade& FabricFacade)-> float
|
|
{
|
|
return FabricFacade.GetBucklingRatio() > UE_SMALL_NUMBER ? FabricFacade.GetBucklingStiffness().Bias : FabricFacade.GetBendingStiffness().Bias;
|
|
},{});
|
|
|
|
PropertyHelper.SetFabricPropertyWeighted(FName(TEXT("XPBDAnisoBendingDamping")), BendingAnisoDamping, [](
|
|
const UE::Chaos::ClothAsset::FCollectionClothFabricFacade& FabricFacade)-> float
|
|
{
|
|
return FabricFacade.GetDamping();
|
|
},{
|
|
FName(TEXT("XPBDBendingSpringDamping")),
|
|
FName(TEXT("XPBDBendingElementDamping"))});
|
|
|
|
PropertyHelper.SetFabricPropertyWeighted(FName(TEXT("XPBDAnisoBucklingRatio")), AnisoBucklingRatio, [](
|
|
const UE::Chaos::ClothAsset::FCollectionClothFabricFacade& FabricFacade)-> float
|
|
{
|
|
return FabricFacade.GetBucklingRatio();
|
|
}, {
|
|
FName(TEXT("BucklingRatio")),
|
|
FName(TEXT("XPBDBucklingRatio"))});
|
|
|
|
PropertyHelper.SetPropertyEnum(FName(TEXT("XPBDAnisoRestAngleType")), RestAngleType,{
|
|
FName(TEXT("XPBDRestAngleType")),
|
|
FName(TEXT("RestAngleType"))
|
|
}, ECollectionPropertyFlags::None);
|
|
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("XPBDAnisoFlatnessRatio")), FlatnessRatio, {
|
|
FName(TEXT("XPBDFlatnessRatio")),
|
|
FName(TEXT("FlatnessRatio"))
|
|
});
|
|
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("XPBDAnisoRestAngle")), RestAngle, {
|
|
FName(TEXT("XPBDRestAngle")),
|
|
FName(TEXT("RestAngle"))
|
|
});
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(ConstraintType == EChaosClothAssetBendingConstraintType::FacesSpring)
|
|
{
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("BendingSpringStiffness")), BendingStiffness, {
|
|
FName(TEXT("BendingElementStiffness")),
|
|
FName(TEXT("XPBDBendingSpringStiffness")),
|
|
FName(TEXT("XPBDBendingElementStiffness")),
|
|
FName(TEXT("XPBDAnisoBendingStiffnessWarp"))});
|
|
}
|
|
else
|
|
{
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("BendingElementStiffness")), BendingStiffness, {
|
|
FName(TEXT("BendingSpringStiffness")), // Existing properties to warn against
|
|
FName(TEXT("XPBDBendingSpringStiffness")),
|
|
FName(TEXT("XPBDBendingElementStiffness")),
|
|
FName(TEXT("XPBDAnisoBendingStiffnessWarp"))});
|
|
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("BucklingStiffness")), BucklingStiffness, {
|
|
FName(TEXT("XPBDBucklingStiffness")),
|
|
FName(TEXT("XPBDAnisoBucklingStiffnessWarp"))});
|
|
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("BucklingRatio")), BucklingRatioWeighted, {
|
|
FName(TEXT("XPBDBucklingRatio")),
|
|
FName(TEXT("XPBDAnisoBucklingRatio"))});
|
|
}
|
|
|
|
PropertyHelper.SetPropertyEnum(FName(TEXT("RestAngleType")), RestAngleType, {
|
|
FName(TEXT("XPBDAnisoRestAngleType")),
|
|
FName(TEXT("XPBDRestAngleType"))
|
|
}, ECollectionPropertyFlags::None);
|
|
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("FlatnessRatio")), FlatnessRatio, {
|
|
FName(TEXT("XPBDAnisoFlatnessRatio")),
|
|
FName(TEXT("XPBDFlatnessRatio"))
|
|
});
|
|
PropertyHelper.SetPropertyWeighted(FName(TEXT("RestAngle")), RestAngle, {
|
|
FName(TEXT("XPBDAnisoRestAngle")),
|
|
FName(TEXT("XPBDRestAngle"))
|
|
});
|
|
}
|
|
}
|
|
|
|
void FChaosClothAssetSimulationBendingConfigNode::Serialize(FArchive& Ar)
|
|
{
|
|
Super::Serialize(Ar);
|
|
if (Ar.IsLoading())
|
|
{
|
|
#if WITH_EDITORONLY_DATA
|
|
if (BucklingRatio_DEPRECATED != BucklingRatioDeprecatedDefault)
|
|
{
|
|
BucklingRatioWeighted.Low = BucklingRatioWeighted.High = BucklingRatio_DEPRECATED;
|
|
AnisoBucklingRatio.Low = AnisoBucklingRatio.High = BucklingRatio_DEPRECATED;
|
|
BucklingRatio_DEPRECATED = BucklingRatioDeprecatedDefault;
|
|
}
|
|
#endif
|
|
}
|
|
}
|