Multitexturing terrain

One technique for texturing terrain I’ve seen used is the use of seperate textures which are blended together using a larger “blend map,” or terrain attributes (slope, altitude, etc). For example: Different areas of a landscape can be dirt, snow or grass, and the textures are blended together at their edges. I have managed to do something like this using multipass techniques, but it’s much too slow to be of practical use. For one thing, it requires that the scene be transformed once for each pass (is there a way around that, at least?)

I’m very willing to settle on one rule: No more than two textures can exist on the same face or vertex. That is, snow can blend to rock, and rock can blend to grass, but snow, grass, and rock cannot blend together over one face. The add-on to Quake III Arena, Team Arena, supports terrains that follow these same rules. An entirely different game, Earth 2150, also uses similar techniques for rendering terrain. Actually, I was just browsing my “Downloads” directory, and it seems that an amateur coder’s engine, “Heylow,” also uses this technique. Too bad he didn’t release any source!

I have seen how multiple texture units of a video card can be used to perform multitexturing specifically with lightmaps, but I have not seen anything regarding alpha multitexturing, but I assume this just requires the use of an RGBA texture. And I assume these games use alpha channels in some manner. But each texture’s alpha map appears, at least, to be of a much lower resolution than the actual texture. The alpha map is stretched over the entire terrain, while the texture map is tiled.

Hopefully I have described my goal well enough. Does anyone have any idea as to how I could reach it? If I could use multitexturing, I would for obvious reasons prefer that approach.

[This message has been edited by TerranFury (edited 09-02-2001).]

Most of those games that use a seperate blend map use multipass because most video cards only support 2 active textures. You would need 3 active textures to do that technique in multitexture mode. An alternative is to use the alpha of the vertices as the blend factors and use the interpolate combiner that is part of GL_EXT_texture_env_combine. This technique is possible with almost all video cards capable of multitexture (and all video cards using OpenGL 1.3 by way of GL_ARB_texture_env_combine).

[This message has been edited by DFrey (edited 09-02-2001).]

Oh and one thing I forgot to add, if you are stuck using multipass mode, you can use compiled vertex arrays (CVAs) so that the vertices are transformed only once. However, I hear that CVAs may not be of any or little benefit for TnL hardware. I don’t know that from first hand experience so YMMV.

I found useful information about the ARB_multitexture extension. But I still have one question: When a color is specified for a vertex, does it only affect the active texture unit? I ask this because I would like to be able to use seperate vertex alpha values for each texture.

I’m not quite certain why you would want to use multiple alpha values per vertex for each texture. I don’t see any need for more than one blending factor per vertex when only blending two textures. I also can’t see any way for specifying a second alpha value per vertex on most hardware. It may be possible to do that using NVIDIA’s register combiners, or a vertex program however.

You’re right, of course. That, I now realize, was a pretty dumb question.