Hey @DolphinIQ,
thanks for the feedback, there are actually some interesting reasons behind not using light maps. I have baked a lot of AO into diffuse maps already, but doing so for the environment was simply too memory intensive, so I opted out of doing that, i was toying with the idea of writing a virtual texture (also called “Mega Texture”) implementation do by-pass the memory constraints, but it seems like a bit too much work so far.
With respect to FPS, there are a few main weak points, you mentioned one:
- shadow maps
- separate pass for depth texture (i’m planning to roll that into the main diffuse pass via depthTexture extension)
- deferred pipeline, i use a separate pass for fog of war and another one for outlines, these take up a chunk of memory bandwidth
- large number of textures. The models are not very well optimized in terms of textures, so there’s a lot of texture switching, which again hits the bandwidth.
I’m glad you’re liking the game
The reason behind AI being… slow… is that I implemented it using Monte-Carlo Tree Search, that thing doesn’t really have a termination criteria, you just run it for as long as you like, and it produces progressively better results as it goes along. I put the AI into a simulated thread, which is an abstraction I have in my engine, it’s ensures that you can run expensive stuff in the UI thread without causing FPS spikes, but the abstraction adds about 20-30% performance overhead. I was toying with the idea of just writing a rule-based AI or re-writing the whole thing in webassembly for speed, but I haven’t gotten to that desperate state yet. Ideas?
I like your suggestions about unlearning stuff, I think i can make that implicit, let you allocate/reallocate points until you leave the talent page. There is an item that resets talents also.
Also, i’m curious, what are the specs of your machine like?