Direct3D 11 Progress – Loading Scenes 2
So I optimized the scene renderer next day of the last post only. My internet ( MTNL showing its true colors ) wasn’t working this whole week so couldn’t update the blog.
So I managed to get up to 1400 ( 3500 FPS taking advantage of fact its stationary ) fps in Low Poly version of Dust2.
But the real test was the map from HL2 trainstation2, that’s one huge map with approx. With around 550 – 600 different textures etc. But I managed to get 500-600 FPS in that too. Just to give an idea of how much impact textures changes have on the performance I can render the same map at 4000+ FPS on GTS 450 if I use single texture.
So far I have implemented only some low-level optimizations in the SceneRenderer Like batching, material sorting, careful pipeline management, etc. Scene level optimizations including frustum culling, spatial partitioning, etc. and some new ideas that I have will be done as engine grows.
But these results are taking advantage of fact that all objects are stationary. Also I am just using Unlit Textured material FPS will fall back rapidly as I start to implement some complex materials and bring in lights etc.
( and yes I implemented the stats GUI now using SpriteFont from DirectXTK )
To compare it with previous DX9 version I used to get around 400 FPS with Oct Tree and Hierarchical Frustum culling even with a Phong Shader with couple of Directional Lights.
I will try to maintain at least 100 FPS at least in all future tests / scenes and will implement more optimizations as needed.
As far as Spatial partitioning is concerned I am going to do it together with Collision/physics system as they are kind of related. Thinking to integrate PhysX SDK which will also save time on renderer as I can use collision code from PhysX rather than porting my Collision Code from previous version. Also having two separate AABB classes or two separate AABB collision test function implementations doesn’t make sense. So I will just make a wrapper of PhysX for these things which can be replaced by any other physics engine in future.