Skip to main content

normal mapping tut

Submitted by Ionized on
Forum

Hey all,

Just thought I'd let you know. I've posted up a tut on normal mapping. Might be useful to those new to it.

[url]http://www.ionization.net/tutsnorm1.htm[/url]

Submitted by J I Styles on Thu, 25/09/03 - 9:32 PM Permalink

Very nice and concise - good job translating into lamens terms and defining terminology.

One thing I think is missing you may consider doing is explaining how to use the seperate channels to manually refine and detail areas that are overkill to model (veins, perturbed areas, etc). I love using this technique to manage low range details. Also perhaps noting about modelling concave/convex and an overview on modelling relations with the normal rules when ripping (standard normal rules such as neighbour>neighbour, nearest/furthest, etc to keep it generalised and open?)

Anyways, just a few suggestions, great job Ionized.

Submitted by JonathanKerr on Thu, 25/09/03 - 9:44 PM Permalink

Thanks for this. I've been looking into having a go at using normal maps once my computer arrives. A nice, concise tutorial.

Cheers

Submitted by Ninja on Thu, 25/09/03 - 9:51 PM Permalink

DUDE u are a god that is absolutely kool. That puts normal mapping into an even better perspective.

Well done and thankx for great info [:)]

Submitted by Malus on Thu, 25/09/03 - 10:29 PM Permalink

Saw this on CGtalk, nice tut Joel. I will be making a normal mapped model soon..ish, this should help.

Submitted by Ionized on Tue, 30/09/03 - 8:17 PM Permalink

Cheers, thanks guys for your comments :)

JI: Yeah, there a few other things I could have put in. I actually don't do that much with combo bump maps (I think thats what your talking about). The results I've gotten with this method from the ATI mapper arn't that great to be honest. I suppose it's something I should mess around with more. And yes, the different settings for determining ray depth are another thing that deserves some explanation. Great suggestions anyway, maybe I'll do a part 2 at some point. Thanks!

Submitted by smeg on Wed, 01/10/03 - 8:38 AM Permalink

Good tut. Entertaining read.

I wonder how hard it would be to hand paint some of this stuff... I can see how this is brilliant for high -> low poly stuff, but i just find it difficult to comprehend building high poly models simply to make great looking low poly ones. (id software do that don't they?)

If you've got the resources i suppose. (you'd alos end up with a whole bunch of really good high poly models for promotional stuff =D)

cheers

Submitted by Malus on Wed, 01/10/03 - 6:54 PM Permalink

Smeg: I have a feeling ID just build the high poly and Carmacks uber code optimses them to low poly. Correct me if I'm wrong, sounds wrong lol. [:P]

Also Doord said that Irrational paint thier maps by hand for Tribes: Vengeance.

There are quite a few ways of creating the 2 meshes though, make the low then expand on it for the high or make each seperately or even optimse the high one.

Its the new FPS craze though check out some of the games that use it, T:V, Doom 3, Halflife 2, Deus Ex 2, Farcry and Stalker.

Submitted by Sorceror Bob on Wed, 01/10/03 - 9:00 PM Permalink

Malus, I'm pretty sure ID built seperate low and hi-res meshes. You can tell by looking at the silhouettes. But yeah, code optimised meshes usually turn out ugly as anything.

The tribes 3 normal maps are just grey scale bump maps as well. Only working off 2 axis rather than the 3 in doom3.

Submitted by Malus on Wed, 01/10/03 - 10:46 PM Permalink

The silhouettes just show that there are low poly meshes, how can you tell how they were created from them? I just meant I heard that the code generates the low poly mesh as well as the normal map not hand made.

So T:V isn't using actual per pixel lit RGB/XYZ normal maps? Doesn't that then make them bump maps not normal maps?

Submitted by J I Styles on Thu, 02/10/03 - 12:00 AM Permalink

There's 2 methods that apply here:

hand painting emboss pass, or a normalised height pass - height/bump/emboss maps deal with the depth or height. Normal maps deal with angular differences on xyz - a normal map has a few advantages both in visual and code areas, so normalising a height map at runtime is something a few titles have used in the past - so you pretty much have decals and details like you would in an emboss but it's not a complete normals replacement for your lowpoly mesh - it's accentuating either a pp lighting or vertex lighting system.

Submitted by Ionized on Thu, 06/11/03 - 2:09 AM Permalink

I think it would be next to impossible to hand paint a normal map. The human brain just doesn't work that way!

One way to convert a greyscale height map to a normal map would be to copy your low poly mesh. Add your greyscale bump map as a displacement modifier to it in your 3D app and bake that data out to a solid mesh. Then run a normal mapper process over it. Wha-la... no need to model the high poly.

Submitted by Malus on Thu, 06/11/03 - 5:20 AM Permalink

I'd much prefer to model both, you'll never get as good a normal map unless you put the hard work in, but thats just my opinion.

Submitted by Aven on Thu, 06/11/03 - 5:29 AM Permalink

Very nice tute Ionized. You sure know your stuff. Is the page supposed to have purple text on a grey background though? Makes it quite difficult to read.

Submitted by Ionized on Thu, 06/11/03 - 10:22 PM Permalink

I totally agree malus. But for those with no high poly experience it may be a place to start experimenting.

Aven... I'm seeing black on grey... hmm... check monitor?[8]

Submitted by Aven on Fri, 07/11/03 - 12:13 AM Permalink

Hmmm. Checked again. I don't think that my LCD is that messed up after a year :p

[img]http://home.netspeed.com.au/mlanham/ionization_colours.jpg[/img]

Screen Cap. All your other pages have white text, and they are easy to read. The Normal Mapping tute though... All the pages of the tute have purple text as well.

Using IE 6 (w/ latest updates). How odd.

Submitted by Malus on Fri, 07/11/03 - 12:52 AM Permalink

All worked fine on my screen.

Submitted by souri on Fri, 07/11/03 - 2:18 AM Permalink

The text that appears between the paragraph

tags don't have a font colour assigned to them. I think IE defaults to black if it doesn't find any, so most people will see that text as black. It's strange that yours shows up with that colour though. Anyway, Ionization can fix it up if he puts something like this on all his pages:

p {color: #000000}

There are other places where tags don't indicate a colour either, so same problem as above. Should indicate colour in the font tags, or better yet use style sheets.

Submitted by Aven on Fri, 07/11/03 - 3:39 AM Permalink

I would love to check that, but unfortunately my 'View Source' tool in IE is buggered. It just does nothing. Thanks for checking that Souri. You are right, CSS is the way to go.

Submitted by Ionized on Tue, 11/11/03 - 3:51 AM Permalink

Thanks muchly for bringing that to my attention Aven. Damn, thats wierd. I can see now why it would be hard to read ;)

Thanks for the tag Souri. Now that I look at it, it's kind of wierd that the colour of the text on the front page is white, while the tutorial text is in black. I think I might just change all the text to white and be done with it.

Posted by Ionized on
Forum

Hey all,

Just thought I'd let you know. I've posted up a tut on normal mapping. Might be useful to those new to it.

[url]http://www.ionization.net/tutsnorm1.htm[/url]


Submitted by J I Styles on Thu, 25/09/03 - 9:32 PM Permalink

Very nice and concise - good job translating into lamens terms and defining terminology.

One thing I think is missing you may consider doing is explaining how to use the seperate channels to manually refine and detail areas that are overkill to model (veins, perturbed areas, etc). I love using this technique to manage low range details. Also perhaps noting about modelling concave/convex and an overview on modelling relations with the normal rules when ripping (standard normal rules such as neighbour>neighbour, nearest/furthest, etc to keep it generalised and open?)

Anyways, just a few suggestions, great job Ionized.

Submitted by JonathanKerr on Thu, 25/09/03 - 9:44 PM Permalink

Thanks for this. I've been looking into having a go at using normal maps once my computer arrives. A nice, concise tutorial.

Cheers

Submitted by Ninja on Thu, 25/09/03 - 9:51 PM Permalink

DUDE u are a god that is absolutely kool. That puts normal mapping into an even better perspective.

Well done and thankx for great info [:)]

Submitted by Malus on Thu, 25/09/03 - 10:29 PM Permalink

Saw this on CGtalk, nice tut Joel. I will be making a normal mapped model soon..ish, this should help.

Submitted by Ionized on Tue, 30/09/03 - 8:17 PM Permalink

Cheers, thanks guys for your comments :)

JI: Yeah, there a few other things I could have put in. I actually don't do that much with combo bump maps (I think thats what your talking about). The results I've gotten with this method from the ATI mapper arn't that great to be honest. I suppose it's something I should mess around with more. And yes, the different settings for determining ray depth are another thing that deserves some explanation. Great suggestions anyway, maybe I'll do a part 2 at some point. Thanks!

Submitted by smeg on Wed, 01/10/03 - 8:38 AM Permalink

Good tut. Entertaining read.

I wonder how hard it would be to hand paint some of this stuff... I can see how this is brilliant for high -> low poly stuff, but i just find it difficult to comprehend building high poly models simply to make great looking low poly ones. (id software do that don't they?)

If you've got the resources i suppose. (you'd alos end up with a whole bunch of really good high poly models for promotional stuff =D)

cheers

Submitted by Malus on Wed, 01/10/03 - 6:54 PM Permalink

Smeg: I have a feeling ID just build the high poly and Carmacks uber code optimses them to low poly. Correct me if I'm wrong, sounds wrong lol. [:P]

Also Doord said that Irrational paint thier maps by hand for Tribes: Vengeance.

There are quite a few ways of creating the 2 meshes though, make the low then expand on it for the high or make each seperately or even optimse the high one.

Its the new FPS craze though check out some of the games that use it, T:V, Doom 3, Halflife 2, Deus Ex 2, Farcry and Stalker.

Submitted by Sorceror Bob on Wed, 01/10/03 - 9:00 PM Permalink

Malus, I'm pretty sure ID built seperate low and hi-res meshes. You can tell by looking at the silhouettes. But yeah, code optimised meshes usually turn out ugly as anything.

The tribes 3 normal maps are just grey scale bump maps as well. Only working off 2 axis rather than the 3 in doom3.

Submitted by Malus on Wed, 01/10/03 - 10:46 PM Permalink

The silhouettes just show that there are low poly meshes, how can you tell how they were created from them? I just meant I heard that the code generates the low poly mesh as well as the normal map not hand made.

So T:V isn't using actual per pixel lit RGB/XYZ normal maps? Doesn't that then make them bump maps not normal maps?

Submitted by J I Styles on Thu, 02/10/03 - 12:00 AM Permalink

There's 2 methods that apply here:

hand painting emboss pass, or a normalised height pass - height/bump/emboss maps deal with the depth or height. Normal maps deal with angular differences on xyz - a normal map has a few advantages both in visual and code areas, so normalising a height map at runtime is something a few titles have used in the past - so you pretty much have decals and details like you would in an emboss but it's not a complete normals replacement for your lowpoly mesh - it's accentuating either a pp lighting or vertex lighting system.

Submitted by Ionized on Thu, 06/11/03 - 2:09 AM Permalink

I think it would be next to impossible to hand paint a normal map. The human brain just doesn't work that way!

One way to convert a greyscale height map to a normal map would be to copy your low poly mesh. Add your greyscale bump map as a displacement modifier to it in your 3D app and bake that data out to a solid mesh. Then run a normal mapper process over it. Wha-la... no need to model the high poly.

Submitted by Malus on Thu, 06/11/03 - 5:20 AM Permalink

I'd much prefer to model both, you'll never get as good a normal map unless you put the hard work in, but thats just my opinion.

Submitted by Aven on Thu, 06/11/03 - 5:29 AM Permalink

Very nice tute Ionized. You sure know your stuff. Is the page supposed to have purple text on a grey background though? Makes it quite difficult to read.

Submitted by Ionized on Thu, 06/11/03 - 10:22 PM Permalink

I totally agree malus. But for those with no high poly experience it may be a place to start experimenting.

Aven... I'm seeing black on grey... hmm... check monitor?[8]

Submitted by Aven on Fri, 07/11/03 - 12:13 AM Permalink

Hmmm. Checked again. I don't think that my LCD is that messed up after a year :p

[img]http://home.netspeed.com.au/mlanham/ionization_colours.jpg[/img]

Screen Cap. All your other pages have white text, and they are easy to read. The Normal Mapping tute though... All the pages of the tute have purple text as well.

Using IE 6 (w/ latest updates). How odd.

Submitted by Malus on Fri, 07/11/03 - 12:52 AM Permalink

All worked fine on my screen.

Submitted by souri on Fri, 07/11/03 - 2:18 AM Permalink

The text that appears between the paragraph

tags don't have a font colour assigned to them. I think IE defaults to black if it doesn't find any, so most people will see that text as black. It's strange that yours shows up with that colour though. Anyway, Ionization can fix it up if he puts something like this on all his pages:

p {color: #000000}

There are other places where tags don't indicate a colour either, so same problem as above. Should indicate colour in the font tags, or better yet use style sheets.

Submitted by Aven on Fri, 07/11/03 - 3:39 AM Permalink

I would love to check that, but unfortunately my 'View Source' tool in IE is buggered. It just does nothing. Thanks for checking that Souri. You are right, CSS is the way to go.

Submitted by Ionized on Tue, 11/11/03 - 3:51 AM Permalink

Thanks muchly for bringing that to my attention Aven. Damn, thats wierd. I can see now why it would be hard to read ;)

Thanks for the tag Souri. Now that I look at it, it's kind of wierd that the colour of the text on the front page is white, while the tutorial text is in black. I think I might just change all the text to white and be done with it.