From everything i've read on 3d programming, the main problems seem to be sending the info in the best way to the GPU to keep it constantly working, as opposed to waiting for texture uploads, state changes, readbacks (ack!) etc. Note i'm thinking from an openGL viewpoint here..
As I currently see things, theres several important factors, namely:
- Minimising texture switching, seems to be a major point from what i've heard, switching vertex/pixel shaders being the only operation thats more expensive it seems (but shaders are out of my hardware range so i'm ignoring these for now). I assume the high cost is that the texture has to be transfered accross the AGP bus.
- Static/compiled geometry. I've been seriously surprised how much this can speed things up, however good it may be it contradicts many other points (and i can't do my own lighting calculations, boo, hiss).
- View culling. Important technique, but again seems to contradict with using compiled geometry.
I've probably missed somethings that others will rank as important, but for the time being these are what i'm trying to concentrate on. I'm going to keep things simple and have a top-down tile/iso/hex type engine, but i can't seem to come up with a design that manages to neatly deal will all of the above without excessive amounts of processing before the actual rendering. I've got a few half ideas at the moment, but i'd like to hear some other opinions first.