I’m wondering if anyone has any idea how “War Thunder” achieves such excruciatingly detailed ground textures over such large map areas, without consuming countless terrabytes of memory. Take a look at the following video, especially the 2nd battle beginning around 18:40 - especially notice the details in the fields and the dividing areas between fields: http://www.youtube.com/watch?v=iuZuaJdFVxA
It looks exactly like the most detailed satellite photos that are available for certain areas (the ones where you can see individual trees and cars etc), but those normally take up colossal amounts of memory. I’ve played “War Thunder”, and it doesn’t take up obscene amounts of HD space (large, yes, but not as large as many 3D games), and it runs smoothly even on an average machine. And yet it looks like they’re spreading a continuous detailed satellite photo over the entire battlefield.
So how are they producing those textures? I assume they must be extrapolating detail either in the shader, or on the CPU and then passing it to the video card; but it doesn’t look extrapolated, and there’s no possibility of tiling given that it’s the actual ground patterns from real places (i.e., no blocky grid pattern to allow tiles).
I only watched a minute or so, but at the viewing distances shown you don’t really need that much detail. Decent terrain blending and a road system and bits and pieces of custom detail and/or decals look like it’d get the trick done. That’s not to say it’s trivial, as it looks really nice and it’d probably have taken quite a while to get it just right, but with the right tools I think it could be done without too intense a resource requirement.
Did you watch from 18:40 onward? Look at the smoothly blended dividing lines between fields, and the smoothly curving dirt roads, and consider the fact that these are all taken from detailed satellite images - it isn’t a bunch of poly-based shapes stitched together. You can’t just use polys for those shapes unless they’re using a huge number of them. Sure, the insides of the fields could just be textured with a procedural shader; but what about the dividing lines? And look at the vast size of the map.
You can use practically as many polys as you want to render the curved things, and curves themselves are pretty cheap to store. Also, if you store it as curve data defining filled areas then that gives you a pretty easy way to extract many LODs from a single set of data, just as one of many possible ways to skin the cat.
Yes, if you just tried to store all of the detail in a giant 3D model it’d probably suck resources like crazy, but there are other potential approaches.
Terrain Composer looks like a great tool, but the terrain seems to blur as you get closer, does it not? E.g., the boundaries between fields aren’t going to remain crisply defined at close range, especially ground level (I assume) since it just uses a normal splat map. I think War Thunder maintains fairly crisp boundaries between different areas of terrain (and roads etc) even at close range, if I’m not mistaken (I’d have to play it again when I have time and see how crisp the boundaries are).
Terraincomposer doesn’t just use a splatmap, it uses a colormap underneath the splatmap, just like the ats colormap shader. If you use your satellite data in the colormap, the divisions will be as crisp as the resolution you use (I usually use 4096x4096 colormaps). That way the splatmap textures only blend in for detail in the near field when you get close.
You could not have this many different colors or details without dozens of different splat textures loaded into your terrain (which isn’t a viable option), you need to use a colormap:
check element’s post; just download the package and look at the example.
The global colormap is a very large high-detailed image that gets stretched over the entire terrain, and then your splat textures get color-corrected and blended on top of it in the foreground, on terrain wtihin ~600 units from the camera.