Screen Space Ambient Occlusion
This is sort of an implementation of Scalable Ambient Obscurance by McGuire et al. however I make a few simplifying shortcuts in my implementation and don't achieve as good performance or quality. I was also unable to get their new recommended estimator to behave so this implementation still uses the Alchemy AO estimator initially recommended in the paper. I have a somewhat longer write up available on my webpage since this was initially implemented as a class project.
Building
The build system is a bit awkward at the moment as I developed this project and glt
simultaneously so it's included as a git submodule. The project also depends on SDL2 and GLM which CMake is typically
able to find. If not you can pass -DSDL2=path/to/sdl2
and -DGLM=path/to/glm
when running CMake to help it out.
I also use imgui which you should download and drop under external/imgui
, later
I plan to add a download step to fetch imgui to the CMake build.
Running
You can pass any OBJ file through the command line but the camera and other settings for the AO are only really configured for a slightly modified version of Crytek Sponza that uses the OBJ file from McGuire's meshes page but the textures from the original Crytek Sponza.
Images
Full render combining AO with all other effects:
Ambient occlusion values only:
I also made a short video which you can watch if you want to see the effect in action without running the project yourself.