As you know we are working on a new import tool that will be available for custom model imports. However new import tool alone is not enough, because our existing object rendering pipeline was less efficient for objects and even a few objects could cause performance issues. This was caused by multiple bugs (in the old import and renderer) and a couple of bad decision in renderer design made by my younger me.
So I decided to redesign and rewrite some parts of the object renderer to cleanup the old inefficient stuff and to make a few improvements. That is why it is taking longer than expected.
- frustum culling on all objects (static and dynamic)
- level of detail, MAX 4 LODs (do we need more?)
- normal maps (automatically generated tangent frames in importer)
- skinning, still need some work: like automatic bone generation from node name and hierarchy which means no need to create skinned geometry in Max/Blender/Maya for simple node movements like wheels and plane controls)
- mesh indices optimization (Forsyth algorithm automatically done in importer)
- mesh pre-transform vertex data optimization for linear access (automatically done in importer)
- emulated double float precision for static objects position (eliminates CPU->GPU instance data transfer) which means less CPU processing for static objects (culling and LOD only) because all required stuff is on GPU memory
- faster atmospheric scattering for objects (using transform feedback, it is more than 10x faster now, 0.5ms -> 0.04ms
- easier material modding (multiple material library support for one object)
- optimized vertex format (less memory means faster) and support for two UV channels
LOD meshes for OT Guy (by Lukasz Grabny alias Mahnoor) model were automatically generated in Blender, so the LOD switching is not perfect at the moment (I gave it only 5 minutes)
Stuff that has to be done before the release:
- deferred shadowmap which will also allow shadows on grass and better filtering etc.
- currently working on static object pipeline so all static objects like hangars or buildings should work tomorrow
- dynamic objects skinning (wheels, plane controls, animations etc.)
- configuration files like material definitions and vehicle/planes configurations (this also allow modify existing objects and derive new ones)
There are several byproducts of this new obj redererer that can be reused in tree renderer like new atmosphere scattering and mesh optimizations. I will start to work on it after we release the import tool. That new grass stuff causes that forests needs 3D tree more than ever. I also have a lot of ideas in my head that should improve the quality of trees and the rendering performance, simplifying the rendering pipeline. I am quite eager to start on it as soon as possible.
here are two videos with classical music showing the current state (frustum culling issue in first video has been already fixed)