Ambient occlusions optimizations
Hantverk'n » 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:
Hantverk'n
Status | In development |
Author | Teknologicus |
Genre | Adventure |
Tags | Exploration, Open World, Voxel |
More posts
- Overhaul of buffer use in voxel engine7 days ago
- Tetahexacontree 4x4x4 Occupancy Bitmasks Lookup Table19 days ago
- Voxel-level ambient occlusion optimization bits generation via compute shader60 days ago
- Image rotation via shearing65 days ago
- Rotation without rotating66 days ago
- Voxel volume mipmaps generation via compute shader67 days ago
- Dynamic global illumination methods79 days ago
- More ambient occlusions optimizationsAug 30, 2024
- Procedurally generated grooved, cracked brick blocksAug 27, 2024
- Procedurally generated cobblestone blocks with surface indentationsAug 27, 2024
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.