Going to be a late night for me, from the looks of it. I think I can get this working today, but the sprite stuff has taken longer than expected. The really hard bits were getting some new HSV shader code set up, and getting uv remapping that happens on the GPU per instance. The amount of efficiency gained is freaking nuts.
In the test project where I was working with the shader directly, it all works great. Then it's a matter of hooking it into the game pipeline itself so that the game creates them and batches them and manages them and dirties them and so forth properly. I'm I think about 70% of the way through that for icons on the planet map, and 0% of the way through that for the sidebar and for the galaxy map.
The galaxy map is an incredibly simple case since it's mostly a copy of the planet view case, and then the sidebar is an unknown challenge because I have to hybridize the GUI system and the world space sprite system. Shouldn't be too bad since mostly I just need to find stuff in camera space... but the devil is so often in the details when it comes to things that take longer than expected.
Anyhow, the change on the slow battle scene is to take the number of draw calls down from 400-something with dynamic batching of 700-something draw calls, which is pretty pricey on the CPU in particular, but also somewhat the GPU bus. And instead moving that down to something close to 1 draw call, which is practically free on the CPU, and the GPU bus, and puts all the load on the GPU itself (where it belongs).
It's not literally going to be 1, because there's a limit to the number of instanced properties, so it's probably a couple of dozen in that particular scene, and will vary between dx11 and opengl (dx11 will have half the number of calls for those because it has twice as many instance keywords possible). Either way, the setpass calls should be 1 from that, which is a big deal in and of itself.
So that's all coming... it's just a long slog.