You guys all raise some of the very same issues I thought a lot about while putting this together.
I wanted to make a game with camera controls like FFT, where you could see the battle from different angles. That was easy enough.
I also wanted to make a game that had that N64/Playstation-era feel, where there were 2D sprite characters in a 3D world. That was a little more complicated.
One step that seemed obvious at the time but ended up being much more complicated than at first glance, was setting up an isometric camera. The exact angle of the camera wasn't so important to me (FYI, for a traditional isometric view, it's looking 35 degrees down, at a 45 degree angle from the grid axis); I was willing to play around and see what worked best for me. After all, if I was going to spin the camera like in FFT, then I couldn't be married to just one angle anyway. To me the most important first step to getting that FFT perspective was removing the vanishing points. If I could do that, then any vertical object (such as one of my character sprites) would just appear vertical, with no distortion. The problem is that UDK, my game engine of choice, doesn't do isometric. I tried simulating it by moving the camera really far out and then zooming really far in. But at long distances, the UDK z-buffer starts making approximations, and rugs start blending into the floor, curtains into the wall, and things just get messed up.
So to stick with my game engine, and not have to scrap everything and start over elsewhere, I decided to move the camera closer in. (But it's still a lot farther out than most games; the camera has a 45 degree field of view, which would be annoyingly narrow in a FPS for example.) And I decided to just try to manipulate how the sprites were displayed to make it look more isometric. That ended up being really, really complicated.
So first, I realized that if I'm going to have 2D sprite characters, the sprites always have to face the camera. OK. But now the sprites at the sides of the screen have their heads pointing away at an angle, with their feet facing towards the camera. That's no good. Also, sprites next to a wall get cut off because they're facing upwards at an angle, and they clip into whatever's behind them. That's also no good.
To solve those problems, I made the sprites stay vertical. So now they never clip into walls behind them. And I didn't make them face the camera exactly. Keeping the sprites vertical in the Z axis, I turn them to face opposite the camera's yaw. So imagine if you will, if you're facing a marching band all lined up in front of you, the people are not all facing you directly; the ones directly in front of you are facing you, and everyone else is just parallel to them. That's what I make the sprites do. But then you face a couple of other problems: The sprites at the edge of the camera are still tilted slightly head-away and feet-toward me. Also, as the camera passes over sprites, they appear to get shorter, and sprites in the distance appear to be longer.
So I made the sprites stretch and tilt depending on where they are in my field of vision. The closer they are to being under the camera, the taller they get. The closer they are to the edge of the screen, the more they tilt inwards. That looks OK. That's basically what you see in the game. But that introduces a really crazy side-effect: Although the sprites seem to stay the same size according to the camera point of view, their shadows are constantly going nuts! They go totally bonkers, stretching and tilting as the camera moves around, but the sprites kind of seem to stay the same shape and size.
So then I give each character two sprites: One is visible, but casts no shadow, and it stretches and tilts based on its position on the screen. The other is invisible, but casts a shadow, and it does not stretch according to its position on the screen.
That all seems so complicated you say. Wasn't there an easier way of doing things? Well, yes and no, and not anything that I tried.
What I would have liked to do was have manual depth-buffer control over what gets drawn. You see things like this with a character's forearms and gun in an FPS: Technically, you should be clipping into things in the game world, but your gun and forearms get drawn in the foreground. That foreground gets drawn on top of the background, regardless of what the actual depth of the background scene is. UDK does that. I do that with the damage popups: they get drawn in the foreground. But what I wanted to do was to make the sprites face the camera, and then draw the whole sprite as though its scene depth is measured from its feet. Lots of games with sprite characters in 3D worlds do this:
(Edit: I was looking for a picture of a DS-era Pokemon game, which I'm pretty sure works the way I described. This isn't a good example of what I wanted to demonstrate, but hopefully you get the idea.)
But alas, UDK only has two depth settings: foreground and background, and you can't control the depth beyond that.