Dot3 bumpmapping and specular

Is it possible to do, on a 4 texture units cards, dot3 bumpmapping and specular lighting in one pass without using shaders/programs ??

I really don´t know how you want to do bumpmapping without shaders, at all (cause register combiners etc. are shaders, even if they are really simple ones).

And no, it´s not really possible, only when you are satisfied with very low quality bumpmapping and specular.

I do it in 2 passes on my Gf 4200, that works pretty well, but specular lighting is still a pain in the butt without real fragment shaders.


You’re going to have to use some kind of “shader” if you want good and/or real bumpmapping. I think you can do some of the fake bumpmapping techniques like emboss bump mapping without them. I’ve never done emboss bumpmapping so I can’t really say much.

I’ve noticed that on a Geforce 3 or 4 ti card, the best way for specular is to use a lookup texture with the texture shader extension. Doing specular in the combiners just doesn’t look very good at all. It’s better than no specular, as specular really helps an image look good, but still texture shaders are the way to go on those cards for that.


Actually dot3 bumpmapping does not look too bad. I guess I can probably add the specular factor with another pass and blend.

I want to stay away from register combiners as I want to use a non shader solution that will work on ATI and NVidia hardware.

Shaders will be next.

you can actually do diffuse + specular bump mapping with arb combine and dot3 in 1 pass 4 tex units, but that requires using crossbar, some pass-through mechanism and limiting exponentiation of the specular term
one thing i really do not understand is, why cant we have access to secondary color for combine? that would have made things much easier
beware crossbar is not supported on nv vid cards
if you want to add shadows and ambient term then you really want to go for 2 passes or work with shaders

nVidia drivers supports opengl 1.4 where the crossbas is core… the only thing stopping them from having crossbar in the extlist is that it requires that nonactive textureunits should return 1, and nvidias HW returns 0, so in the core spec they say its undefined and therefor they support that instead.

That’s not quite it: the extension spec says texture blending is disabled if an inactive texture is sourced; the NVIDIA implementation returns 1 but doesn’t disable blending.

The NVIDIA extension discussion of crossbar says that “if you look for this other string, instead, you can use Crossbar, as long as you don’t mind inactive units returning 1”. I believe the string is NV_texture_env_combine4.

Thus, look for one of these things:


If any one of them is present, then you can source other texture units in texture environments.