Aaron Van de Weijenberg shared the working process behind the Neo’s Apartment project, shared the technique used to add imperfections, and showed how animation was set up.
I really love the scene where we see Neo in his apartment, asleep at his computer. You can hear Dissolved Girl by Massive Attack playing in the background.
My goal was to capture this scene and the moment Trinity communicates with Neo through his computer, inviting him to follow the white rabbit.
The movie itself is the primary reference, but I wanted more perspectives, so I sought them out and collected everything using PureRef.
PureRef collection of reference images
The more little 3D scenes and dioramas I do, the more I have come to understand the balance between what’s “correct” and what is artistically interesting. What’s important is the essence of a scene, not how precise it is. To get the balance I wanted, there are elements of the actual apartment that I shifted, resized, added, or removed altogether.
For example, there’s a ton of stuff strewn around Neo’s desk but only a few things really matter: The telephone, keyboards, monitors, headphones, peripherals, and some electronic equipment. Some small details are there to give a sense of disarray, but not too much.
Left: Overhead view of the 3D composition. Right: Screen capture from The Matrix (1999)
Finally, the whole scene is sort of crunched inward in an unrealistic way compared to the actual production set.
Left: The 3D composition. Right: Screen capture from The Matrix (1999)
Overhead view of Neo’s apartment
Most things here are based on a cube or plane primitive. That makes these kinds of square-shaped room scenes a bit easier to make. But some things are a little more complex. Neo’s bed (if you can call it that) is a disheveled mattress on the floor. I used three techniques for this:
- Mattress. A beveled, subdivided cube with a displace modifier. The coordinates are stretched along the long axis of the object, so the bed appears like it has a sheet on it.
- Pillow. Another subdivided cube, but with a cloth simulation set to inflate. Then some manual nudges here and there.
- Blanket. A solidified plane, subdivided. I raised the object off the ground, rotated it a bit, and ran another cloth simulation to let it fall with the mattress as a collision object. The result was a crumpled, unmade bed.
Viewport studio shading of the scene with wireframe overlay
To save myself time in the future, I created a geometry node setup that generates books. I can set the thickness, width, height, and title with the modifier’s inputs.
“Simulacra and Simulation” and other books made with Geometry Nodes
Everything really should be beveled. Nothing in real life is perfectly sharp, But I am a big fan of beveling beyond what’s natural, but not so much that it starts to have that Play-Doh cartoon look. Some proportions are exaggerated to make objects a little more fun or noticeable. Real life is already full of real things. I enjoy escaping from that a bit.
No sharp edges!
Colors & Shading
For colors, I’ve found things look and feel better with a small number (less than 8) number of colors to work with. Sometimes I’ll come up with a palette and then “snap” things to the nearest color they would be in reality. But that’s not a rule.
One useful trick when there are lots of similar objects is to have a material randomly select from a small set of colors. All the books in the apartment are one of three colors:
A material that assigns a random color. Colors (and their probability) can be easily determined with the Color Ramp node
Neo’s apartment is dirty and run down. I really didn’t want to use realistic textures for this, so I went with a technique I’ve been experimenting with lately using noise textures (or any 4D texture) to drive color and bump variations. But the trick is to use a Snap node between them to introduce banding (this works great for making camouflage textures by the way). I find it adds some nice imperfections while maintaining a stylized feel.
A touch of stylized grunge and peeling wallpaper created with noise, and the Math>Snap node
I use the same technique for the floorboards to create a wood-like texture, but not too realistic.
Floorboard wood texture created with noise, stretched along one axis
Finally, I like to use some volumetrics to add a vibe. Volumetrics is something of a secret weapon, but once discovered it’s easy for a beginning artist to overuse it. I went through that phase.
Here, I added a little bit of volumetrics to a cube that contains the entire scene. It helps attract the viewer to the desk and door area (the lamp and emissive materials contribute most to the mood there).
Volumetric node setup
Storytelling with Animation
I thought about stopping here, but I didn’t want to make a “3D room.” There are millions of those out there. I like to add some storytelling and creativity to them.
Going back to the scene in the movie, I love the effect of the computer text as a little device that transitions the viewer between the Matrix and the simulated world (the one that Thomas Anderson/Neo currently lives in). I thought this could be the introduction to the scene – and the moment at which the entire story loops.
Shader setup of the computer text
The question was how do you get the viewer back to the text to start the loop over? The answer was the door. All that was needed was to emit a green glow from the hallway, representing the Matrix itself. Follow the white rabbit.
Because the scene uses an orthographic camera (to get that isometric look), you don’t have access to any notion of focal length. So you can’t really zoom out, and moving the camera as if it were on a dolly doesn’t do anything either, because orthographic cameras essentially have an infinite focal length. But you can fake a zoom by animating the orthographic scale.
Here’s the animation setup for the camera. In the graph editor on the left, the red line is the orthographic scale. It starts out small (”zoomed in”), then grows larger so you can see the entire scene, then gets small again. The green graph shows its velocity along an arc-shaped path it is following. The steeper the line, the faster it is moving along that path.
Animation graph of the camera’s orthographic scale and path velocity
Finally, the camera is given a Track To constraint, so it is always facing a specific object (the orange sphere object shown in this video). It works kind of like a magnet for where the camera is pointing. This tracked-to object starts out positioned on the text and moves to the door opening.
You may find these articles interesting