View Full Version : normal map render tree help

12 December 2007, 10:58 PM

How do you setup a node structure in the render tree that affects the strength of a normal map based on the distance from the camera? For example if I have an object close to the camera with a normal map applied, that map renders at 100%, but an object further away renders its normal map less than a 100% - say 15% strength. The reason Iím asking is to cut down flicking on the surface of objects further away. Someone showed me how to setup a node structure for bump maps, but normal maps seem to use a different node type so it doesnít work the same way.

Appreciate any help.

12 December 2007, 12:45 AM
normal maps aren't elevation maps, hence they don't have a "strength". They provide the surface with a custom normal to shade by, as simple as that, and that means they don't have the same flickering issues bumps could have, or more precisely that they aren't solved the same way if they present themselves.

flickering/frying issues can be treated the same way you can do with normal colour maps and similar items, by mipmapping etc.

12 December 2007, 04:39 AM
So youíre suggesting having several versions of the normal map, each one blurred to a different degree, which XSI switches to as the object gets further away from the camera?

Is there a node structure that I can setup to do this?

I found a mipmapping option under edit in the image clip node, but playing with the options didnít seem to do anything.

12 December 2007, 01:23 PM
You could set it up to do so, but the easiest way is to use a file format that supports mipmapping natively.
Try converting whatever you're using to pyramidal map files.
Also my advice was to treat it like any sampling problem, which means you can access a wealth of information looking up in forums etc for texture flickering issues, without dealing with it like if it's a bump map.

What's the exact problem you're having by the way?

12 December 2007, 10:47 PM
Well, I have a camera pushing forward down a corridor. I have several surfaces along this corridor with repeating patterns created by normal maps. I also have several small objects and panels with normal maps as well. Now these normal maps sizzle or create noise until they get closer to the camera. I canít turn them off because eventual they come closer to the camera. I also canít reduce or blur the map because you would eventually see the image is of low quality. I wanted the normal maps to be less defined in the distance and then more defined as these surfaces come closer to the camera. This is what I was able to do with the node setup that I was shown with bump maps. Now I could adjust the render settings, but that would add more render time, and I only have one computer to render on. So I thought the best way would be to some how control how the normal maps appear based on the distance to the camera. I know what I want, I just donít know how to get the result.

12 December 2007, 01:40 AM
as I said, look into pyramidal map files and mipmapping, it's exactly what you're talking about but doesn't require any setup to downres maps based on texel coverage.

01 January 2008, 12:41 AM
There is a way to achieve intensity in normal mapping, although it limited. However I'd say that it's easily manageable only with tangent space normal maps. Personally working with object or world space normal maps is a nightmare.

Anyway, with tangent space normal maps, you'll achieve intensity control if you work on the beginning and end of the color range of the red and green channels of the input.

The idea is to avoid modifying the colors in the middle of the range, but modify the dark and light tones. The easiest way to work that way is to simply change the contrast. If you modify the middle-range colors, you'll see a shift in lighting, light will look like it's coming from a different direction. You don't want that.


Now in this example you could drive the contrast value with a vector_state set to eye ray vector, plugged into a change_range, plugged into the contrast parameter. Set the change_range old start and end to whatever value, and the new ones to 0 and 1 respectively.


01 January 2008, 02:50 AM
I appreciate the help from the both of you.

Thank you

CGTalk Moderation
01 January 2008, 02:50 AM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.