I've been busy with optimization related to both GPU and CPU. The most important update related to CPU is optimization of A* navigation algorithm.. Basically this one has been in my TO-DO list for a while, but I haven't yet had enough time to get my hands dirty. Now then, I've re-implemented navigation algorithm with optimized data structures and here is how I did it:
I have a PathFinder pool and limited number of threads, which may be acquired by agents and utilized for navigation. After PathFinder has completed it's job, it will be returned to pool for reuse. I implemented both, open set and close set as a boolean arrays, which leads to the fact that I can check for existence of node within them relatively fast by acquiring boolean value from array by node index instead of executing costly contains methods or loops.
Another performance gain related to navigation is to replace open list (yes I have open list and open set as a separate structures) with binary heap data structure. Previously I just had simple list, which obviously is not the most effective in terms of performance. Binary heap eliminates the need of excess iteration while figuring out node with lowest "fCost" value within path finding loop.
In GPU side, I've optimized all humanoid models and environmental details. Currently vertices count per humanoid model is around 1600, which might still be a little too much. In the end, all depends on how many characters there will be in the screen simultaneously. Let's see if I will do some more optimization related to humanoids in the future. I've also done some repainting with the models (meaning that they now have updated skins and some parts of armor). Here are some close up screen shots of current models:
Female Worker (taking a nap in the turnips bush?!)
Sounds and background ambient are currently work in progress. Planning to do some more composing in the near future and yes, need to do some more vocal acting so that character will have varying responses to payers commands : ) Will they crank? let me know!
My apologies if this update was too technical. Do post a comment if so, after all I'm writing this for you.