General Suspension in AC

Hey guys,

I'm helping out on Dallara GP3 formula car conversion to AC, and I do NOT want to use animated suspension on it, becasue I dislike the fact that if you adjust things like camber, they don't show up visually

Some time ago, I belive that someone did quite complex suspension like this using some axis nodes or so,
are there more people that got suspension working this way ?
 
here is one of the latest progress on the car, getting there
it really comes alive in AC engine imo

587E9F24DB3F26572FE92E8CD18D9676F892EF0E
 
From what I'm told, when you adjust camber ingame it does it by adjusting the upper/lower arm lengths to rotate the upright, so you'd want whatever's attached to that (at least a ball joint + threaded rod, maybe the whole arm) as child of the upright, and whatever's firmly fixed to the chassis (either the arm, or the inside ends of the other 2 ball joints) childred of the chassis.

As far as I know the 'look at' code just rotates it the shortest quaternion to get the right directions, so it works best for single rods (where it's ok if they twist slightly)

I suppose with enclosed springs/antirollbars you're pretty much set, those are the parts that really heavily depend on animations to look right.

Chaining them together gets really iffy, for example my steering rack used to be left hub -> left tie rod -> rack -> right tie rod, and the end of the right tie rod had a lot of trouble getting in the right spot cause it wasn't computing the 'look at' in compounded order.
 
this is what I found on AC forums

Code:
The empty "DIR_" had to be outside of the empty "SUSP_XX" , so i didn't get that works, but now works.
In my case, finally it is so (correct me if i put something wrong, altough for me works so, in this case) :

Example :

SUSP_RF -> STUFF_SUSP_RF -> MESH_STUFF_SUSP_RF

DIR_STUFF_SUSP_RF

* (SUSP_RF, STUFF_SUSP_RF and DIR_STUFF_SUSP_RF are empty objects)

The DIR_STUFF_SUSP_RF (with the X axis pointing to the STUFF_SUSP_RF) is placed in the extreme of the part of the suspension and the STUFF_SUSP_RF (with the X axis pointing to the DIR_STUFF_SUSP_RF) in the other extreme.

so will give that a shot
 
thanks Stereo,

if everyone else fails, I can always do the animation suspension of course! .. but I would reallve loved if it was possible to keep it live and working close enough

obviously with Formula cars it's very visible, so it has to work right
 
Hey guys,

I'm helping out on Dallara GP3 formula car conversion to AC, and I do NOT want to use animated suspension on it, becasue I dislike the fact that if you adjust things like camber, they don't show up visually

Some time ago, I belive that someone did quite complex suspension like this using some axis nodes or so,
are there more people that got suspension working this way ?

yes, i have in mi car (Renault R24) :

I have done the suspensions with empty objects (arrows in this case) in blender, and when the suspensions move in the game or you change the camber or whatever, they move.



you have to use empty objects (in this case arrows if you use blender, although you can use another empty objects if you prefer, but have to be empty objects). first you have to include the wishbone of the suspension in one empty object (named : WISHBONE_LF) and later you have to create another empty object with the name "DIR_" in front of the name (example: DIR_WISHBONE_LF),
so it would be :

(from the help text of kunos, that you can see here : C:\Program Files (x86)\Steam\steamapps\common\assettocorsa\sdk\dev\car_pipeline_2.0rev\AC_Pipeline_PUB_Rev2.0.pdf) :

STEER ARMS and DIRECTION CONSTRAINTS We can animate many different parts and just import the animation to the editor and from that export to the game, but the STEER arm cannot be animated. Its position changes in the 3D space according to the HUB rotation.
In order to constrain the movement of the steer arm to the HUB’s position and rotation, the convention name with a prefix “DIR_customName” must be used. This indicates the direction of the X negative axis of this mesh, and the null called “customName” will point the X axis to the correct direction.
Example: a null called “SteerArm_L” will point the negative X axis in direction of a null named “DIR_SteerArm_L” Pay attention to the rotation of the null which the animated mesh is linked to. In the image below the right-hand side Null point has a positive Z axis. The left Null point has a negative Z axis. This allows the -X axis to point to the center of the car or any other direction required by the mesh. Inside the TEMPLATE_Suspension_COMPLEX.fbx file, you can find a proper hierarchy example.

susp.png



Note: You can create more constraints, if you have more objects to constraint to the HUB by simply giving them different names. Nevertheless, it is always good in terms of optimization to use the lowest possible number of constraints. You can animate your custom nulls in the following vectors: Rotation - Translation - Scale. Inside the TEMPLATE_Suspension_COMPLEX.fbx example file, you can see the animation of the suspension spring, on SCALE Y . Note: Never animate the mesh. Always animate the NULLs only! With this approach you can change and update your mesh every time you want without re-exporting the animations. Use the same technique to create animations for any NULL that has to be animated. For example, doors, gearbox levers, or any other parts.

the hierarchy is so (example of the left - front suspension) :

*(EO) = Empty Object
*(BO) = Blender object in cuestion (if you use blender)

(EO) DIR_WISHBONE_LF_1
(EO) DIR_WISHBONE_LF_2
(EO) DIR_WISHBONE_LF_3
(EO) DIR_WISHBONE_LF_4

(EO) SUSP_LF ---> (EO) WISHBONE_LF_1 ---> (BO) _WISHBONE_LF_1
-----------------------> (EO) WISHBONE_LF_2 ---> (BO) _WISHBONE_LF_2
-----------------------> (EO) WISHBONE_LF_3 ---> (BO) _WISHBONE_LF_3
------------------------> (EO) WISHBONE_LF_4 ---> (BO) _WISHBONE_LF_4

i hope this help you :)

ask more if you don't understand something or whatever
 
Yeah it pretty much works how you'd expect, NAME_OBJECT is the one you want animated, DIR_NAME_OBJECT is in the position you want its x-axis pointed at. So you can go any direction you want as long as one's a child of the SUSP and the other's not. And you can tie things together from 2 directions by having
OBJ1 -> DIR_OBJ2 -> mesh
SUSP_LR -> OBJ2 -> DIR_OBJ1 -> mesh

which for example would make the two ends of a shock point at each other and telescope into themselves when suspension moves.

Personally I couldn't get the animated axles (TRANSMISSION_L, TRANSMISSION_R) to work at all without animated suspension (tried to do it on the F350 cause you can't animate solid axles) but those are not obviously wrong on a racecar due to less suspension travel. The issue being that if you make them child of DISC_RR pointing at diff, with child also pointing at diff (to represent the inner U joint) it'll move in and out a little bit as the wheel compresses.
 
this is what I found on AC forums

Code:
The empty "DIR_" had to be outside of the empty "SUSP_XX" , so i didn't get that works, but now works.
In my case, finally it is so (correct me if i put something wrong, altough for me works so, in this case) :

Example :

SUSP_RF -> STUFF_SUSP_RF -> MESH_STUFF_SUSP_RF

DIR_STUFF_SUSP_RF

* (SUSP_RF, STUFF_SUSP_RF and DIR_STUFF_SUSP_RF are empty objects)

The DIR_STUFF_SUSP_RF (with the X axis pointing to the STUFF_SUSP_RF) is placed in the extreme of the part of the suspension and the STUFF_SUSP_RF (with the X axis pointing to the DIR_STUFF_SUSP_RF) in the other extreme.

so will give that a shot
yes, it works great once you get a hang of it and allows for more freedom than the normal keyframe animation, but I couldn't get it to work with TRANSMISSION objects so far, so no rotating driveshafts. I used that system on this car:
(ignore the misaligned wheel hubs)

I can PM you a .blend file if you want
 
I'm finding out, which probably shouldn't be surprise I suppose, that the only way to get this to work properly also means that physics needs to move the wheel correctly, right?
i'm getting wishbones going out of their mounting points

it's not that bad/visible though, so perhaps this could be something I could live with ?


edit:
full setup for front wheel, not bad I think
I will probably stretch the closer upper wishbone attach point bit more into the body to hide it some more, and this should be done

 
Last edited:
I have the same issue with my ARB, as the DIR stuff obviously does not take flex into account. But in general it should work best if your visual and physical suspension is the most identical, but it doesn't have to. Easy to check in CM, as it updates in realtime when you save the suspension.ini
 
also, any tips on mirroring ?? doesn't seem to wanna work, .. and it would be silly if you have to recreate all the stuff on the mirrored side from scratch ?

edit: I think I got it, my pivots on SUSP_XX aren't correct,
it woudlnt' show before since nothing was parented there
 
Yeah, I just mirror everything twice - empty parents first, then children, both on the parent's local X. Should end up with scale of 1,1,1 (AC semi-requires this; if scale's off normals and culling break), rotation changed accordingly. In blender you can do subsequent copies (eg. new meshes to existing SUSP) with python by doing >> D.objects['name'].parent = D.objects['SUSP_LF'] which moves it over and swaps to the new transform, then mirror them in mesh mode. Might require flipping face normals too, I forget.

Since DIR objects point via the X axis you have to mirror on something other than X, each mirror swaps the handedness of coordinates (right hand or left hand) regardless what axis you do it with. eg. mirror around global X, then local Z, then mesh on local Z. Luckily programs are pretty consistent about which direction is X so there's no swapping +Z and -Y to account for.
 
Last edited:
Hi all,

Old but really useful post for me!
I have quite experience in working on tracks and cars modifying for my personal use, but it's the first time I'm doing a car from scratch. Everything is done, now I'm porting the 3D in AC and making all teh animations.
It's an openwheeler and that the reason for which for suspensions I opted for the full constraints and here I found all the information I needed and I managed quite easily to manage it.
But there a thing taht is really puzzling me, i.e. the hub animation.
First of all I'm not sure where this anmation is created... during the creation of the driver steer.ksanim? Or is simply hardcoded in the sim?

The fact is that, despite of the correct orientation of the rotation HUB, I'm not able to have the hub rotating along that axis, making the wishbone-hub joint "wobbling" and as conseuqence all wishbone moving (even if slightly) when you steer the wheel. This give a really poor effect on the body-wishbone joints (see below ho this joints looks like to understand how poor the effect is). I'm sure you understand what I mean, it's also vsible in some video posted above.
So my questions:

MAIN ONE: What could be me I'm doing wrong? Any suggestion to have the hub correctly rotate along the right axe?
SECONDARY ONE: According to CM it seems that fron wheels are moving 30° each side despite you change the steering wheel rotation. Is there a way to change this value to make this match with real physic front wheels rotation (form the data I have this car have 400° lock to lock and a steer ratio of 10:1, so if I'm not wrong 20° each side.)

Thank you for your help and sorry if I wrote nonsense, I'm a beginner!

Marco
1611071007991.png
 
Last edited:
I don't think it's supposed to align and work perfectly, it will have to slide on one end, because the geometry won't stretch , so maybe you should anchor it on the other end and let it slide on the wheel ?

did anyone got this to work perfectly ?
 
If you don't use suspension animation files, the HUB is positioned where the wheel currently is. So it rotates when you adjust toe/steering/camber, and the axis is set by the suspension geometry. Camber is pretty likely to cause problems cause you don't control the way it's adjusted; I believe the way AC does it is by moving the pickup points on the hub relative to the axle. Generally my advice would be put the arm's empty on the joint you want to be most accurate, and have it point at the other one.

Nested DIRs also wobble a lot depending which order it sets them.
 
Last edited:
Thank you both, in the meantime I had found a Ben O'Bro post that i clered me already something, more or less what Stereo explaine.

So I'm now trying to minimize the effect and it seems something could be done, also following your suggestions. At worst I'll go for the animation, but shame, the idea of full constraint susp is really teh ebst from my point of view and is working really well for me (hub alignement a part...).

Just a last question: are someone aware if Ilja implemented something in CSP to fix this behaviour?
 
Last edited:

What are you racing on?

  • Racing rig

    Votes: 528 35.2%
  • Motion rig

    Votes: 43 2.9%
  • Pull-out-rig

    Votes: 54 3.6%
  • Wheel stand

    Votes: 191 12.7%
  • My desktop

    Votes: 618 41.2%
  • Something else

    Votes: 66 4.4%
Back
Top