Vulkan Progress Report #5 By: Juan Linietsky

Another month, another Vulkan progress report! October was a busy month, as most of it was split between working on the new Global Illumination system and Godotcon/GIC in Poland.

Despite this, strong progress was made and the new GI system seems pretty much complete.

GIProbes 2.0

Godot 3.0 introduced GIProbes. They provide Global Illumination to scenes. They were, however, pretty limited. Only static geometry could provide GI and dynamic objects were ignored. Added to this, changes in light settings had significant frames of delay. Added to a not so great performance and quality, the feature was barely usable as is.

For Godot 4.0, GIProbes will see several significant changes, which will be outlined as follows:

Improvements to Performance

Performance will see some improvements, thanks to work from Matias Goldberg from Ogre 3D, who implemented the same technique and figured out many optimizations. The default quality in 4.0 will also be the low quality mode in Godot 3.0, which was faster and the performance loss was only very small.

Real-Time lighting

Changes to lighting now happen 100% in real-time. Changing light directions, positions, settings, etc. have immediate effect. Light bounces are updated smoothly and with no delay, thanks to a very clever voxel lighting implementation using signed distance fields.

Multiple Bounces

GIProbe also now supports multiple bounce lighting (3 bounces). This considerably improves the image quality, but it also makes voxel reflections more useful (before, they would only reflect direct light, severely limiting them).

Ambient Occlusion

GIProbes by default generate voxel ambient occlusion, but options to tweak it manually now exist. This allows having more control on this feature.

Dynamic Objects

It is now possible to add dynamic objects to the scene. Just toggle the "Dynamic" flag in any object and it will both contribute to the scene and receive lighting from it.

This feature is extremely powerful, as objects can even emit light from their own material or shader. Complex shaders using the emission channel can actually light their environment accordingly, including the whole scene.

Likewise, dynamic objects will also make use of real-time voxel AO, so it is possible to have screen space independent and wide AO, with a much higher degree of realism than traditional SSAO.

The voxelization technique used for real-time objects is very fast (you can have dozens of dynamic objects at little to no cost in a medium or low end dedicated GPU) and also very innovative, as it voxelizes supersampled objects. This allows moving dynamic objects around the scene without creating sudden changes in lighting (which was always a problem with most other implementations of voxel cone tracing, and made dynamic objects barely usable).

Future

Godot 4.0 will come with a fast and complete solution for real-time global illumination, in an easy to use package.

There are still many pending features that will be worked on in the coming months, so stay tuned to all the new and shiny things! As always, remember that Godot is done entirely out of love for you and the game development community so, if you are not yet, please don't hesitate to become our patron, and help bring the world top quality, free and open source tools for making games.