Website powered by

Imagination power: Race off reality!

This is my final submission for the 'Endless Engines' challenge organized in February 2023 by the YouTube channel Pwnisher (https://www.youtube.com/watch?v=L-v7QPjtyaI).

It was once again a very interesting journey, and I learned a lot throughout the process!
Here, I've tried to break down my creative process, highlighting the tips and tricks I used along the way.
Everything was done in Blender and built from scratch for this occasion.

Enjoy, and don't hesitate to reach out to me if you are interested in any more details.

And here it is, my submission! Enjoy :D

The idea is to relate an African kid's imaginary race while playing with his typical wire car.

The idea is to relate an African kid's imaginary race while playing with his typical wire car.

The transition between the two worlds is achieved through compositing.
I have layered the different components and used keyframes to activate a 'displace' and a 'set alpha' node, which affect only the first background layer and causes it to disappear.

The transition between the two worlds is achieved through compositing.
I have layered the different components and used keyframes to activate a 'displace' and a 'set alpha' node, which affect only the first background layer and causes it to disappear.

The transition between the two cars is made with geometry nodes <3 .

The transition between the two cars is made with geometry nodes <3 .

I simulated a car with steering and suspension, and then parented the two cars to it. 
Although having a common parent was very efficient, I eventually realized that the simulation was unnecessary and time-consuming for my purposes.

I simulated a car with steering and suspension, and then parented the two cars to it.
Although having a common parent was very efficient, I eventually realized that the simulation was unnecessary and time-consuming for my purposes.

Here's the trick for the transition: A 'raycast' toward a plane.
When the hit distance is below a certain threshold, the vertices disappear following a controlled effect. 
I applied the same node group for both cars, but casting in opposite directions.

Here's the trick for the transition: A 'raycast' toward a plane.
When the hit distance is below a certain threshold, the vertices disappear following a controlled effect.
I applied the same node group for both cars, but casting in opposite directions.

The wire car is also created using geometry nodes from a simple blockout.
In the first part I delete the faces and give the wire look.
In the second part I randomly instantiate 'knots' for added detail.

The wire car is also created using geometry nodes from a simple blockout.
In the first part I delete the faces and give the wire look.
In the second part I randomly instantiate 'knots' for added detail.

The 'knots' are made in this group.
To wrap a curve around an axis, I like to use A.cos(Bx) and A.sin(Bx) functions to set the points position along the two others axis, x being the index.
Tweak A to modify the size and B for the number of wrapping turns.

The 'knots' are made in this group.
To wrap a curve around an axis, I like to use A.cos(Bx) and A.sin(Bx) functions to set the points position along the two others axis, x being the index.
Tweak A to modify the size and B for the number of wrapping turns.

We see here the UV unwrapping of the roofs of the houses on the PBR texture.
The displacement is achieved with a simple 'displace' modifier driven by a noise texture.

We see here the UV unwrapping of the roofs of the houses on the PBR texture.
The displacement is achieved with a simple 'displace' modifier driven by a noise texture.

The house shader combines PBR materials for quick realism and procedural to add dirt/damages.
The random output from the 'object info' node allowed me to work on only one house while the other instances were being automatically textured with diversity.

The house shader combines PBR materials for quick realism and procedural to add dirt/damages.
The random output from the 'object info' node allowed me to work on only one house while the other instances were being automatically textured with diversity.

The running kid animation, as well as the two football players in the background, were downloaded from mixamo.com and linked to my models. 
I didn't bother with the top of the body since only his feet mattered in this scene.

The running kid animation, as well as the two football players in the background, were downloaded from mixamo.com and linked to my models.
I didn't bother with the top of the body since only his feet mattered in this scene.

I sculpted the feet of the kid and then painted the textures for the nails and under-feet masks.
The rest of the shader is procedural for achieving the skin look and the dirt effect.

I sculpted the feet of the kid and then painted the textures for the nails and under-feet masks.
The rest of the shader is procedural for achieving the skin look and the dirt effect.

The public is created through geometry nodes by randomly instancing a collection of people and another one for the panels.

The public is created through geometry nodes by randomly instancing a collection of people and another one for the panels.

The people collection is made of very basic human shapes.
For the textures, I applied different pictures of people using 'project from view' UV unwrapping.
For movements, I keyframed simple shape keys on the mesh and set it to cycle in the graph editor.

The people collection is made of very basic human shapes.
For the textures, I applied different pictures of people using 'project from view' UV unwrapping.
For movements, I keyframed simple shape keys on the mesh and set it to cycle in the graph editor.

Here you can see the reference collection that I used. The images were found on Google and organized together using Pureref.

Here you can see the reference collection that I used. The images were found on Google and organized together using Pureref.