There is still quite a lot of TODOs in the code. Some are rather low hanging fruits that would improve code quality (like in overlay_next_instance.cc).
What is the reasonning on combining all the headers inside this one? The goal of split headers is also to ease code searchability / readability.
mat3_normalized_to_quat_fast
Document functions that returns bool. Even more so when the function name is not explict.
Move view_z_to_volume_z
& volume_z_to_view_z
to shader shared file as the Bound box init use it.
I think it is better to create the subpass and return a pointer (or nullptr if nothing to draw). It is clearer what is the inputs and outputs.
Use default world material for clearing instead of dedicated shader. The default output should be 100% transmission.
The viewport size should not be used as dimensions. Always use the render buffer size like light / shadow / motion blur do.