Ambient occlusions optimizations
Vorxel » Devlog
I've managed to improve frame rates by over 25% in some scene views when ambient occlusion is on with some optimizations I implemented!
Without optimizations:
With optimizations:
Vorxel
Status | In development |
Author | Teknologicus |
Genre | Adventure |
Tags | Exploration, Open World, Voxel |
More posts
- Fixed bug with dynamic direct sunlight and level of detail27 days ago
- Voxel Cone Tracing Experiment27 days ago
- Dynamic direct sunlight working with level of detail30 days ago
- Improved dynamic direct sunlight35 days ago
- Dynamic direct sunlight36 days ago
- Previous folly and finally success43 days ago
- Rasterized triangles are evil!52 days ago
- Procedurally Generated Blocks (Video)55 days ago
- Fog is working again58 days ago
- Improved fragment/compute shading rates60 days ago
Comments
Log in with itch.io to leave a comment.
Impressive. How did you do it?
There was an inefficiency in how the voxel-level ambient occlusion was fetching surrounding voxels via tetrahexacontree traversals to calculate ambient occlusion shading in the GLSL fragment shader for each ray voxel hit . It still traverses the tetrahexacontree to fetch the surrounding voxels, but caches the voxel volume index for each traversal following the first traversal to a given volume. So if all the surrounding voxels are within the same volume as the first traversal, only that one initial traversal is needed. If one or more of the surrounding voxels are in other volumes, it caches those volume indices as well to avoiding additional traversals.
The same inefficiency was in how the voxel-volume-level ambient occlusion fetched non-air voxel counts and was solved with the same voxel volume index caching mechanism.
In implementing this optimization, I realized the voxel-level ambient occlusion could also be sped up even more if I keep bits in each voxel indicating if a given voxel face (same x, y and/or z plane) and its surrounding face plane neighbors are air voxels. If the surrounding voxels for a given face are all air voxels, then the face doesn't need to be shaded by voxel-level ambient occlusion. I'm working on this and it should yield even greater performance gains than the voxel-level ambient occlusion optimizations described above yielded.
Well I don't know how your system is setup in the first place, but I generally get how you optimized it.