Warcraft 3 cliff and ramp rendering

Started by
3 comments, last by toraxxx 10 years, 11 months ago

Hi people. I'm designing a format for a map in my game. I want it to have cliff and ramp, just like WC3. Thing is, I don't know how they make it work. At first I thought WC3 map was just a simple textured heightmap, but then it can have cliffs, ramps, which breaks the rules of standard heightmap. I guessed it was just a simple heightmap underneath, with "procedural" rendering for each tiles (I could see the heightmap layout in wireframe mode in the editor, thus I thought they just render each tile "differently").

Can anyone give me a hint on how to do that? I think I just got a few ideas, but somehow I feel not confident enough. I need the opinions of others. Thank you guys!

This is what I mean by cliff:

44739d1230921253-editing-cliff-skins-cli

and this is what I mean by "ramp" (basically it's a passable passage that connects higher tile to lower tile):

rampstart.jpg

the hardest part is the beginning...
Advertisement

My guess would be that they have a terrain grid, which in most places is a regular heightmap. At each grid-cell though, instead of the regular height-map rendering, they can replace that cell with an artist-generated model. They then get their artists to make a "set" of models, which includes straight cliffs, corner cliffs and ramps.

Their editor then has a bunch of fancy logic that knows how these different models should be connected (e.g. ramp must have cliffs on either side, "inner" or "outer" corners selected based on angles of the straight cliffs on either side, etc) to make level editing easy. At any cell where these models are used, the heightmap terrain is 'stitched' up to the edge of the model on either side.

Well, that's a good idea. I got a good idea to implement it now. But instead of stitch the terrain heightmap, I'll place a "parametrical model", which replace regular tiles. They will draw themselves based on the 4 corner values. Can't wait to implement it next week!!

the hardest part is the beginning...

You can also generate texture coords based on the normals major axis.

Flat ground means normals Y is the major axis, textureCoord = (vertex.x*tileScale, vertex.y*tileScale);

If X is the major axis, textureCoord = (vertex.y*tileScale, vertex.z*tileScale);

It makes texture coords on 3 axis instead of just top down y. You can then decide if the normals x or z is greatest to sample the rock texture.

Realistically though, just make rocks separate geometry, a lot of games do it. You can really notice it in something like Halo3 for reference.

NBA2K, Madden, Maneater, Killing Floor, Sims http://www.pawlowskipinball.com/pinballeternal

Maybe the map specifications (RE'd) can help you find out how they did it (http://www.wc3c.net/tools/specs/index.html). The section about the terrain is at 4) "war3map.w3e" The environment

This topic is closed to new replies.

Advertisement