For this project, I was working together with Russell Tickner from Rascal Post on the CG car seqeuences for the Meridian Dan’s Teachers Pets music video. My task was to create a procedural tunnel and lights system – to have the car drive through the tunnel infinitely and have art directable streaks of light reflecting from the car. We wanted to have multiple ways to animate the lights – either with keyframes or reacting to music and also have the animation propogating along the tunnel trhough time with a custom per-light time delay.

There were couple interesting technical challenges. Main challenge as always, when working in Unreal Engine, was to make all of this work in Editor without entering play mode – while scrubbing the timeline of the Sequencer.

First there is the animation of the tunnel itself. As such it’s quite simple – car is staying in place and tunnel itself is just a bunch of repeating modules (I made in Blender) that slide in one direction and when the module gets further away, it just teleports to the beginning – creating and illusion of infinite tunnel. The hard part was that we wanted it to be have variable speed – controlled by animation curve. Therefore, when scrubbing to random frame in sequencer, there must be a way to calculate the position of the tunnel. Because the speed is a curve with keyframes, we can’t compute the location mathematically – we must actually sample the speed curve (sequencer animation curve for the speed parameter) for each frame that comes before the current frame and use the sum of all the speed values to calculate the final position. To make things harder – we must also sample several subframes for each frame to make the blended motion blur working (to have the best quality, UE is rendering X subframes for each frame and averaging them to create one final frame).  It means that each frame we must sample animation curve a lot of times to calculate final position. And the sequence was quite long – over 5000 frames ( so it’s like 5000 x 30 x 8 = 1.2 million frames to sample when scrubbing at the end of the frame range). After pushing Blueprints to the limit, I rewrote the system in C++  and it worked fast enough to allow real time preview.

Similar challenge was with the animated lights. Because light animation is time dependant and each light uses different offset in time, I used similar technique of direct animation curve sampling in C++ to be able to offset time for each light. I also added another way of animating lights using the audio analysis tools in Unreal – allowing to drive lights animation by the music itself. This method can also use time offset to make light animation travel through time.

For the light squiggles (produced by the “vibration of the car”), I made a custom shader so we could animate the intensity of the squiggles at different times.

Director:  Gareth Brannan
Creative Director: Stefano Ottivano
DOP: @davidwrightdop / @unitedtalent
Executive Producer: @abwakat_

VFX: Rascal Post
Unreal: Russel Tickner, Gatis Kurzemnieks
Colourist: Dan Levy
Editor: @hog_roast




Rascal Post