Ach, I can see I'm not going to get much sleep tonight anyhow... so lemme go ahead and post a few things:
1. If you wanna build neato hills and stuff in L3DT or whatever, I'd strongly suggest then converting the heightmap into a 3D terrain, and then uvmapping with a planar map straight down, so that you can do almost-realtime edits of your map's textures. Then you can set up your textures as a file with a bunch of masking layers, and paint onto a 3D object with proper previews. While L3DT will, no doubt, do a fair job of initial passes, having looked at TwoSeas... I was quite underwhelmed by just how much spotting it does. Spotting is very inefficient with this map format, because each new layer must be rendered per polygon, per pass.
In an ideal world, you'd have no more than two textures per polygon. This would allow for some bland base texture + whatever pretty texture you're using for a given area. Obviously, real-world workflow rarely allows for this, but try to keep that in mind.
2. Texture sizes reeeeeaaaaally matter. This is sort've a "duh" thing, but I think it's worth repeating- keep tile sizes as low as humanly possible.
3. As an article I read recently about painting for Oblivion discussed... with normalmaps, the normal texture is often as important, if not more important, for giving the underlying texture its essential character in terms of value and feel. I've tested using normalmaps at 2X the size of the texture, and it works just fine- so it's quite possible to, for example, create a 128 texture with a 256 normalmap to give it a lot of pop and detail. In this example map, I'll be the first to say that most of the normalmaps were made very quickly and not very well, but if I were being serious, I'd spend quite a bit of time working on them to get them really snazzy. nVidia's tools for previewing and editing normalmaps are quite useful and really help you get a pretty good idea of what it's going to look like in Spring.
4. Need a really specific graphical thingamabob somewhere? The easiest way to place it, by far, is to make a version of your thingamabob as a repeating tile with a black background or mask, and then post a scale version of it onto your map's heightmap at true rez (x2 -1) to see where it's going to land. Then adjust the tile until it's exactly where you want it, delete all copies but the one you need, and delete the mask. Voila... you now have what looks like a perfect hand-painted widget, with a blendmap!
Just keep in mind that each time you do this, you're adding another layer. That's one fundamental limitation of this format that we're never going to get away from, unfortunately.
5. Large normalmaps will quickly saturate a video card. I've done some tests, and if you keep the numbers down, performance is actually pretty good, but it is a problem. Perhaps as JC moves forwards with CE, he'll address this fundamental problem- larger normalmaps would allow for more flexible use of certain types of techniques.
6. Lastly, here are two things that can cause nasty, repeatable crashes. The first thing should just not be happening, imo... the second one really should fail softly, with more information sent to the mapper, but meh, here's what causes it:
Error 1: "blah blah, typemap X is non-existant or bad"
This is caused, weirdly enough, by not keeping the following all together in the file:
Code: Select all
[MAP]
{
Description=Two large land masses separated by two equally large oceans with a narrow pass in the centre
TidalStrength=25;
Gravity=155; //in units/sec^2
AutoShowMetal=0; // 0 no show 1 show
MaxMetal=2.00; //how much metal a map square with the maximum metal value gives
ExtractorRadius=80; //radius that a single extractor(mine) extracts from
MapHardness=1000;
GameAreaW=2048;
GameAreaH=2048;
[INFOMAPS]
{
metal=Maps/seatextures/metal.png;
type=Maps/seatextures/type.png;
}
If you move the [INFOMAPS] section further down, it causes this crash. Took me nearly half an hour to find that one
Secondly, if you get errors about "blah blah, texture stage X does not have a texture", or you get a fatal error saying "misaloc_9", then you've hosed the number and order of texture stages.
This section is extremely important:
Code: Select all
NumTextureStages=6;
AutoBumpmapStages=1;
The NumTextureStages is equal to the number of [texstages] +1. So, if starting at 0, you get to [texstage6], then NumTextureStages = 6. Pretty easy once you know it's vital.
The AutoBumpmapStages thing seems to be almost completely useless, tbh. Setting it to zero results in no bumps, at least for me. Setting it to higher than 1 always seems to cause errors. And on the setting of 1, I see the normalmaps on all texture stages.
Anyhow... getting all of the files properly identified and in the right order is super-vital. I took at least an hour just getting that all figured out and debugged- about as long as I painted this map, frankly. Now that I know what I'm doing, though, it wouldn't be very hard at all. Just make sure to use a new maps/whateveryouarecallingyourtextures folder for each new map, to prevent Spring's very literally-minded filesystem from ever grabbing the wrong texture!