I have released the first work-in-progress version of NostalgiaVX’ internal overhaul a few days ago as some of you might already know and I’d like break this first update down a bit more.
First and foremost, Iris 1.6.2 or newer is required to run NostalgiaVX’ future updates and since said Iris version isn’t out yet you can get a preview version of it in my discord server. The releases 1.6.1 and 1.6.0 don’t work as they are missing a few crucial bug-fixes for features that I am using in NostalgiaVX. With that out of the way let’s get into what you can expect from this update.
As anyone who used NostalgiaVX in the past probably knows, it has struggled with some severe and very difficult to track down performance issues that varied drastically depending on your hardware and the in-game environment. This was caused by some strange behaviours that were the result of having to use geometry shaders in order to calculate the voxelized representation of the game environment. Geometry shaders have a habit of not performing overly well in Minecraft and in this case particularly were responsible for up to 70-80% of a frame’s render-time. This was obviously something that also bothered myself, as I knew that the pack could have been quite performant as far as path-tracing shaderpacks go if it wasn’t for this issue. Thanks to the host of new features that Iris offers I was finally able to resolve this issue once and for all, as I no longer need geometry shaders and leveraged things such as 3D images, compute shaders and such to implement anything related to the voxel-volume and the accompanying light propagation volume (or short LPV) in much more efficient ways. This alone has resulted in the voxelization itself having barely any performance impact now, which allows me to actually achieve any gains from optimising the rest of the pipeline. To give you some numbers, with the old geometry shader based voxelization alone (as in, with barely anything else in the pack being active) I was never really able to exceed maybe 60-70 FPS in general whereas the new 3D image based approach easily achieved 130-140 FPS and most of the performance impact there came from the regular rasterized shadowmap being rendered in conjunction with the voxel volume. This is quite a performance uplift as you can imagine, and I wasn’t even considering how much worse the old approach performed on some users system.
Naturally I have also used the opportunity and already added some new path-tracing related features that you might already know from recent Soft Voxels versions, namely spherical harmonics for the denoising stage and optional ray guiding. Both of these things do have an impact on the overall performance as you can imagine, especially ray guiding is a bit heavier than I’d like it to be which is why its disabled by default, but overall the performance has seen a significant uplift over previous versions. Depending on the scene and your hardware you are looking at up to 25%-100% gains over previous versions, on my 3050 that I am using to debug nVidia issues this changes cinematic 23 FPS into actually playable 30-40 FPS depending on the scene and there are probably more gains to be made when I start updating other parts of the pack that are not tied to the voxel volume.
So all in all NostalgiaVX is finally starting to perform like I always wanted it to, and this makes working on it a lot less frustrating since the performance is no longer handicapped by annoying and unfixable issues caused by pipeline limitations.
The currently available work-in-progress version obviously still has a few other bugs and limitations though, such as broken voxel-based worldspace reflections and the fact that only the overworld is supported for now, but as I wanted to get an idea of the performance gains on different peoples systems I felt like it would make sense to simply catch up with these missing features in following updates. So you can expect a few issues if you deviate too much from the default settings for now, but the pack will eventually reach a much more robust state with the next few updates.
NostalgiaVX P9 Changelog
- Iris 1.6.2 or newer is now required
- Overhauled voxel storage
- Major performance uplift due to no longer relying on geometry shaders
- Now using 3D images
- Optimised average voxel colour computation through compute shaders
- Updated LPV storage
- Now using 3D images
- Optimised LPV generation through the usage of compute shaders
- Added optional ray guiding
- Spherical harmonics are now used in the denoising stage to preserve surface normal detail
- Improved efficiency of various lighting-colour related calculations through the use of SSBOs
- Path-tracing and denoising stages now use compute shaders
- Path-traced lighting is now locked at 50% resolution (same as in Soft Voxels)
- Voxel based world-space reflections are currently not supported
- Voxel volume size can currently not be adjusted
- The Nether and The End are currently not supported
- Average performance uplift to be expected is between 25% and 100% depending on the scene and your hardware