Due to my recent Beta invite to Planetside 2, I’ve been awestruck by the effect instant radiosity can have on night scenes. This led me thinking to the possibility of implementing a similar effect in my own rendering pipeline when all the settings are cranked up to high. To achieve this, I’ll try and implement 2 versions of instant radiosity as (recommended) options:
- No GI at all: This option will only load, if needed, general lightmaps for simple, static scenery and a static global light source (static sun). Fast, simple, ugly.
- LowFi version: CPU-based, limited number of bounces, should work on any hardware with a decent CPU.
- HiFi version: OpenCL accelerated texture-based radiosity. Why? Because any decent GPU now has “Compute” capabilities
Radiosity should work with both the forward and the deferred renderer and with SSAO on or off.
[important]Today’s hardware is at a point that allows me to do a major revamp of the graphics library; drop OpenGL 2.0 support and DirectX9.0c planned implementation. [/important] Why? Because OpenGL 3.0 / DX 10 is available on virtually any video card in use today, and if it isn’t then that specific PC will have a lot more bottlenecks than just the GPU specs. I’ve already stated this, but a dual-core CPU is a minimum requirement to use the framework (due to it’s heavily multithreaded nature). In the same manner, Pixel Shader 3.0 (for the MS fans out there 😉 ) will be a min. req. as well. This decision was easy, as the last few commits already contain code that could load geometry and tessellation shaders.
OpenCL is my choice over CUDA due to it’s portability and easier interoperability with OpenGL. As this will become an integral part of the engine, I will also use it to implement AI Crow Dynamics (as I need this for my dissertation thesis).
[important] Audio and Physics wrappers will shrink to only 2 libraries for now (SDL and OpenAL with PhysX and Bullet respectively) as I can’t possibly implement all of them on my own but I need at least 2 libraries for each to ensure that the wrapper classes allow for further libraries to plug in.[/important]
The Hardware requirements and graphic/audio/physics API changes will be the first to be committed in the next revision followed by adding OpenCL to the next one. The fast version of radiosity will then be implemented and the code will be optimized as much as possible before the HiFi version is added to the codebase.
This will be “fun”.