I'm thinking that the textures need a bit of work, and the normal mapping needs more emphasis (think I can get NVDXT to do that though)...
I impress myself with my stupidity at times. I mean, really impress myself.
I dropped the above models in the other day, and they were completely FUBAR'd. D3DX's automagical adjacency/smoothing removed any sharp lighting from the above objects. So I implemented a trivial function that breaks any adjacency information for faces whose angles are below a certain threshold.
Thing is, it was still a bit broken. Better, but still getting some really odd results (the tops of the 4 smaller walls in the above shots were wrong) - figured my adjacency "fix" had broken something.
Spent a while checking the code, then implemented a debug check to draw the TBN axis' on the screen (the short R/G/B lines you can see at each vertex). Seems that there was no problems there.
So I figured my shaders were busted - spent ages messing with those, couldn't find anything there either.
Finally, I decide that maybe the model was exported in a dodgy way. So I go about making another model (the larger wall in the middle).
So a little while later, and I had to reconstruct this new model into the engine's XML format. Simple enough, but I decided to use the previous model as a base/template to save me some typing.
Open it up and go "hmm, thats odd". I hadn't finished all the textures or the XML for the original model.
More specifically, it meant that the code wasn't using "real" data and the shaders were reading from NULL textures - default values. Which is why my lighting was FUBAR'd - it was reading in <1,1,1> normals for every pixel.
So as of right now I feel like quite the muppet. Wasted a whole day debugging an error that didn't exist.
Please, just shoot me now.