GLMakie also implements screen-space ambient occlusion, which is an algorithm to more accurately simulate the scattering of light. There are a couple of controllable scene attributes nested within the SSAO toplevel attribute:

  • radius sets the range of SSAO. You may want to scale this up or down depending on the limits of your coordinate system

  • bias sets the minimum difference in depth required for a pixel to be occluded. Increasing this will typically make the occlusion effect stronger.

  • blur sets the (pixel) range of the blur applied to the occlusion texture. The texture contains a (random) pattern, which is washed out by blurring. Small blur will be faster, sharper and more patterned. Large blur will be slower and smoother. Typically blur = 2 is a good compromise.


The SSAO postprocessor is turned off by default to save on resources. To turn it on, set GLMakie.activate!(ssao=true), close any existing GLMakie window and reopen it.


using GLMakie
GLMakie.closeall() # close any open screen

fig = Figure()
ssao = Makie.SSAO(radius = 5.0, blur = 3)
ax = LScene(fig[1, 1], scenekw = (ssao=ssao,))
# SSAO attributes are per scene
ax.scene.ssao.bias[] = 0.025

box = Rect3(Point3f(-0.5), Vec3f(1))
positions = [Point3f(x, y, rand()) for x in -5:5 for y in -5:5]
meshscatter!(ax, positions, marker=box, markersize=1, color=:lightblue, ssao=true)