SSAO
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 systembias
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. Smallblur
will be faster, sharper and more patterned. Largeblur
will be slower and smoother. Typicallyblur = 2
is a good compromise.
Note
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.
Example
using GLMakie
GLMakie.activate!(ssao=true)
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)
fig
# julia:disable-ssao # not working here
GLMakie.activate!(ssao=false) # hide
GLMakie.closeall() # hide