Make Your Own Normal Maps

FacebookTwitterGoogle+

On our trailer for “Perfect American”, a project we completed for Chicago Opera Theater, our main character was created completely out of stacks and stacks of animation paper. Since paper and the way it crumples and folds can be so unique, it wouldn’t be easily duplicated with a procedural texture. While other paper textures do exist, we thought it would give us the most control to create our own. Plus, making your own stuff is cool! Heres the rundown on how to make your own normal maps.

So why normal maps? We knew that getting the unique deformations of paper built into the geometry of a rig would have been greatly improbable based on our time frame and our resources at hand. Nothing is impossible, but we needed a fast solution that would give the illusion of paper, without all the headache of perfecting the dynamics and extremely dense geometry. Combining a very organic texture with another feature of paper, it’s backlighting properties. Together, we could create some highly realistic looking paper without a dependency on high poly-counts. I will say these maps were pretty quick and dirty, but the definitely achieved our look.

A forewarning, I am not a texturing master, but here is my loose understanding of normal maps in 3D programs. They are RGB images that tell the material which direction light should bounce off it, equating to the geometry’s XYZ normals. The are similar to bump maps in that they add depth and surface deformations to an object without altering the geometry in any way. A bump map is a gradient of depth, while a normal map shows how light reacts from glancing angles. If you want to hear a better explanation from more educated sources, try these:

Polycount, and Wikipedia

So, with some brief internet searching and help from some other members of the Reel Cap team, we put together some quick maps to get us that organic feeling, fast.

Step 1: Get stuff and photograph it!

We took sheets of regular copy paper, crumpled and smoothed it. We setup and overhead rig to shoot from above, with two separate lights.We used two LED lights placed 90 degrees apart from the subject, one being our “top” and the other being “left”. The goals here were to sample what light looks like from two sides independently. Taping down the edges and placing the lights at and angle so we didn’t get any long shadows casing across the paper.  We only wanted to darken the faces away from the light, and light the faces towards the light. Contrast was the real key, getting as much light information in these shows as we could. You might also want a third photo with more ambient lights to get a solid diffuse channel to accompany your normal maps. We forgot that part.

Normal Map CreationNormal Map Creation

Raw Lighting

 

 

 

 

 

 

 

Step 2: Crop and Align.

We pulled the photo pairs into After Effects, simply because it’s a much faster, non destructive workspace. All of these techniques could easily be applied in Photoshop or any other photo editor. Crop and align the photos as necessary, making sure your photos are still aligned perfectly. Copying and pasting Position Scales and Rotations is highly recommended.

Crop and Align

 

 

 

 

 

 

Step 3: Correct Lighting

Inevitably, there will be some falloff form your lights. Creating a simple gradient, setting it to overlay and adjusting it’s opacity can help negate that effect some. Using a quick adjustment layer with a posterize effect can help you balance out that lighting, but really just eyeballing doesn’t hurt anybody.

Correct Lighting

Step 4: Split Channels

So why two light angles? Well, we need one angle to represent our Green channel (top) and the other for our Red channel (left). In our brief research, it seems there are no industry standards to which direction should be which channel, and lucky for us, Cinema 4D is comfortable with Green being top down, and Red being from Left to right. Blue is technically the “depth” but we’ll deal with that in a second. Using curves, I dimmed a little bit of the contrast so we didn’t have any perfect white or perfect black areas. The tint for the red channel maps the black to 0,0,0 (perfect black) and the white areas to 255,0,0 (complete red). I used the levels to shift the contrast a little, as a tweak.  It’s important to note that we’ve stayed in 8-bit color space. Normal maps don’t function outside of the 0-255 color range, so anything beyond 8-bit will shoot their values far beyond what any 3D program would be expecting.

Red Channel FX

Step 4: Split Channels

Compositing Our channels. Assuming everything has gone correctly up to this point, it’s as simple as stacking them and setting their blend modes to “add”.  Almost. Combining our Red and Green channels with a simple Blue (0,0,255) solid. In normal maps (from my loose understanding), the blue channel is a depth (Z). It only ranges from 127-255, which denotes the plane and out in the direction of the faces normal (maybe). Red being X and Green Being Y. The function of the Add blending mode will take care of all the math required to keep our values in the expected range, and you should finally have an output that looks familiar.

Sample Normal Map

 

 

 

 

 

 

 

 

From this point out, I was very non-scientific about the adjusting. Tweaking those levels adjustments in each channel to try to balance out the final map. Exporting samples and testing them in

Plane Flat RenderPlane Normal Render

Plane Hardware Render

 

While this doesn’t give up the End-all Be-all render look. It got us as close as we needed to while protecting us from some giant render hits. Making them ourselves saved tons of time hunting through websites, trying to reconstruct them from RGB textures, or fighting with procedural shaders to get something that looks sort of like real life. It took a couple hours to make 9 unique maps, that we could implement easily and added virtually no render time. It’s a no brainer.

I hope you enjoyed this walkthrough. It was a lot of typing.