Ride Vehicle Animation Manager for Blender

Building off of my work in the Ride Vehicle Rig project, I needed an automation solution for managing multiple instances of the same ride vehicle on the same track, running the same motion profile. As stated in that project, when animating the ride motion of an attraction, sightlines are a major concern. That includes sightlines of other vehicles. It's important to check during the design process where vehicles ahead / behind of the current vehicle are - it can sometimes ruin the immersion of an experience (or sometimes be used as a storytelling tool) if a vehicle with another group of guests is visible to another.

So, this tool is important.

Functionality Goals

From the outset, I wanted this plugin for Blender to accomplish the following tasks:

  • Create instances of any given RV rig
  • Maintain animation profile parity between rig instances
  • Unified control of spacing / offset of instanced RVs

Plugin Development

Most Blender plugin tutorials involve starting with the built-in text/script editor that blender has.

I do not recommend doing any serious development on this. It's barebones, and as far as I know, has little to no syntax highlighting nor intellisense.

Instead, I ended up using VSCode and a "blender development" extension that automated much of the tasks associated with plugin development; namely reloading plugins, debugging Blender, and a few more tweaks. Add into this a python Blender module for reference, and everything was simple from that point onward.

Instancing RV rigs ended up being the most considerable challenge of the project. Animation rigs are complicated, weighty trees composed of many nodes, all linked together through constraint settings and drivers. In order to properly clone an object while maintaining all relationships, the script must copy each node, keep a map of the original node's name to the new node's name, then re-target all drivers and constraints to the newly renamed object nodes.

It's... a little messy in my implementation. But it's reliable and quick.

 

The maintaining of animation profile parity feature ended up being one of the easiest components of the plugin to implement - Blender has a nice NLE (non-linear editor) that I took advantage of to do this. When the script runs, we create an "Action" with the original RV's "Program Motion" object. Then, every instance RV has their animation linked to that action. With this, we can even offset it by a certain number of frames, giving us the final feature for free.

 

With that, and a bit of UX polish, we get the result below.

The plugin only does work when creating/modifying the array of RVs, so it's really performance-friendly and smooth. I can't wait to use it properly on a project.

I'm not releasing this publicly, but I'm more than happy to talk more about it if you want to contact me directly.