Shot breakdown: Enter The Zombie (Matrix)

Over the weekend, I did another shot for Enter The Zombie (previously discussed here)…

This shot was the be the ‘matrix code raining’ shot:

Matrix rain image

This shot went through 3 stages. I realised from the start that it would require some element of 3D, although I was hoping to minimize that. I started on getting the matrix rain working. I did this with a few shake macros that I wrote specially (if people are interested, I can put them up on here… I do warn you - they are very slow). I rendered out 5 different rain strips (200 x 576 each) that I could then pick and choose from later:

Matrix rain image

I then created the 3D model of the head. I only had the front image to work with on this, but I knew that it didn’t have to be exact - just give some idea of the curvature of the head. I set the texture projection on this to be planar, rotated just off to one side of the camera. I rendered this out as UV values, which I could then use later to project a texture onto in Shake:

Head UVs
(This was actually done as three seperate sections - head, neck and shoulders)

I could then project the rain onto the 3D model in Shake to give some sense of the contours of the head. To give some semblence of texture to it, I multiplied the result of this by the luminance of the original plate. Without this, it looks like, funnily enough, a crappy 3D model with green matrix rain projected onto it:

Textures projected onto the head

Straight corner-pinning was enough for the walls. Again, I multiplied the rain by the luminance of the original plate (which is why you can still see the person in this shot):

Textures projected onto the walls

And, finally, I added a transition from the code to the real image. For this, I spent a lot of time watching this shot from The Matrix Reloaded, to try to get it as close as possible to what they had. The main elements that I brought through were the green glow that remained on the skin, and the pixelization. My pixelization was just that, while they had shadows on the pixels so that they felt like they were falling into place. Also, their green glow still had elements of the code in, which I didn’t manage to keep. The final shot is, though, a reasonably good representation of the film’s, and was fun to do (in 1 day, too!):

The final sequence

There is also a video breakdown of the shot, which can be viewed here

Any questions, do ask - it was a fun shot to do!

13 Responses to “Shot breakdown: Enter The Zombie (Matrix)”

  1. Patrick Nagle Says:

    Hey, Cool stuff man,

    I have been looking for a way to project a texture on to the UV vals on a 3d model inside of shake.

    It would be awsome if you could post the macro’s or email them to me if possible

    -Thanks Pat Nagle

    nagle.p@gmail.com

  2. Hugh Macdonald Says:

    I’m afraid I can’t do that….. It’s an internal plugin here that we use - not something I can send out….

    That said, I will have a go at putting something together to do this myself….

  3. Hugh Macdonald Says:

    Okay - so it wasn’t too hard to roll my own…..

    It’s two nodes:

    Resize the texture you’re projecting to the same size as the UV image
    DisplaceX node with the resized texture as the foreground and the UV image as the background
    In the DisplaceX node:

    xExpr : r * Foreground.width
    yExpr : g * Foreground.width

    (This is assuming your UV image has red representing x and green representing y)

  4. pat nagle Says:

    hey hugh,

    i finally got it to work, very intresting stuff man thanks for the tip i have been looking for that kind of trick inside of shake…i guess its sort of common sense when you think about it! But any ways….any other tips on relighting cg that you could leak? Maybe a little bit on tweeking normal passes and relighting cg objects?

    -P.Nagle

  5. Žiga Says:

    quite nice… but I think that the shot would look much better if the matrix code strips would not fill up the whole column…how would I explain this…try making sequences of code fall down, and then another sequence… like shorter lines of code, not one continous line…

    Hope you know what I mean ;)

  6. Hugh Macdonald Says:

    I think that makes sense - in the title sequences to the matrix films, this is how they did it - but in the shot I was trying to replicate, it did actually happen like this - code just filled up the screen and then the transition happened…

  7. Aruna Says:

    We use the same technique over here. I described how it works in my Hellboy Q/A Case Study on VFXtalk. I wrote a little macro for the team that uses the renders above and allows us to texture map onto the geometry in shake. All the artists have to do instead of using displaceX and fmod and the like is to bring in the macro and push and pull the sliders. Also has separate inputs for mattes and other types of color channels. Works wonders! I’ve been using it since Hellboy, and I’m sure the rest of the department uses it much more frequently now. Makes for tracking stuff to digital doubles much easier in comp!

    If you add an Fmod and an Add in there Hugh, you can roll the texture around the object. Sweet stuff. ;) All that’s left is to add a matrix to allow rotation, and I’ll be done.

  8. Hugh Macdonald Says:

    I’d imagine it’d be much easier to do that kind of transformation on the input image rather than the UV pass… A Scroll node can quite happily do the panning around, and the nodes pasted after this chunk can do the rotating (the extra nodes are to make it rotate so that what goes off one side comes on the other…)

    Window8 = Window(0, 0, 0, width*3, height*3);
    Move2D8 = Move2D(Window8, width/3, height/3, 0, 1, 1, xScale,
    0, 0, width/2, height/2, “default”, xFilter, “trsx”, 0, 0,
    0.5, 0, 0, time);
    Move2D10 = Move2D(Move2D8, width/3, 0, 0, 1, 1, xScale, 0, 0,
    width/2, height/2, “default”, xFilter, “trsx”, 0, 0, 0.5,
    0, 0, time);
    Move2D11 = Move2D(Move2D8, 0, height/3, 0, 1, 1, xScale, 0, 0,
    width/2, height/2, “default”, xFilter, “trsx”, 0, 0, 0.5,
    0, 0, time);
    Move2D12 = Move2D(Move2D8, 0, -height/3, 0, 1, 1, xScale, 0,
    0, width/2, height/2, “default”, xFilter, “trsx”, 0, 0, 0.5,
    0, 0, time);
    Move2D9 = Move2D(Move2D8, -width/3, 0, 0, 1, 1, xScale, 0, 0,
    width/2, height/2, “default”, xFilter, “trsx”, 0, 0, 0.5,
    0, 0, time);
    Over8 = Over(Move2D9, Move2D10, 1, 0, 0);
    Over9 = Over(Over8, Move2D11, 1, 0, 0);
    Over10 = Over(Over9, Move2D12, 1, 0, 0);
    Over11 = Over(Over10, Move2D8, 1, 0, 0);
    Rotate1 = Rotate(Over11, -60, 1, width/2, height/2, 0, 0.5, 0);

    Modifying the colour values of the UV pass may well be faster than this, though…. and more interesting to put together!

  9. Justas Says:

    Hello. This is exactly what I searched. Can you tell what programs do you use to create this effect? I need to create short movie in other weak..so if someone can help me. Please. Thanks. Justas

  10. Ash Retallack Says:

    Just the effect I need.

    Could you post up the shake macros for the rain?, or email them to me?

    cheers

    Ash

  11. Hugh Macdonald Says:

    Sure - will do - will put them all together and post them at some point later today….

  12. KEONG Says:

    pls send me the matrix macor script,

    thanks

    chee-keong_hiu@astro.com.my

  13. Aspenglade Says:

    Hi there, was just wondering if you got around to putting up those scripts at all. If you could email me them I’d appreciate it. aspenglade at gmail dot com

Leave a Reply

You must be logged in to post a comment.