I’m going to talk a bit about how we render the ships in Gemini Wars.
Gemini Wars is real time strategy game in real time, and we want to achieve great visuals in the game so it looks really good.
As such, each ship can have from 20k polys (battleships) to 3k polys (frigates). If we do some math, having 100 ships simultaneously at the screen will become quite prohibitive.
We want the game to be playable in a large range of hardware, and at the same time to look great, but how to do this if we need to render planetary bases, shields impacts, flares, ships, lasers, asteroids, and still do the entire math for physics (calculating weapons impacts, ships maneuvering) and still perform AI calculations?
The answer to this is LODS (level of detail).
Let’s first take a look at this USF cruiser:
This ship is rendered in full detail at close range, using 3 textures (diffuse, normal and illumination map) in the shader, and also self-shadowing. If you look closely, the parts of the ship that are in the shadow still have illumination from the windows and little lights casting over the entire structure.
This is achieved by an illumination map; an illumination map is an alpha image that says NO to the shader when calculating the light impact on that area, leaving that pixel always on.
As we scroll the mouse wheel, we can start zooming out, to see what’s around the ship.
Over here we still see a lot of detail in the ship. But if we zoom out a bit more..,
We can still see the ship structure perfectly, however it’s already too far to notice any shadowing, and the texture detail can be lowered too.
Zooming out a bit more, there’s no need any more to any fancy shaders, no illumination maps, no normal mapping, and now we have an icon over the ship, showing us where the ship is.
This icon is of extreme importance, as we zoom out we will stop seeing the ship.
The zoom out in Gemini is quite huge, so this is really needed. Let’s zoom out a bit more.
We can barely see the ship anymore, although it’s still possible to select it clicking on the icon, or moving it anywhere we want.
Just the ship model rendering is in its lower LOD. We probably could get away with rendering a 50 poly ship here, but with today’s graphics cards, there’s not a reason to do so.
Right now, we don’t even render the ship anymore, or render any shield impacts. The ships can still be selected and moved, or issued attack orders. Zooming out even more, we can see the entire Star System.
From this view, hyperspace travel between planetary bodies can be ordered.
Going back to the Level of Detail on the ships, and taking a look at the Cruiser in high detail:
We can see the self-shadowing on the top cannons falling over the ship structure, the small windows, and even little cracks in the armor of the ship.
If we rotate the view, looking at the engines we can see light flares:
All of this detail is gone in lower Lods.
The next image shows 2 different Lods of the cruiser, side to side for comparison. You won’t ever see this in the game
The cruiser closer to the camera has self-shadowing, no illumination maps, and the textures are low resolution. The farthest cruiser has all the bells and whistles on.
The next shot shows 3 levels of the cruiser; the lower lod doesn’t even have proper UV cords, there’s actually no need for it, the player will never see them anyway:
And to finish this entry, one image of the Cruiser with motion blur enabled, in the battle camera view: