Historically, we've made space strategy games. And from a rendering point of view, space games are much easier to do. There's no terrain and generally a lot less "stuff" to render.
When Stardock began work on the Elemental games (our fantasy strategy game world), we got a crash course in having to get a lot more disciplined in how we do our rendering.
Below is a short list of lessons we've learned that can be universally applied:
- The GPU is usually not the limiting factor. It's the CPU.
- Alpha checking is expensive. That is, it's worth spending some effort to intelligently label whether there's alpha blending in an object so that you're not making the GPU do the alpha testing on the fly. For example, we found that in Fallen Enchantress, a little spider web that appeared in a given tile would eat up 87% of the rendering time for the entire tile.
- In your shader code, it's especially important to find ways to exit out of any loops as early as you can. This is a good practice in general but you'd be surprised how easy it is to underestimate the performance impact it has.
- Anything that you paint on the screen that has to blend (on the fly) with other things is going to be expensive. For example, our sunshine rays in Fallen Enchantress are more expensive to paint that all of the terrain combined.
- Get and become very familiar with performance tools like Vtune Amplifier and Intel GPA. They're worth it.
There are plenty of much more thorough guides out there, but often times, performance loss happens because of a handful of dumb/inexperienced design decisions made early on.