This year everything went somehow different than planed in the first place, for the worse or the better. Besides hardware issues some tasks had been so large and intertwined that making a news post earlier had been tricky. Besides that I also didn't feel like making a news post in the last couple of month. Whatever the reasons out of the work done these tasks had been the most time consuming and important ones.
The main focus had been on reworking the shader system to lift it up to the next level. This had been unfortunately required to get all the bells and whistles done I've planed for this project. This included skin and lighting shaders. This took quite some time since the shader system in the Drag[en]gine is deeply integrated for versatility and performance reasons. Also decal rendering masks have been improved to allow more natural decals (see puddle image).
Another focus had been on optimizing rendering and lighting on various ends to increase performance where possible. This took also longer than expected.
An unfortunate focus had been on upgrading my entire PC leaving me with nearly 2 month of no chance to work on the project. Never before an upgrade went so TARFU. At last the HD7970 is now humming alongside the QuadCore as it should except I'm only running at 75% possible performance but the upcoming driver upgrade should fix this (hopefully).
The last huge task involved redesigning the reflection system. I've evaluated and test-implemented various reflection approaches from simple env-map blending to local reflections to find a good system which actually works with Physically Based Rendering. The system in place now works with a combination of global and local reflections with distance roughness, optional projection boxes and optional mask boxes. This all works across all geometry types in the engine without any additional work by the developer.
Eventually a first version of a weather system has been added to the game to test the reflection system.
This is only the most important part of all the work done. The rest is included as the typical bullet list at the end of the news post to not scare away people with a huge text wall. To counter the text here a few images and some test videos. To not spam only the first of the images in both profiles are linked. Find the rest in the respective gallery going to the left (15 images in total).
Here a small video of the reflection system in action. I think images work better but sometimes people like more something that moves. So here all put together (video-grab messed up the colors).
And here something for the lovers of details. The new weather system also includes cloudy weather code. You all know how lighting conditions change quickly if clouds pass by the sun on a cloudy day. This code uses the Drag[en]gine Sky System to simulate this effect. Since in a detective game locations (sets) are important I would like to add some effects to them like this one here. Watch the entire video to see it. Other weather conditions will be added like foggy or soft/heavy rain to make revisiting locations more interesting.
Although during this year work has been slower than anticipated the number of task tickets left for the first release got less. The end is not far away if nothing else breaks right before the end. With these interwined tasks out of the door news posts will be more frequent than they have been up to now.
Here the very short list of what happened during all this time. You can stop reading here if you don't want to know all the lengthy details.
- Reworking skin shaders affecting entire render pipeline. Generic and customized generated shaders using extended über-shaders. Texture properties applicable on all geometry types with the same result (components, decals, particles, terrains, prop fields, asf). All variations simultaneously usable at all times (multi-purpose shaders). Higher stability, better optimization potential and easier to maintain and upgrade.
- Support for code generated shaders in addition to modified über-shaders
- Reworking light shaders with a similar system to skin shaders.
- Splitting of shadow rendering into static and dynamic shadow maps with automatic switching of objects between static and dynamic
- Shader based debug shapes rendering for better visual feedback in editors
- Shader parameter support using UBOs for optimized parameter handling in skin and light shaders, faster parameter switching and higher reuse potential
- Sun shadow optimizations culling shadow shafts with occlusion maps (shadow casters in shadows)
- Improved decal rendering with per-texture property masks: color.transparency.multiplier, ambient.occlusion.transparency.multiplier, normal.transparency.multiplier, roughness.transparency.multiplier, reflectivity.transparency.multiplier
- Added transparency.multiplier texture property
- Game similar editable sky in editors with pre-set skies to test with a single click
- Improved particle emissivity rendering replacing transparency based hack
- Improved tone-mapping and bloom fixing smearing problems due to ATI/nVidia driver quirks
- Global reflections using 4 closest env-maps blended into 1 for weaker systems or 8 closest env-maps tapped in shader for stronger systems delivering better results
- Distance dependent reflection roughness
- Local reflections (SSR) using screen-space or view-space algorithm with long ray support
- Fake bounced-reflection for local reflections avoiding black reflected metals
- Optimizing texture format usage for less memory using special OpenGL formats
- Added reflected texture property
- Env-map probes with render groups for reflection control and probe priority
- Box projected environment maps with mask shapes
- Equi-rectangular env-maps for hardware with cube map problems
- Rendering layer masks for fine control over visibility
- JPEG image module
- Light volume box clamping optimization using static shadow map
- Weather profiles with cloudy day effect (see video)
- Indexed rendering and vertex cache optimizer
- TBO based instanced and improved cluster calculation for prop fields
- Imposter billboards for prop fields in the distance
- "shape list" property type for game objects