====== Arma 3 Vehicle PhysX Tuning Tool Workflow ======
This page explains how to use the RKSL Arma 3 Vehicle PhysX Tuning Tool to create a first-pass ''config.cpp'' and ''model.cfg'' export for ''simulation = "carx"'' and ''simulation = "tankx"'' vehicles.
The tool is here:
* [[http://192.168.1.20/a3cartools/|RKSL Arma 3 Vehicle PhysX Tuning Tool]]
Use the tool as a structured data-entry and export aid. It does not replace in-game testing. Final values still need validation in Arma 3 using the actual P3D, memory points, geometry LOD, wheel selections, engine sound setup, and addon inheritance.
===== Source Material You Need =====
Before opening the tool, collect as much of this source material as possible.
^ Data needed ^ Best source ^ Fallback source ^
| Vehicle dimensions | Manufacturer data sheet, technical manual, or measured model dimensions | Measure in Object Builder from the P3D |
| Mass | Real vehicle combat/curb mass or project design target | Closest vanilla/mod vehicle with similar size |
| Wheel radius and width | Tyre size or model wheel mesh | Measure wheel selection in Object Builder |
| Axle positions | P3D wheel centres or memory LOD points | Even spacing from wheelbase |
| Track width | Left wheel centre to right wheel centre at each axle | Front/rear track from real spec sheet |
| Centre of gravity | Geometry LOD mass distribution and project handling target | Start near wheelbase centre, slightly forward for most road vehicles |
| Engine power and torque | Engine data sheet, dyno graph, or real vehicle manual | Tune from a similar Arma 3 vehicle |
| Gear ratios and final drive | Transmission data sheet | Use similar vehicle ratios, then test acceleration and shift points |
| Wheel memory names | P3D Memory LOD and model.cfg named selections | Use the tool defaults, then rename to match the model |
| model.cfg inheritance | Existing project model.cfg and base model class | Start from ''Car'' or the existing project base class |
===== Coordinate And Naming Rules =====
The tool assumes Arma model-space style measurements:
* Longitudinal ''Y'' is vehicle length.
* Positive ''Y'' is forward.
* Negative ''Y'' is rearward.
* Track width is measured left wheel centre to right wheel centre.
* Axle station ''Y'' is measured relative to the vehicle centre or model origin used by the project.
* Wheel radius is measured from wheel centre to tyre tread.
* Wheel width is measured across the tyre.
The generated wheel classes use two wheels per axle:
^ Tool side ^ Exported wheel class pattern ^ Meaning ^
| Left | ''L1'' to ''L10'' | Left wheels, front to rear |
| Right | ''R1'' to ''R10'' | Right wheels, front to rear |
The editable wheel base names drive these exported names:
^ Export field ^ Default pattern ^ Source ^
| ''center'' | ''{base}_axis'' | Memory point at wheel centre |
| ''boundary'' | ''{base}_bound'' | Memory point on tyre edge/radius boundary |
| ''boneName'' for CarX | ''{base}'' | Rotating visual wheel bone |
| ''boneName'' for TankX | ''{base}_damper'' | Damper bone used by TankX |
| ''suspForceAppPointOffset'' | ''{base}_axis'' or custom suffix | Suspension force application point |
| ''tireForceAppPointOffset'' | ''{base}_axis'' or custom suffix | Tyre force application point |
| model.cfg damper selection | ''{base}_damper'' | Damper translation bone/selection |
| model.cfg damper axis | ''{base}_damper_axis'' | Axis for damper translation |
| model.cfg steering selection | ''{base}_steering'' | Steering yaw bone/selection |
| model.cfg steering axis | ''{base}_steering_axis'' | Axis for visual steering |
| model.cfg rotation selection | ''{base}'' | Rotating wheel selection |
| model.cfg rotation axis | ''{base}_axis'' | Wheel rotation axis |
===== Step 1: Simulation Type =====
Open the tool and select the simulation branch first.
^ Option ^ Use when ^ Notes ^
| ''CarX wheeled vehicle'' | Cars, trucks, trailers, wheeled APCs, and ordinary steerable wheeled vehicles | Uses rotating wheel bones and standard CarX wheel steering/braking behaviour. |
| ''TankX multi-wheel/tracked vehicle'' | Tracked vehicles, skid-steer vehicles, and heavy multi-wheel vehicles where TankX behaviour is preferred | Arma 3 TankX PhysX supports up to 20 wheels, with 10 wheels per side. TankX wheels are not steerable in the normal CarX sense. |
For TankX layouts, keep all left-side wheels in one line, all right-side wheels in one line, and use the same wheel size across the driven ground-contact wheels. Add only wheels that meaningfully contact the ground. Sprockets and idlers do not need to be simulated unless they affect ground contact; if they are included and should not suspend, set ''maxCompression'' and ''maxDroop'' to ''0''.
===== Step 2: Vehicle Identity =====
==== Class Setup ====
^ Field ^ Where to find it ^ What it affects ^
| ''Class name'' | Addon naming plan or existing ''CfgVehicles'' class | Exported vehicle class name. |
| ''Inherits from'' | Existing ''config.cpp'' base class | Parent class in the generated ''CfgVehicles'' entry. |
| ''Display name'' | Vehicle naming plan | Exported ''displayName''. |
| ''maxSpeed km/h'' | Real spec sheet or design target | Exported ''maxSpeed'' and used for derived speed actions. |
| ''brakeIdleSpeed m/s'' | Start from similar vehicle config | Exported directly as ''brakeIdleSpeed''. |
Use the Arma 3 Config Viewer or source config to find a close parent vehicle. Prefer a known project base class over inheriting directly from a vanilla class if the addon already has shared vehicle base classes.
==== Model Config Export ====
^ Field ^ Where to find it ^ What it affects ^
| ''model.cfg class'' | P3D filename without ''.p3d'', or existing ''CfgModels'' class | Generated ''class CfgModels'' entry. |
| ''model parent class'' | Existing project ''model.cfg'' | Parent model class inherited by the generated model class. |
| ''skeleton class'' | Existing project skeleton naming convention | Generated ''class CfgSkeletons'' entry and ''skeletonName''. |
| ''skeleton parent class'' | Existing project ''model.cfg'' | Parent skeleton class inherited by the generated skeleton. |
| ''sections[]'' | Named selections used for hidden selections, texture swaps, damage materials, or other section-level control | Exported ''sections[]'' list. Leave blank if not needed. |
The generated ''model.cfg'' creates ''CfgSkeletons'' and ''CfgModels'' scaffolding for damper, steering, and wheel rotation animations. The exported names must match real named selections and memory axes in the P3D.
==== Throttle And Speed Actions ====
^ Field ^ Where to find it ^ What it affects ^
| ''thrustDelay s'' | Similar vehicle config, then tune in game | Engine response delay. |
| ''accelAidForceCoef'' | Similar vehicle config, then tune launch behaviour | Low-speed acceleration aid. |
| ''accelAidForceSpd m/s'' | Similar vehicle config | Speed range over which acceleration aid applies. |
| ''accelAidForceYOffset'' | Test value from similar vehicle | Longitudinal offset of acceleration aid force. |
| ''slow forward coef'' | Design target | Derived slow driver action speed. |
| ''normal forward coef'' | Design target | Derived normal driver action speed. |
| ''Source note'' | Free text | Stored in JSON only, for handoff notes. |
===== Step 3: Mass And Geometry =====
==== Vehicle Dimensions ====
^ Field ^ Where to find it ^ What it affects ^
| ''Wheel layout'' | Count the active axle pairs | Generates 4x4 through 20x20 layouts. |
| ''mass kg'' | Vehicle data sheet or design mass | Axle load, sprung mass, TankX turn-force starting point. |
| ''wheelbase m'' | Front axle centre to rear axle centre | Generated axle spacing when measured layout is off. |
| ''front track m'' | Front left wheel centre to right wheel centre | Generated front track and preview width. |
| ''rear track m'' | Rear left wheel centre to right wheel centre | Generated rear track and preview width. |
| ''CG Y offset m'' | Geometry LOD mass centre or chosen handling target | Axle load distribution. Positive moves mass forward. |
| ''CG height m'' | Geometry LOD mass centre above ground | Rollover and handling tuning reference. |
For a quick first pass, use real vehicle dimensions and leave measured layout off. For a serious export, enable measured layout and enter every axle station from the model.
==== Track And Axle Stations ====
Enable ''use measured layout'' when the model has known axle positions.
Measure each axle station from the model centre:
- In Object Builder, identify the wheel centre or wheel axis memory point for the axle.
- Read or measure its ''Y'' position.
- Enter positive values for axles forward of centre.
- Enter negative values for axles rearward of centre.
- Measure track width from left wheel centre to right wheel centre for the same axle.
The preview mockup scales from these measured stations and tracks, so unusual layouts should be checked here before moving to wheel names.
==== Wheel Physical Values ====
^ Field ^ Where to find it ^ What it affects ^
| ''wheel radius m'' | Tyre radius from spec sheet or Object Builder measurement | Exported ''radius'', wheel circumference, wheel MOI, gear speed estimates. |
| ''wheel width m'' | Tyre width from spec sheet or model | Exported ''width''. |
| ''wheel mass kg'' | Real wheel/tyre mass or estimate | Wheel MOI calculation. |
| ''dampingRate'' | Similar vehicle config | Normal wheel damping. |
| ''damping damaged'' | Similar vehicle config | Damaged wheel damping. |
| ''damping destroyed'' | Similar vehicle config | Destroyed wheel damping. |
The tool derives:
wheelCircumference = 2 * pi * wheelRadiusM
wheelMOI = 0.5 * wheelMassKg * wheelRadiusM^2
The MOI formula is a practical solid-cylinder approximation for a first pass. Tune MOI and wheel damping in game, especially for TankX vehicles where wheel MOI and damping have a large effect on acceleration, braking, and maximum speed.
===== Step 4: Wheel Layout =====
==== Memory Point Bases ====
Enter the wheel base name for each active wheel. The base name should match the project's P3D naming convention.
Example for axle 1:
^ Wheel ^ Base name ^ Generated centre ^ Generated boundary ^ CarX boneName ^ TankX boneName ^
| Left front | ''wheel_1_1'' | ''wheel_1_1_axis'' | ''wheel_1_1_bound'' | ''wheel_1_1'' | ''wheel_1_1_damper'' |
| Right front | ''wheel_2_1'' | ''wheel_2_1_axis'' | ''wheel_2_1_bound'' | ''wheel_2_1'' | ''wheel_2_1_damper'' |
For each base name, confirm these exist in the P3D:
* A rotating wheel selection or bone.
* A centre memory point.
* A boundary memory point.
* A damper selection/bone if using damper bone names.
* A damper axis for model.cfg if the damper animation is exported.
* A steering selection and steering axis for steerable CarX axles.
==== model.cfg Bone Rules ====
Use templates to adapt the export to the real model naming convention.
^ Field ^ Default ^ Meaning ^
| ''damper selection'' | ''{base}_damper'' | Selection/bone moved by suspension travel. |
| ''damper axis'' | ''{base}_damper_axis'' | Memory axis used by damper translation. |
| ''steering selection'' | ''{base}_steering'' | Selection/bone rotated for visual steering. |
| ''steering axis'' | ''{base}_steering_axis'' | Memory axis used by steering rotation. |
| ''steering angle deg'' | ''35'' | Visual steering rotation angle used in model.cfg. |
''{base}'' is replaced with the wheel base name. If a model uses shared axes, enter the shared axis name without ''{base}''.
The generated model.cfg animation stack per wheel is:
- Damper translation using source ''damper''.
- Steering yaw using source ''steering'', only on axles listed as steering axles.
- Wheel rotation using source ''wheel'' for CarX.
- Wheel rotation using ''wheelL'' or ''wheelR'' for TankX.
==== Brake And Steering ====
^ Field ^ Where to find it ^ What it affects ^
| ''steering axles'' | Vehicle steering design | Sets ''steering = 1'' on those wheel classes and exports steering animations. |
| ''service brake axles'' | Vehicle brake design | Applies ''maxBrakeTorque'' to listed axles. |
| ''handbrake axles'' | Vehicle brake design | Applies ''maxHandBrakeTorque'' to listed axles. |
| ''service brake Nm'' | Brake spec or similar vehicle | Brake torque on service brake axles. |
| ''handbrake Nm'' | Brake spec or similar vehicle | Handbrake torque on handbrake axles. |
| ''unbraked torque Nm'' | Usually ''0'' | Brake torque on axles not listed for service braking. |
Use comma lists or ranges, for example:
1
1,2
1-3
2,4-6
For TankX, wheel steering should normally stay off. Use TankX turning fields in Step 8 instead.
===== Step 5: Suspension And Tyres =====
==== Travel And Frequency ====
^ Field ^ Where to find it ^ What it affects ^
| ''front compression m'' | Suspension travel or measured model travel | Front ''maxCompression''. |
| ''front droop m'' | Suspension travel or measured model travel | Front ''maxDroop''. |
| ''rear compression m'' | Suspension travel or measured model travel | Rear ''maxCompression''. |
| ''rear droop m'' | Suspension travel or measured model travel | Rear ''maxDroop''. |
| ''front frequency'' | Handling target | Front spring strength calculation. |
| ''rear frequency'' | Handling target | Rear spring strength calculation. |
| ''front damping ratio'' | Handling target | Front spring damper rate calculation. |
| ''rear damping ratio'' | Handling target | Rear spring damper rate calculation. |
| ''suspTravelDirection[]'' | Model suspension direction | Usually ''0, -1, 0''. Exported to each wheel. |
The tool estimates load per axle from mass, axle positions, and CG Y offset. The sum of generated wheel ''sprungMass'' values should equal the vehicle mass.
For each axle:
springStrength = naturalFrequency^2 * sprungMass
springDamperRate = dampingRatio * 2 * sqrt(springStrength * sprungMass)
Start with matching left/right values on the same axle. Then tune in game for pitch, roll, bottoming out, braking dive, and obstacle response.
==== Tyre Stiffness ====
^ Field ^ Where to find it ^ What it affects ^
| ''long stiffness'' | Similar vehicle config | ''longitudinalStiffnessPerUnitGravity''. |
| ''latStiffX'' | Similar vehicle config | Lateral stiffness curve X. |
| ''latStiffY'' | Similar vehicle config | Lateral stiffness curve Y. |
| ''frictionVsSlipGraph[]'' | Similar vehicle config, then tune | Tyre grip versus slip curve. |
Treat tyre stiffness as a tuning pass, not a data-entry pass. Use a similar Arma 3 vehicle as a baseline, test on asphalt and off-road surfaces, and adjust only after mass, suspension, and wheel dimensions are credible.
===== Step 6: Engine =====
==== Power And RPM ====
^ Field ^ Where to find it ^ What it affects ^
| ''enginePower kW'' | Engine data sheet | Exported ''enginePower''. |
| ''peakTorque Nm'' | Engine torque data | Exported ''peakTorque'' and wheel torque estimates. |
| ''idle RPM'' | Engine data sheet or sound setup | Exported ''idleRpm'' and derived ''minOmega''. |
| ''red RPM'' | Engine data sheet or sound setup | Exported ''redRpm'' and derived ''maxOmega''. |
| ''engineMOI'' | Similar vehicle config | Engine rotational inertia. |
| ''full throttle damping'' | Similar vehicle config | ''dampingRateFullThrottle''. |
| ''zero throttle engaged'' | Similar vehicle config | ''dampingRateZeroThrottleClutchEngaged''. |
| ''zero throttle neutral'' | Similar vehicle config | ''dampingRateZeroThrottleClutchDisengaged''. |
The tool derives:
minOmega = idleRpm * 2 * pi / 60
maxOmega = redRpm * 2 * pi / 60
Use realistic RPM values if the vehicle has a real engine. If the vehicle is fictional, start from an existing Arma 3 vehicle with a similar mass and role.
==== Torque Curve ====
The torque curve uses normalized engine speed on the X axis and a multiplier of ''peakTorque'' on the Y axis.
Example:
0.0, 0.55,
0.3, 0.85,
0.5, 1.0,
0.8, 0.92,
1.0, 0.72
Where to find it:
* Use a real dyno curve when available.
* If only peak torque and rated power are known, shape the curve from a similar engine.
* Keep the final curve smooth enough that gear changes do not drop the engine into an unusable RPM range.
===== Step 7: Gearbox =====
==== Complex Gearbox ====
^ Field ^ Where to find it ^ What it affects ^
| ''GearboxRatios[]'' | Transmission data sheet | Exported gear ratios. |
| ''final drive ratio'' | Axle/final drive spec | Exported as ''TransmissionRatios[]''. |
| ''moveOffGear'' | Vehicle gearbox design | Automatic/semi-auto start gear. |
| ''gearBoxMode'' | Usually ''auto'' | Exported gearbox mode. |
| ''clutchStrength'' | Similar vehicle config | Clutch coupling strength. |
| ''switchTime s'' | Similar vehicle config | Gear shift duration. |
| ''latency s'' | Similar vehicle config | Minimum time between automatic shifts. |
| ''changeGearType'' | Shift strategy | Uses RPM ratio or effectivity thresholds. |
Gearbox ratios should include exactly one reverse gear, one neutral gear, and forward gears ordered from higher ratio to lower ratio.
Example:
"R1", -3.231, "N", 0, "D1", 2.462, "D2", 1.870, "D3", 1.241, "D4", 0.970, "D5", 0.711
The tool estimates each forward gear speed:
finalRatio = gearRatio * finalDriveRatio
gearSpeedKmh = redRpm / finalRatio * wheelCircumference * 60 / 1000
wheelTorqueNm = peakTorqueNm * finalRatio
Use those derived speeds to check whether the gear stack matches the intended vehicle top speed and acceleration profile.
==== Automatic Shift Logic ====
Use ''changeGearOmegaRatios[]'' when ''changeGearType'' is ''rpmratio''. These are normalized RPM thresholds for automatic shifting.
Use ''changeGearMinEffectivity[]'' when ''changeGearType'' is ''effective''. These values control shifting based on drivetrain effectivity.
Find starting values in a similar Arma 3 vehicle, then test:
* Launch from stationary.
* Full throttle acceleration.
* Hill starts.
* Low-speed reversing.
* Gear changes near top speed.
* AI driving.
===== Step 8: Differential And Handling =====
==== Differential ====
^ Field ^ Where to find it ^ What it affects ^
| ''differentialType'' | Drivetrain layout | Which axle groups receive drive and whether limited slip is used. |
| ''frontRearSplit'' | Drivetrain design | Torque split between front and rear groups. |
| ''frontBias'' | Similar vehicle config | Front limited-slip bias. |
| ''rearBias'' | Similar vehicle config | Rear limited-slip bias. |
| ''centreBias'' | Similar vehicle config | Centre limited-slip bias. |
Use real drivetrain layout when known. For example, an ordinary permanent 4x4 should not be tuned like a rear-wheel-drive car.
==== Handling Aids ====
^ Field ^ Where to find it ^ What it affects ^
| ''turnCoef'' | Similar vehicle config, then test | General turn response. |
| ''terrainCoef'' | Similar vehicle config, then test | Terrain resistance. |
| ''dampersBumpCoef'' | Similar vehicle config | Visual damper bump response. |
| ''antiRollbarForceCoef'' | Similar vehicle config, then test | Roll resistance during cornering. |
| ''antiRollbarForceLimit'' | Similar vehicle config, then test | Anti-roll force cap. |
| ''antiRollbarSpeedMin'' | Similar vehicle config, then test | Speed where anti-roll begins blending in. |
| ''antiRollbarSpeedMax'' | Similar vehicle config, then test | Speed where anti-roll reaches full strength. |
| ''waterLeakiness'' | Similar vehicle config | Water ingress behaviour. |
Tune handling aids after core mass, suspension, tyres, and gearbox are plausible. Do not use anti-roll or terrain coefficients to hide incorrect centre of mass or suspension values.
==== TankX Turning ====
These fields appear only when TankX is selected.
^ Field ^ Where to find it ^ What it affects ^
| ''tankTurnForce'' | Start from mass-scaled value, then tune in game | Low-speed force to overcome turning friction. |
| ''turn force min rad/s'' | Similar TankX vehicle | Angular speed where turn force begins fading. |
| ''turn force zero rad/s'' | Similar TankX vehicle | Angular speed where turn force reaches zero. |
A practical starting point for ''tankTurnForce'' is approximately:
tankTurnForce = vehicleMassKg * 11
Increase if the vehicle will not pivot or begin turning. Reduce if it spins too aggressively or breaks traction unrealistically.
===== Step 9: Validate And Export =====
Use this step to review checks and export files.
^ Button ^ Output ^
| ''Copy config'' | Copies generated ''config.cpp'' text. |
| ''Copy model.cfg'' | Copies generated ''model.cfg'' text. |
| ''Download JSON'' | Saves the editable tool profile. Keep this with the vehicle source. |
| ''Download config'' | Downloads generated ''config.cpp'' text. |
| ''Download model.cfg'' | Downloads generated ''model.cfg'' text. |
Always save the JSON profile with the addon source. It records assumptions, measured layout, editable wheel names, and tuning notes so the setup can be reproduced later.
===== In-Game Validation Checklist =====
After exporting, test in Arma 3 before considering the values final.
- Confirm the vehicle spawns without config or model.cfg errors.
- Confirm every wheel appears in the correct place and rotates around the correct axis.
- Confirm damper animation moves in the correct direction.
- Confirm steerable CarX wheels rotate visually and physically on the intended axles.
- Confirm TankX left and right wheels rotate correctly and the vehicle can turn from rest.
- Drive straight on flat road and check acceleration to target speed.
- Brake from speed and check wheel lock, stopping distance, and vehicle pitch.
- Drive across small obstacles and check bottoming out, wheel clipping, and suspension oscillation.
- Test uphill starts and off-road movement.
- Test AI driving on roads and rough terrain.
- Damage wheels and confirm damaged/destroyed damping behaves acceptably.
- Check multiplayer/server RPT logs if the vehicle is intended for MP.
===== Common Problems =====
^ Symptom ^ Likely cause ^ First fix ^
| Vehicle barely moves or tops out at very low speed | Wheel radius, MOI, damping, gear ratios, or TankX wheel-size mismatch | Check wheel radius, same-size TankX wheels, ''maxOmega'', final drive, and wheel damping. |
| Vehicle bounces continuously | Spring strength too high, damper rate too low, or sprung mass wrong | Check mass, CG, axle positions, natural frequency, and damping ratio. |
| Vehicle feels sluggish over bumps | Damper rate too high or spring frequency too low | Reduce damping ratio or raise natural frequency carefully. |
| Wheels spin visually around the wrong axis | Wrong ''center'', model.cfg rotation axis, or memory axis direction | Check P3D memory points and model.cfg axis names. |
| Damper moves opposite direction | Damper axis direction or offset sign mismatch | Check ''{base}_damper_axis'', ''offset0'', and ''offset1''. |
| TankX vehicle will not pivot | ''tankTurnForce'' too low or wheel damping/MOI too high | Raise ''tankTurnForce'' gradually and review wheel damping. |
| Gearbox hunts between gears | Gear ratios too close, torque curve too steep, shift latency too low | Increase latency, smooth torque curve, or adjust shift thresholds. |
| Vehicle rolls over too easily | CG too high, track too narrow, anti-roll too weak, suspension too soft | Check measured CG/track first, then tune anti-roll. |
===== Reference Links =====
* [[https://community.bohemia.net/wiki/Arma_3_Vehicle_Handling_Configuration|Bohemia Interactive Community: Arma 3 Vehicle Handling Configuration]]
* [[https://community.bohemia.net/wiki/Arma_3%3A_Cars_Config_Guidelines|Bohemia Interactive Community: Arma 3 Cars Config Guidelines]]
* [[https://community.bohemia.net/wiki/Arma_3%3A_Tanks_Config_Guidelines|Bohemia Interactive Community: Arma 3 Tanks Config Guidelines]]
* [[https://community.bohemia.net/wiki/CfgModels|Bohemia Interactive Community: CfgModels]]