General loosing my sanity in Blender - animating wiper edition

Dirk Steffen

Porsche Factory Jackass™
Premium
I am trying and failing spectacularly to animate a parallelogram wiper design in Blender and it is a complete failure (Blender and my brain simply do not communicate well at all).

I have nicely cleaned up and separated all relevant wiper objects.
I have build an armature with bones in all the correct places to replicate the wiper joints.

Now here is the point where I fail miserably:

- if I simply parent the wiper objects with the armature (auto weight) the wiper objects will terribly deform once I pose the wiper
- I read about a gazillion Blender tutorials and help posts where it is stated over and over that in this case I have to parent each bone individually to each individual wiper object

… well … I CAN'T

There lies my problem :-(

When I assign the bone parent to an object through the menu on the right, the object (my wiper joint) will move the moment I assign the bone as a parent to it (how to avoid this ???).

The second most quoted method goes something like this:
- go to pose mode
- select the individual bone you want to parent your object to
- shift select your object you want to be the child (DOES NOT WORK - there is no shift select, nothing is happening here)
- assign your parenting from there

It looks like I am completely stuck :-(
I'd rather avoid having to place every single objector this complex wiper arrangement individually for every key frame :-(
 
I don't think bones are the way to go, Blender has rigid body constraints (physics tab) if you want to automate things a bit but generally "place every object for every key frame" is the easy option. Using a hierarchy of empties so there's no translations involved, only rotation.

[edit] Object Constraints are the ones I actually used on the Formula Ford, "Damped Track" + "Limit Rotation". so only the anti-roll bar and lower control arm have actual keyframes, the rest is just tracking those.
 
Last edited:
Oh, you cannot image how glad I am you write that ;-)
I was about to loose my mind about this whole Armature/bone/animation business (every corner I turned learning about it two more obstacles showed up …)

How can I assure that all single objects within an empty will be translated + rotated when I position the empty ( I want to avoid to join all single objects from a part of the wiper arm as they have assigned different materials).
Am I doing this by parenting all single objects that make up a part of the mechanism into a single empty and then use the empty as the "control" for that assembly ?

[EDIT]:
self answer - yes ;-)

Select the empty na make sure "Parents" is unticked and all objects within the empty will be controlled by moving the empty.
Screen Shot 2020-08-03 at 08.24.58 .jpg
 
Last edited:
Also - what is the recommended process to get a smooth, curved movement along a strongly curved windshield - is there any function in Blender to use for this specific task?

1) You have a strongly curved windshield and want to make sure the wiper 'sticks' to it while rotating > curve your wiper blade accordingly, parent it to the wiper arm, parent that to the empty which simply rotates around its axis.

2) You're actually looking for the wiper blade to 'go across' the geometry of the windshield with curvature a at its starting point and curvature b at the end point and any curvature in between > probably not worth the effort. You can do this in blender like when modeling tire contact patches or shifter leather boot animations but for a windscreen wiper it would a) require many variants and b) hard to translate to the editor - this may be easier with some CSP extension capabilities

3) You're looking to have the wiper rotate around two points so it has a rotation axis and the point of origin changes location as well along the lines of the Mercedes W124 mono wiper or BMW E39 passenger wiper - I had this issue with an airplane wing slat which rotated around two axis > could only be solved in 3DS. You can do it in Blender but then you actually need bone armature because you have an axis rotating along another moving axis point. Again, for AC and windscreen wipers probably unfeasible. Come to think of it, I hope the E31's passenger wiper is not built like that :D.

I forgot to mention, the AC SDK document refers to animation smoothness and says that AC handles that by just giving it a start and end point and exporting the animation with the empty in default position. That said, I guess you were refering to the visual shape of the wiper blade moving across the windshield glass.

Long story short: fix and make the axis work, visually bend your wiper blade until it looks good outside and in and call it a day - just my two cents :).
 
Thanks a lot for the input guys ;-)

I spent some more time trying to get the wiper animation to work.
Stereo's excellent Blender export plugin for ksanim file was a lifesaver too!

Now KI ran into another problem I just cannot seem to figure out (tried for hours already and the internet doesn't make me any wiser either :-(

I am using a simple wiper assemble to get started:
Screen Shot 2020-08-06 at 17.42.47 .jpg


I have gotten everything working well animating the wiper throughout the whole range but one single problem remains:

Blender keeps completely messing up the rotation of the main joint (see the empty in the image).
I want blender to completely lock it's X and Y axis (red and green) and EXCLUSIVELY use it's Z axis (blue) to generate the frames in-between my manual frames.

I just cannot find any possible way to tell Blender that the X and Y axis is off limits - it keeps messing them up :-(

Does anyone know how to lock these two axis ?
 
Graph editor will let you see how it's actually being rotated, I think it's more likely an issue of coordinate space though.
IDKIt39.png
(red/green/blue for rotation on those axes of course)

To get the right coordinate space you put a top level empty that's not animated, just sets up the axes to be in the place you want them, ie. Z sticking straight out from the windshield.
 
Ohhh, that sounds like a good lead ;-)
I had the orientation of the two three top level empties (one WIPERS empty to hold all wiper related items and the left and right wiper empty inside it) untouched.

I will try orienting the two non-animated wiper empties in the same orientation as the master joints then.

I was actually hoping I could simply LOCK all but the Z axis of all animated joint empties and prevent Blender from using them entirely but could find no way to do that what are the little axis locks there for anyway :-(

I also could find no logic in how the keyframe copy paste behavior does not produce any repeatable results (I tried to copy the first frame to the last frame but all objects would simply end up disjointed all over the place and I ended up having to manually copy each axis rotation one by one to duplicate a key frame :-(
 
Ohhh, that sounds like a good lead ;-)
I had the orientation of the two three top level empties (one WIPERS empty to hold all wiper related items and the left and right wiper empty inside it) untouched.

I will try orienting the two non-animated wiper empties in the same orientation as the master joints then.

I was actually hoping I could simply LOCK all but the Z axis of all animated joint empties and prevent Blender from using them entirely but could find no way to do that what are the little axis locks there for anyway :-(

I also could find no logic in how the keyframe copy paste behavior does not produce any repeatable results (I tried to copy the first frame to the last frame but all objects would simply end up disjointed all over the place and I ended up having to manually copy each axis rotation one by one to duplicate a key frame :-(

If this is still an issue you can lock any axis:

UHm4uu8.png


Bring up your 'N' toolbar on the right and lock your axis, for my headlight I locked z and y and the animation rotates the empty around its local x axis (local because it is not symmetric otherwise global x would have been fine too). Make sure your animation rotates the empty around the correct axis in 3D space though as that would work in Blender if you did it wrong but not work in the editor later on.

You can also see in the main menu on the right I added an object rotation constraint, this would be helpful for your wiper too to 'lock' the rotation of the wiper between its start and end point.

If Blender messes up the location or properties of your empty in Blender or upon export make sure that there is no excess geometry (a single pixel is enough) anywhere outside your wiper geometry that is still part of the same object as that affects object origins and hence the empty's function. You would see that in Stereo's graph as well though.

As for your keyframes you need to start clean so delete any animation you have in your scene, then simply insert a keyframe for your starting point by pressing 'I' then move your empty to the desired end point and press 'I' again. Due to the engine's handling of animations you don't need more than those two points for it to work but can add more if you want. I have personally not used copy and paste for keyframe animations.
 
Last edited:
If this is still an issue you can lock any axis:

UHm4uu8.png


Bring up your 'N' toolbar on the right and lock your axis, for my headlight I locked z and y and the animation rotates the empty around its local x axis (local because it is not symmetric otherwise global x would have been fine too). Make sure your animation rotates the empty around the correct axis in 3D space though as that would work in Blender if you did it wrong but not work in the editor later on.

You can also see in the main menu on the right I added an object rotation constraint, this would be helpful for your wiper too to 'lock' the rotation of the wiper between its start and end point.

If Blender messes up the location or properties of your empty in Blender or upon export make sure that there is no excess geometry (a single pixel is enough) anywhere outside your wiper geometry that is still part of the same object as that affects object origins and hence the empty's function. You would see that in Stereo's graph as well though.

As for your keyframes you need to start clean so delete any animation you have in your scene, then simply insert a keyframe for your starting point by pressing 'I' then move your empty to the desired end point and press 'I' again. Due to the engine's handling of animations you don't need more than those two points for it to work but can add more if you want. I have personally not used copy and paste for keyframe animations.
That is some great info! Thanks for sharing the tips and tricks ;-)
I have in the meantime practiced some more on easier cars with single arm (triple joint) wipers and slowly get the hang of it.

Unfortunately I still am not able to lock certain joints (rotation of their empties) :-(
I basically end up walking through the time line and doing a couple of cycles where I have to add additional key frames half way between existing keyframes to bring the main wiper assembly "back on track". This usually results in me ending up with keyframes every 3 to 5 frames on a total of 60 frames for the wiper animation (30 frames from start to end and another 30 from end to start).

On a simple wiper assembly this is perfectly doable but I didn't level up just yet to parallelogram systems.
Luckily I have now setup Blender on my CAD workspace and using a proper setup with Spacemouse and large 4K screen massively speeds up navigating blender (I used to do this on the sim rig with just a mouse and it was a pita to deal with Blender).


1) Your rendering mode in the 3D view looks incredibly useful (colour channels for dark / light rendered surfaces ?).
How did you achive this? I could see this being extremely useful to expose bad polys / normals in the transition zone between dark and light when inspecting a mesh.

2) Is there a guideline of best practice about the number of frames for each animation (min to look good and max to not waste recources)?
I found 60 frames for a simple wiper animation to be the absolute low end I want to go to (frames do start to look obviously choppy already when in a camera view close to the wiper).

3) when setting keyframes my current method is:
- select frame in time line
- move objects into position
- deselect everything
- select all layers involved in the animation
- right click to open context menu
- add keyframe (loc+rot)

Can I skip a few steps and select ALL visible objects (usually including static objects such as windscreen, windscreen frame / window seal etc) ?
This would vastly speed up the process but can this be safely done (include static objects in animation).

Any bad side effects?
 
4) Is it possible to simulate flexible wiper blades and incorporate this in the animation?
Will AC work properly?

I would love to articulate the wiper blade pickup frame and bend the wiper blade (just using a flat back single texture material on it).

Will AC pickup the "changed object mesh" properly from frame to frame or are object meshes completely static in the AC engine ?

I have seen Ilya having mentioned a new flexible wiper blade shader for the CSP - perhaps related?

Anyone played with this?
 
I've never added frames for more than one object at a time, I just rotate and then immediately insert the new frame (also never need location keys for simple wipers as they just pivot around an axis attached to the car, and then an axis attached to that axis) Hotkeys are i to insert a keyframe, alt+i to delete it. The main reason not to include animations on stuff that aren't animated is just tidiness though. Blender will display only animated items in the dope sheet etc. but that's not very useful if everything has keyframes.

I have not yet found a way to export skinned animations from blender for any purpose. The fbx export can include vertex weights but it does something wrong with them, or maybe kseditor does, and the animation file won't work on it.
 
Last edited:
1) Your rendering mode in the 3D view looks incredibly useful (colour channels for dark / light rendered surfaces ?).
How did you achive this? I could see this being extremely useful to expose bad polys / normals in the transition zone between dark and light when inspecting a mesh.
Press 'n' and go down to display, select 'matcap' then select this color - there you go.

As for key frames like @Stereo said there's no need for more than two frames between frame 1 and frame 2 both set by pressing 'I' - AC does the rest.
 
Back
Top