From f644a330aa50c97b445552d8aab2f34aae852a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20M=C3=B6rk?= Date: Wed, 20 May 2026 08:35:15 +0200 Subject: [PATCH 01/23] Initial non-working DeformableTerrainWheel made by friend --- AGXUnity/Model/DeformableTerrainMaterial.cs | 326 ++++++++++++++++++ AGXUnity/Model/DeformableTerrainWheel.cs | 218 ++++++++++++ AGXUnity/Model/DeformableTerrainWheel.cs.meta | 2 + ...nity+Model+DeformableTerrainWheelEditor.cs | 9 + ...Model+DeformableTerrainWheelEditor.cs.meta | 2 + Plugins/x86_64/agxDotNet.dll | Bin 14225920 -> 16799744 bytes 6 files changed, 557 insertions(+) create mode 100644 AGXUnity/Model/DeformableTerrainWheel.cs create mode 100644 AGXUnity/Model/DeformableTerrainWheel.cs.meta create mode 100644 Editor/CustomEditors/AGXUnity+Model+DeformableTerrainWheelEditor.cs create mode 100644 Editor/CustomEditors/AGXUnity+Model+DeformableTerrainWheelEditor.cs.meta diff --git a/AGXUnity/Model/DeformableTerrainMaterial.cs b/AGXUnity/Model/DeformableTerrainMaterial.cs index f0831f6c..48266306 100644 --- a/AGXUnity/Model/DeformableTerrainMaterial.cs +++ b/AGXUnity/Model/DeformableTerrainMaterial.cs @@ -996,6 +996,332 @@ public float ExcavationStiffnessMultiplier } #endregion + #region Terramechanics Properties + [SerializeField] + private float m_sinkageExponentParameterA = 0.0f; + + /// + /// Sinkage exponent parameter A for the terramechanics pressure-sinkage model. + /// + [InspectorGroupBegin( Name = "Terramechanics Properties" )] + [Tooltip( "Sinkage exponent parameter A for the terramechanics pressure-sinkage model." )] + public float SinkageExponentParameterA + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getSinkageExponentParameterA() ) : + m_sinkageExponentParameterA; + } + set + { + m_sinkageExponentParameterA = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setSinkageExponentParameterA( m_sinkageExponentParameterA ); + } + } + + [SerializeField] + private float m_sinkageExponentParameterB = 0.0f; + + /// + /// Sinkage exponent parameter B for the terramechanics pressure-sinkage model. + /// + [Tooltip( "Sinkage exponent parameter B for the terramechanics pressure-sinkage model." )] + public float SinkageExponentParameterB + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getSinkageExponentParameterB() ) : + m_sinkageExponentParameterB; + } + set + { + m_sinkageExponentParameterB = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setSinkageExponentParameterB( m_sinkageExponentParameterB ); + } + } + + [SerializeField] + private float m_shearModulusTangentialParameterA = 0.0f; + + /// + /// Tangential (longitudinal) shear modulus parameter A for the terramechanics model. + /// + [Tooltip( "Tangential (longitudinal) shear modulus parameter A for the terramechanics model." )] + public float ShearModulusTangentialParameterA + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getShearModulusTangentialParameterA() ) : + m_shearModulusTangentialParameterA; + } + set + { + m_shearModulusTangentialParameterA = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setShearModulusTangentialParameterA( m_shearModulusTangentialParameterA ); + } + } + + [SerializeField] + private float m_shearModulusTangentialParameterB = 0.0f; + + /// + /// Tangential (longitudinal) shear modulus parameter B for the terramechanics model. + /// + [Tooltip( "Tangential (longitudinal) shear modulus parameter B for the terramechanics model." )] + public float ShearModulusTangentialParameterB + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getShearModulusTangentialParameterB() ) : + m_shearModulusTangentialParameterB; + } + set + { + m_shearModulusTangentialParameterB = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setShearModulusTangentialParameterB( m_shearModulusTangentialParameterB ); + } + } + + [SerializeField] + private float m_shearModulusLateralParameterA = 0.0f; + + /// + /// Lateral shear modulus parameter A for the terramechanics model. + /// + [Tooltip( "Lateral shear modulus parameter A for the terramechanics model." )] + public float ShearModulusLateralParameterA + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getShearModulusLateralParameterA() ) : + m_shearModulusLateralParameterA; + } + set + { + m_shearModulusLateralParameterA = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setShearModulusLateralParameterA( m_shearModulusLateralParameterA ); + } + } + + [SerializeField] + private float m_shearModulusLateralParameterB = 0.0f; + + /// + /// Lateral shear modulus parameter B for the terramechanics model. + /// + [Tooltip( "Lateral shear modulus parameter B for the terramechanics model." )] + public float ShearModulusLateralParameterB + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getShearModulusLateralParameterB() ) : + m_shearModulusLateralParameterB; + } + set + { + m_shearModulusLateralParameterB = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setShearModulusLateralParameterB( m_shearModulusLateralParameterB ); + } + } + + [SerializeField] + private float m_cohesiveModulusBekker = 0.0f; + + /// + /// Cohesive modulus (kc) in the Bekker pressure-sinkage model (Pa/m^n). + /// + [Tooltip( "Cohesive modulus (kc) in the Bekker pressure-sinkage model." )] + public float CohesiveModulusBekker + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getCohesiveModulusBekker() ) : + m_cohesiveModulusBekker; + } + set + { + m_cohesiveModulusBekker = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setCohesiveModulusBekker( m_cohesiveModulusBekker ); + } + } + + [SerializeField] + private float m_frictionalModulusBekker = 0.0f; + + /// + /// Frictional modulus (kphi) in the Bekker pressure-sinkage model (Pa/m^(n+1)). + /// + [Tooltip( "Frictional modulus (kphi) in the Bekker pressure-sinkage model." )] + public float FrictionalModulusBekker + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getFrictionalModulusBekker() ) : + m_frictionalModulusBekker; + } + set + { + m_frictionalModulusBekker = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setFrictionalModulusBekker( m_frictionalModulusBekker ); + } + } + + [SerializeField] + private float m_cohesiveModulusReece = 0.0f; + + /// + /// Cohesive modulus (ck) in the Reece pressure-sinkage model (Pa). + /// + [Tooltip( "Cohesive modulus (ck) in the Reece pressure-sinkage model." )] + public float CohesiveModulusReece + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getCohesiveModulusReece() ) : + m_cohesiveModulusReece; + } + set + { + m_cohesiveModulusReece = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setCohesiveModulusReece( m_cohesiveModulusReece ); + } + } + + [SerializeField] + private float m_frictionalModulusReece = 0.0f; + + /// + /// Frictional modulus (cgamma) in the Reece pressure-sinkage model (Pa). + /// + [Tooltip( "Frictional modulus (cgamma) in the Reece pressure-sinkage model." )] + public float FrictionalModulusReece + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getFrictionalModulusReece() ) : + m_frictionalModulusReece; + } + set + { + m_frictionalModulusReece = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setFrictionalModulusReece( m_frictionalModulusReece ); + } + } + + [SerializeField] + private float m_maximumNormalStressAngleParameterA = 0.0f; + + /// + /// Parameter A for the maximum normal stress angle in the terramechanics model. + /// + [Tooltip( "Parameter A for the maximum normal stress angle in the terramechanics model." )] + public float MaximumNormalStressAngleParameterA + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getMaximumNormalStressAngleParameterA() ) : + m_maximumNormalStressAngleParameterA; + } + set + { + m_maximumNormalStressAngleParameterA = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setMaximumNormalStressAngleParameterA( m_maximumNormalStressAngleParameterA ); + } + } + + [SerializeField] + private float m_maximumNormalStressAngleParameterB = 0.0f; + + /// + /// Parameter B for the maximum normal stress angle in the terramechanics model. + /// + [Tooltip( "Parameter B for the maximum normal stress angle in the terramechanics model." )] + public float MaximumNormalStressAngleParameterB + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getMaximumNormalStressAngleParameterB() ) : + m_maximumNormalStressAngleParameterB; + } + set + { + m_maximumNormalStressAngleParameterB = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setMaximumNormalStressAngleParameterB( m_maximumNormalStressAngleParameterB ); + } + } + + [SerializeField] + private float m_rearAngleParameterA = 0.0f; + + /// + /// Parameter A for the rear contact angle in the terramechanics model. + /// + [Tooltip( "Parameter A for the rear contact angle in the terramechanics model." )] + public float RearAngleParameterA + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getRearAngleParameterA() ) : + m_rearAngleParameterA; + } + set + { + m_rearAngleParameterA = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setRearAngleParameterA( m_rearAngleParameterA ); + } + } + + [SerializeField] + private float m_rearAngleParameterB = 0.0f; + + /// + /// Parameter B for the rear contact angle in the terramechanics model. + /// + [InspectorGroupEnd] + [Tooltip( "Parameter B for the rear contact angle in the terramechanics model." )] + public float RearAngleParameterB + { + get + { + return m_temporaryNative != null ? + Convert.ToSingle( m_temporaryNative.getTerramechanicsProperties().getRearAngleParameterB() ) : + m_rearAngleParameterB; + } + set + { + m_rearAngleParameterB = value; + if ( Native != null ) + Native.getTerramechanicsProperties().setRearAngleParameterB( m_rearAngleParameterB ); + } + } + #endregion + /// /// Assign new preset name without updating any values. /// diff --git a/AGXUnity/Model/DeformableTerrainWheel.cs b/AGXUnity/Model/DeformableTerrainWheel.cs new file mode 100644 index 00000000..363ff552 --- /dev/null +++ b/AGXUnity/Model/DeformableTerrainWheel.cs @@ -0,0 +1,218 @@ +using System.Linq; +using UnityEngine; + +namespace AGXUnity.Model +{ + [AddComponentMenu( "AGXUnity/Deformable Terrain Wheel" )] + [DisallowMultipleComponent] + [RequireComponent( typeof( RigidBody ) )] + [HelpURL( "https://us.download.algoryx.se/AGXUnity/documentation/current/editor_interface.html#deformable-terrain-wheel" )] + public class DeformableTerrainWheel : ScriptComponent + { + /// + /// Native instance of this terrain wheel. + /// + [HideInInspector] + public agxTerrain.TerrainWheel Native { get; private set; } = null; + + /// + /// Rigid body component of this terrain wheel. + /// + public RigidBody RigidBody { get { return m_rb ?? ( m_rb = GetComponent() ); } } + + [SerializeField] + private bool m_enableTerrainDeformation = true; + + /// + /// Determines whether this terrain wheel deforms the terrain it is in contact with. + /// + public bool EnableTerrainDeformation + { + get + { + return Native != null ? + Native.getWheelDeformationProperties().getEnableDeformation() : + m_enableTerrainDeformation; + } + set + { + m_enableTerrainDeformation = value; + if ( Native != null ) + Native.getWheelDeformationProperties().setEnableDeformation( m_enableTerrainDeformation ); + } + } + + [SerializeField] + private bool m_enableTerrainDisplacement = true; + + /// + /// Determines whether this terrain wheel displaces terrain soil to create ridges. + /// + public bool EnableTerrainDisplacement + { + get + { + return Native != null ? + Native.getWheelDeformationProperties().getEnableDisplacement() : + m_enableTerrainDisplacement; + } + set + { + m_enableTerrainDisplacement = value; + if ( Native != null ) + Native.getWheelDeformationProperties().setEnableDisplacement( m_enableTerrainDisplacement ); + } + } + + [SerializeField] + private float m_slipRatioVxThreshold = 0.01f; + + /// + /// Longitudinal velocity threshold for the slip-ratio dead-band (rad/s angular equivalent). + /// The slip ratio is clamped to zero when both the longitudinal and rotational speeds are + /// below their respective thresholds. + /// + [ClampAboveZeroInInspector( true )] + public float SlipRatioVxThreshold + { + get + { + return Native != null ? + (float)Native.getTerrainWheelSettings().getSlipRatioVxAngularEquivalentThreshold() : + m_slipRatioVxThreshold; + } + set + { + m_slipRatioVxThreshold = value; + if ( Native != null ) + Native.getTerrainWheelSettings().setSlipRatioVxAngularEquivalentThreshold( m_slipRatioVxThreshold ); + } + } + + [SerializeField] + private float m_slipRatioOmegaYRThreshold = 0.01f; + + /// + /// Rotational speed threshold for the slip-ratio dead-band (rad/s). + /// Corresponds to |omegaY| in the slip-ratio logic. + /// + [ClampAboveZeroInInspector( true )] + public float SlipRatioOmegaYRThreshold + { + get + { + return Native != null ? + (float)Native.getTerrainWheelSettings().getSlipRatioOmegaYThreshold() : + m_slipRatioOmegaYRThreshold; + } + set + { + m_slipRatioOmegaYRThreshold = value; + if ( Native != null ) + Native.getTerrainWheelSettings().setSlipRatioOmegaYThreshold( m_slipRatioOmegaYRThreshold ); + } + } + + [SerializeField] + private float m_slipRatioSmoothingSpeed = 0.0001f; + + /// + /// Minimum angular speed used to smooth the slip-ratio computation near standstill (rad/s). + /// + [ClampAboveZeroInInspector( true )] + public float SlipRatioSmoothingSpeed + { + get + { + return Native != null ? + (float)Native.getTerrainWheelSettings().getSlipRatioSmoothingAngularSpeed() : + m_slipRatioSmoothingSpeed; + } + set + { + m_slipRatioSmoothingSpeed = value; + if ( Native != null ) + Native.getTerrainWheelSettings().setSlipRatioSmoothingAngularSpeed( m_slipRatioSmoothingSpeed ); + } + } + + [SerializeField] + private bool m_enableComputeRearAngleFromFrontAngle = false; + + /// + /// When enabled, the rear contact angle theta_r is derived from the front contact angle + /// theta_f using an empirical slip-dependent relation rather than from wheel-terrain geometry. + /// + public bool EnableComputeRearAngleFromFrontAngle + { + get + { + return Native != null ? + Native.getTerrainWheelSettings().getEnableComputeRearAngleFromFrontAngle() : + m_enableComputeRearAngleFromFrontAngle; + } + set + { + m_enableComputeRearAngleFromFrontAngle = value; + if ( Native != null ) + Native.getTerrainWheelSettings().setEnableComputeRearAngleFromFrontAngle( m_enableComputeRearAngleFromFrontAngle ); + } + } + + protected override bool Initialize() + { + var rb = RigidBody?.GetInitialized()?.Native; + if ( rb == null ) { + Debug.LogWarning( "Unable to find RigidBody component for DeformableTerrainWheel - wheel instance ignored.", this ); + return false; + } + + var cylinders = RigidBody.GetComponentsInChildren() + .Where( c => c.GetComponentInParent() == RigidBody ) + .ToArray(); + + if ( cylinders.Length != 1 ) { + Debug.LogWarning( $"DeformableTerrainWheel requires exactly 1 Cylinder shape in the RigidBody, found {cylinders.Length}.", this ); + return false; + } + + cylinders[ 0 ].GetInitialized(); + var cylinder = cylinders[ 0 ].Native; + if ( cylinder == null ) { + Debug.LogWarning( "Unable to initialize Cylinder shape for DeformableTerrainWheel.", this ); + return false; + } + + Native = new agxTerrain.TerrainWheel( cylinder ); + + Native.getWheelDeformationProperties().setEnableDeformation( m_enableTerrainDeformation ); + Native.getWheelDeformationProperties().setEnableDisplacement( m_enableTerrainDisplacement ); + Native.getTerrainWheelSettings().setSlipRatioVxAngularEquivalentThreshold( m_slipRatioVxThreshold ); + Native.getTerrainWheelSettings().setSlipRatioOmegaYThreshold( m_slipRatioOmegaYRThreshold ); + Native.getTerrainWheelSettings().setSlipRatioSmoothingAngularSpeed( m_slipRatioSmoothingSpeed ); + Native.getTerrainWheelSettings().setEnableComputeRearAngleFromFrontAngle( m_enableComputeRearAngleFromFrontAngle ); + + GetSimulation().add( Native ); + + return true; + } + + protected override void OnDestroy() + { + if ( Simulation.HasInstance ) + GetSimulation().remove( Native ); + + Native = null; + + base.OnDestroy(); + } + + private void Reset() + { + if ( GetComponent() == null ) + Debug.LogError( "Component: DeformableTerrainWheel requires a RigidBody component.", this ); + } + + private RigidBody m_rb = null; + } +} diff --git a/AGXUnity/Model/DeformableTerrainWheel.cs.meta b/AGXUnity/Model/DeformableTerrainWheel.cs.meta new file mode 100644 index 00000000..7bf32889 --- /dev/null +++ b/AGXUnity/Model/DeformableTerrainWheel.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0ef20e2b7f2fff54596db2b96fc1f69e \ No newline at end of file diff --git a/Editor/CustomEditors/AGXUnity+Model+DeformableTerrainWheelEditor.cs b/Editor/CustomEditors/AGXUnity+Model+DeformableTerrainWheelEditor.cs new file mode 100644 index 00000000..d902f6a3 --- /dev/null +++ b/Editor/CustomEditors/AGXUnity+Model+DeformableTerrainWheelEditor.cs @@ -0,0 +1,9 @@ +using UnityEditor; + +namespace AGXUnityEditor.Editors +{ + [CustomEditor( typeof( AGXUnity.Model.DeformableTerrainWheel ) )] + [CanEditMultipleObjects] + public class AGXUnityModelDeformableTerrainWheelEditor : InspectorEditor + { } +} diff --git a/Editor/CustomEditors/AGXUnity+Model+DeformableTerrainWheelEditor.cs.meta b/Editor/CustomEditors/AGXUnity+Model+DeformableTerrainWheelEditor.cs.meta new file mode 100644 index 00000000..a37fb5e8 --- /dev/null +++ b/Editor/CustomEditors/AGXUnity+Model+DeformableTerrainWheelEditor.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 70585192bc24f4a40ad7f9d25af315d1 \ No newline at end of file diff --git a/Plugins/x86_64/agxDotNet.dll b/Plugins/x86_64/agxDotNet.dll index 51be13f1ae583d2ec2728439068a77ee4cf88161..dbaa7c42c198d2a9131fcdb9acab8e2bf1dc05fc 100644 GIT binary patch literal 16799744 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