Discussion about plastic bump mapping ...ooops ...dot3 bump mapping

Well dot3 bump mapping is a linear algebra wonder , ok i agree , it makes color shines , but why everything that uses dot3 and normal maps looks like plastic ??
i´m not saying that is a programmer´s fault(my engine´s dot3 bump map also makes things look like plastic too , specially the half-vector specular factor…)
Look at doom III , it´s a great engine but things do looks like plastic , except for some textures and the characters…
check out some japanese games not so new , as soul calibur for dreamcast … the floor textures looks shiny , great , and gives the sensation of a real thing …i believe that there is dot3 for the light calculation …but the did it so sweetly …
other exemple is the new ninja gaiden for xbox …what are those graphics man …
check out at www.multiplayer.it , and search the page for ninja gaiden …it´s worthy

so this post is a discussion of …how to make things looks real ? should we lock our artists in a cage until they gave nice textures and normal maps that don´t create a “plastic world”

or should we change our programming …

also if you don´t like the graphics of soul calibur and ninja gaiden and thinks that doom III has thee graphics , it´s your space too

see ya !

Maybe I didn’t see the same screenshot, but the only one I could find (that had a reflective floor) in those Ninja Gaiden shots looked, well, like plastic

I’ll take the plastic D3 shots over the cartoony Q3 shots anyday, but thats just my oppinion. To me it’s a step in the right direction.

Take a light, and shine it on a worn wooden desk. You’d be surprised how much it strikingly resembles plastic. Alot of things in real life really do look like plastic if the surface is smooth enough, and you shine a light on it. Thats just specular in action.

The problem may be though, that engines like D3 don’t fill in the rest of the light equation (like enviromental reflection, radiosity, etc), that the eye needs to fill in that reality gap. But doing the full direct diffuse/specular equation is definitely better than the standard lightmap lighting so popular for the last 4-5 or more years (again, maybe just my oppinion ).

[This message has been edited by John Pollard (edited 03-27-2003).]

Check out BRDFs (there are some papers and demos on developer.nvidia.com)


Plastic is a surface that has alomst 100% diffuse characteristics. The common Dot3 bump mapping involves lighting computations that only takes into account diffuse reflectance. It’s not surprising that if you ignore specular contributions, you get plastic. You’d get the same look if you just used diffuse lighting without bump mapping, though the added detail of bump mapping makes it stand out more.

As for the quality of rendered graphics, it is still dominated by the quality of the underlying image map. Eventually, as more people start using shader effects, this will shift somewhat, but you will still need a good, high-quality image map to use.

[This message has been edited by Korval (edited 03-27-2003).]

Yeah, the plastic disease bugs me too. One problem is that people can’t get free specular exponent with dot3 lighting on older hardware. Usually they end up with something like 32 for all materials, which is, well, plastic. Another reason is just plain bad art. A common mistake is to make a flat diffuse map, because “lighting is taken care of by the normal map”. Unfortunately that lighting is just not enough to create good looking materials. With just diffuse textures the artists would bake all kinds of ambient lighting and self-shadowing into their textures, that’s why they often look better.

I suggest you read (or have your artists read) some texturing tutorials from for example http://www.highend3d.com , those non-realtime people have a lot more experience on per-pixel lighting than the realtime folk.


Hey John , look at this NG shot :

There´s some more at

Ninja Gaiden rlz !

sorry way off topic …
but john could´t find screens …and ninja gaiden screens must be seen

Cool pics. It doesn’t look like plastic at all !
It looks like rubber.

The reason lots of bumpmapping looks like plastic is that the specular color always is white. So you get a purely diffuse material with a shiny covering with a white highlight: plastic. You can get much better results by using a specular colour and/or using a better exponent (higher or lower, depends on what you want it to look like).

Originally posted by harsman:
The reason lots of bumpmapping looks like plastic is that the specular color always is white.

That’s interesting, I’d never thought of that. Looking at those ninja shots, they obviously don’t use PPL, so I guess that’s why they look less plastic to you.

Now, to get this discussion on the right track, this doesn’t look like plastic, and neither does [url= [this](http://polisci.wisc.edu/~whizzo/images/St.%20Antoine,%20Brux.jpg) . Thanks to whoever took those photos, I just found them on google. Looking at computer generated images isn’t the way to understand realistic shading, you should know better than that.

Some of the obvious differences between these photos and the usual computer graphics are higher range of lighting and lack of repetition. If you look at the brick wall in the gargoyle picture, you can see that if you had a diffuse texture of it, it would contain many shades of red and blue, and lots of variance altogether. A corresponding bump map would be very subtle. The other picture looks like the materials would be easy to make, but somehow you just never succeed…


Edit: The links, what else

[This message has been edited by JustHanging (edited 03-29-2003).]

This is funny.

Originally posted by vincoof:
Cool pics. It doesn’t look like plastic at all !
It looks like rubber.

Few shaders modulate the specular highlight well and often crank up the exponent and intensity because the highlights look ‘cool’ that’s why things look plastic. Look around you, almost nothing has any kind of specular highlight except gloss paint, plastic, and metal.

Phong is a flawed model but can look OK if you shade the terms correctly and don’t over use it, there’s a LOT of flexibility. There are other lighting models if you want something that’s more rigorous, but they can still look plastic if you abuse them.

In summary, shiny things look plastic to us because almost everything we see that is shiny is plastic or glossy paint.

If you look at hair and skin, they both have specular terms, although hair usually hugher value and exponent; skin usually lower value and very low exponent.

Of course, skin also has a sub-surface term…

Look around you, almost nothing has any kind of specular highlight except gloss paint, plastic, and metal.
This is opposite to my observations: IMO great majority of human-made materials show some kind of specular highlight. On surfaces other than metal and plastic it is often harder to detect because of fresnel effect, which appears to be very common in real world.

There are materials which seem to be 100% diffusive only, but at certain view angles (hence the fresnel), in certain lighting (relatively strong light may be needed), they show specular highlight:

  • paper : I mean not shiny and slick paper like it is in magazines (such is obviously very reflective), but regular paper from book or notepad. At extremally “tangent” view directions it has pretty good specular highlight. Experiment: take a sheet of paper and put it’s edge close to your NumLock LED of your keyboard so that the sheet is almost tangent to line Eye–LED. Try to move your head or sheet slightly, and this will convince you that you are seeing fuzzy, but geometrically true reflection (not any kind of silk-like effect).

  • asphalt : At night, reflections of car lights in asphalt are very well visible.

  • wood plank : fuzzyness of highlight simply depends on how well polished the wood is.

  • concrete : It is one of hardest to see. Watch movies carefully: look for sunny day scene, large areas of pavement, airfield, or number of aligned walls of large buildings. Camera must be moving. Of course there is no particular highlight of any detectable shape, but just slight change in brightness, which is definitely view dependant. I would risk to approximate this with very low-intensity and very low-exponent Phong highlight + subtle fresnel modulation.

I agree with MZ.

We have local diffuse computations down perfectly; the precise equation is both known and widely used in graphics. So why isn’t that enough?

One reason is that we need global illumination. But, even with that, you don’t get a correct look to materials. You need a specular component to achieve photorealistic looks.

The key is, of course, how much. First, Blinn, Phong, these are hacks. They’re not going to get the job done. You need a real specular function if you want to avoid looking like plastic.

Second, anisotropic. While most objects have some specular characteristic, they don’t look the same from any angle. Some of this is encoded in good specular functions (Fresnel), but some of it is due to the details in the material itself. Cloth materials, for example, needs to take into account the view direction for specular lighting (as well as anisotropic for the light direction on the diffuse calculations).

Originally posted by Korval:
We have local diffuse computations down perfectly; the precise equation is both known and widely used in graphics.

Really? If you mean the lambertian cosine term (or whatever it’s called, the default dot product stuff anyways), I doubt that it actually recreates the diffuse charasteristics of normal materials. Reasons:
-It assumes a perfectly smooth surface. Shouldn’t perfectly smooth surfaces be completely specular, in phongian terms. Why is this wrong? Well, if you stick a lightsource very close to a wall, it will only illuminate parts very close to it, because elsewhere the cosine term approaches zero. But if you have a bumpmap on the wall, it will get illuminated elsewhere too, because of the bumps. Now if you scale the bumps down to simulate micro variations in the surface (the ones that actually create diffuse lighting), you stop seeing the actual bumps, but the light’s still there. Well some of it is removed by self-shadowing, but still, I doubt that the dot product gives a sufficent result.
-At least most realtime renderers don’t apply exposure to their images, so using physically logical formulas doesn’t create a visually correct image.

In practice both of these things makes the dark areas too dark. If you look at the real world materials, there’s usually a sharper step from illuminated parts to the dark ones, and the gradient on the illuminated areas isn’t as strong as in computer-generated images.


Reflection from hair is anisotropic, no model will shade it correctly unless it supports anisotropy. Skin is complex because of the subsurface contributions, it would look better than 90% of attempts out there if as you say you had a small contribution from a low exponent specular. To us though it would probably still look slightly rubber (or like thick makeup) because we’re good at looking at human skin.

[This message has been edited by dorbie (edited 03-30-2003).]

MZ - I suppose it depends on the environment you’re in.

My point was not that everything is there in Phong, it’s a flawed model, but that not everything need look plastic. Often it suffers from poor use. Imagine the basic equation (using the half vector too) where each term has an independent modulating texture and materials have appropriate exponents and overall specular levels. That can look pretty good.

Yep for shiny stuff Fresnel terms are important, but so are reflections which you obviously know making statements like that.


You are wrong about diffuse, we don’t have it down (at least the way most lighting models work). Very few things actually exhibit the Lambertian reflection model. Don’t believe me? Look at a half moon in the night sky and tell me what you see, it sure ain’t a lambertian diffuse result. Published work exists on improving on the Lambertian L.N .

There are some methods for computing more realistic diffuse lighting (even non-local diffuse effects seen in offline global illumination rendering). One way is through the use of precomputed radiance transfer using spherical harmonic basises. Check P.P. Sloan’s web page for the paper and sample movies: http://research.microsoft.com/~ppsloan/

The great thing about using this method is that it isn’t necessarily too much more expensive to compute at run-time then the normal lighting that most people use in their engines today (also evaluating the SH basis functions only requires DOT3 functionality in hardware). It is little more expensive in the memory domain though, it requires more texture memory… but it’s well worth it as the results are amazing.

Another good one: google for “An Efficient Representation for Irradiance Environment Map” by Ramamoorthi and Hanrahan.

Something that might be of use to others…

When I was doing research in per pixel lighting for my terrain engine, I found something interesting about normal maps…

It is that I was able to use the values directly from the normal map into glNormal3xx without the need of a normalising cube map and what not. When I create my normal maps, and go though the whole thing of converting from unsigned char to float and stuff and I divide by that 255?
Well, I made that 255 a variable, and the lower the value, the longer the normals, and with a value of about 70, instead of 255, I got a fairly good lighting on my terrain without having to use the plastic looking dot3. It looked fairly good and did not look plastic at all.

Well, I have not tested this with anything else but with my terrain engine. So, someone that has a ready to go test should try this of dividing by a smaller value.

Miguel Castillo.