Make a Car Wheel Spin from One Control with a Driver

Keyframing wheel rotation by hand never quite works. You move the car, guess how far the wheels should turn, and they end up looking like they’re sliding on ice. A driver fixes that. You move one control object and every wheel turns by exactly the right amount for the distance travelled.

I’m using the vintage car from my 3D modelling and rigging course, in Blender 4.5 LTS. The same steps work on any vehicle with round wheels.

Vintage red car model in Blender 4.5 Material Preview on a grey floor, with an Arrows empty above it as the car control
The car with its control empty, CTRL_Car, sitting above it.

Step 1: Prepare the wheels

  1. Make each wheel its own object. If your wheels are one mirrored mesh, apply the Mirror modifier, go into Edit Mode and press P > By Loose Parts to split them. I named mine Wheel_FL, Wheel_FR, Wheel_RL and Wheel_RR.
  2. Put each wheel’s origin in the centre of its hub: select the wheel, then Object > Set Origin > Origin to Geometry.
  3. Apply rotation and scale with Ctrl+A > All Transforms, so the wheel’s local X axis runs along the axle. If you apply location too, the origin jumps back to the world centre, so stick to rotation and scale.
  4. Press N to open the Sidebar and look at the Item tab. Half of Dimensions Z is the radius. My wheels are 1154 mm tall, so the radius is 577 mm, or 0.577 m.
Blender Sidebar Item tab for Wheel_FL showing Location, a purple driven Rotation X field, and Dimensions 141 by 1154 by 1154 mm
Wheel_FL in the Sidebar. Dimensions Z is 1154 mm, so the radius is 0.577 m. The purple Rotation X shows the driver from Step 3.

Step 2: Add one control

Add > Empty > Arrows (Plain Axes works too) and name it CTRL_Car. Select the body, the wheels and every other part of the car, then Shift-click the empty last so it’s the active object, and press Ctrl+P > Object. Now moving the empty moves the whole car.

My car faces down the negative Y axis, so it drives forward when CTRL_Car moves to negative Y. Check which way yours faces before you write the driver.

Blender Outliner showing CTRL_Car expanded with every car part, including the four wheels, parented under it
Every part of the car sits under CTRL_Car in the Outliner.

Step 3: Add the driver to one wheel

  1. Select the front left wheel and open the Object tab in the Properties editor.
  2. Under Transform, right-click the X field of Rotation and choose Add Driver.
  3. In the popover, leave Type as Scripted Expression.
  4. In the variable below, change the type from Single Property to Transform Channel.
  5. Set Object to CTRL_Car, Type to Y Location and Space to World Space.
  6. Set the Expression to -var / 0.577, using your own wheel radius in metres.

The Rotation X field turns purple to show it’s driven. Move CTRL_Car along Y and the wheel rolls.

Blender Drivers editor with the Drivers tab showing Wheel_FL X Euler Rotation, expression -var / 0.577, variable var reading CTRL_Car Y Location in World Space, value -4.937 and driver value 8.556
The finished driver at frame 60. CTRL_Car has moved -4.937 m, so the wheel has turned 8.556 radians, about 490°.

Why that expression works

A wheel that rolls without slipping turns by the distance travelled divided by its radius, in radians. Blender stores rotation in radians internally, so dividing by 0.577 gives the exact amount. You can check it in the screenshot above: 4.937 divided by 0.577 is 8.556.

The minus sign sets the direction. With the axle along X, a wheel moving towards negative Y needs a positive X rotation to roll forward, and a negative Y location makes -var positive. The same expression also works if your car faces positive Y. If your wheel spins the wrong way, remove the minus.

It’s also a simple expression, and that matters. Blender evaluates simple maths like this directly, so it works even with Auto Run Python Scripts turned off, and you won’t get a “Slow Python expression” warning.

Step 4: Copy it to the other wheels

Right-click the driven Rotation X field and choose Copy Driver. Select the next wheel, right-click its Rotation X field and choose Paste Driver. Repeat for the other two. If your rear wheels are a different size, right-click > Edit Driver and change the radius.

To see them all at once, change any editor to the Drivers editor and select the wheels. Each one gets its own X Euler Rotation channel, and the Sidebar’s Drivers tab shows the settings for whichever channel you click.

Blender Drivers editor listing X Euler Rotation drivers for Wheel_FL, Wheel_FR, Wheel_RL and Wheel_RR
All four wheels driven from the same control.

Animate the control, not the wheels

Now you only keyframe CTRL_Car’s location. I keyed it at 0 on frame 1 and at -10 m on frame 120. Speed it up, slow it down or reverse it, and the wheels follow without a single wheel keyframe.

The vintage car in Blender at frame 60, moved forward along the Y axis with its spoked wheels rotated, and CTRL_Car Y Location at -4937 mm
Frame 60: the car has rolled 4.9 m and the wheels have turned to match.

One limit: this version reads world Y only, so it suits straight runs. For a car that turns corners you’d measure distance along a path instead, but this is the version I start every vehicle rig with.

Take it further

If you want to build complete vehicle and character rigs from scratch, my 3D modelling and rigging course on Udemy covers it step by step.

Published by Thomas

With over 15 years designing in 3D applications Thomas has extensive knowledge necessary to help you become proficient in Blender