Shader Pass Catalog
Explore reusable image-processing filters, cinematic lens effects, temporal reconstruction, and
scene-aware WebGPU pipelines from @luma.gl/engine/effects. Every effect below has its own implementation
guide, parameter reference, composition notes, and, where an existing showcase is available, a
live interactive example.
Choosing an Effect​
| Category | Effects | Typical placement |
|---|---|---|
| Color and tone | Brightness and contrast, hue and saturation, sepia, vibrance, tone mapping, HDR auto exposure | Exposure and grading before the final display transform. |
| Blur, bloom and focus | Bloom, Gaussian blur, triangle blur, tilt shift, zoom blur, depth of field, depth-aware blur | Scene-linear lighting and camera effects before tone mapping. |
| Temporal and antialiasing | Persistence, FXAA, temporal antialiasing, camera-reprojection antialiasing, motion blur | Temporal accumulation before lens effects; FXAA near presentation. |
| Lighting and visibility | SSAO, GTAO, screen-space global illumination, screen-space reflections, outlines, selection outlines | After scene rendering while depth, normals, and velocity still align. |
| Atmosphere | Volumetric fog, clustered volumetric lighting | After opaque lighting and visibility; before exposure and bloom. |
| Stylization and detail | Color halftone, dot screen, edge work, hexagonal pixelation, ink, noise, vignette, denoise | Creative finishing or targeted source cleanup. |
| Warp and lens | Bulge and pinch, magnify, swirl | After depth-dependent effects unless auxiliary attachments are transformed too. |
Usage​
Individual ShaderPass descriptors and complete
CompositeShaderPass graphs can
share one ordered ShaderPassRenderer:
import {ShaderPassRenderer} from '@luma.gl/engine';
import {createBloomCompositeShaderPass, toneMapping, vignette} from '@luma.gl/engine/effects';
const renderer = new ShaderPassRenderer(device, {
colorFormat: 'rgba16float',
shaderPasses: [
createBloomCompositeShaderPass({quality: 'high', blurAlgorithm: 'dual-kawase'}),
toneMapping,
vignette
]
});
renderer.renderToScreen({
sourceTexture: sceneColorTexture,
uniforms: {
toneMapping: {exposure: 1, maximumLuminance: 1},
vignette: {radius: 0.7, amount: 0.35}
}
});
Every pass receives the output from the preceding stage. Pipelines may additionally allocate named scratch textures or persistent history, and WebGPU-enabled pipelines can replace supported render stages with compute work. The renderer owns its internal targets; application-owned scene attachments remain explicit bindings.
Inputs and Compatibility​
| Input | Required by | Ownership |
|---|---|---|
sourceTexture | Every shader pass and pipeline. | Application provides the current scene or image. |
depthTexture | Depth of field, bilateral blur, occlusion, reflections, temporal reconstruction, motion blur, and atmosphere. | Application retains the scene depth attachment. |
normalTexture | Normal-aware occlusion, screen-space lighting and reflections, and optional outlines. | Application supplies view-space normals or a compatible G-buffer attachment. |
selectionTexture | Selection outlines. | Application supplies a visible-surface mask aligned with scene color. |
velocityTexture | Motion blur and velocity-based temporal reprojection. | Application supplies per-pixel screen-space motion. |
| History textures | Temporal antialiasing, adaptive exposure, temporal occlusion/reflections, and fog. | Named pipeline targets are owned by ShaderPassRenderer; persistenceEffect uses an application-owned history texture. |
The image-only adjustments, blur filters, stylization passes, warps, FXAA, and depth of field include both WGSL and GLSL implementations for WebGPU and WebGL2. Selection outlines also support both backends. The advanced scene-aware pipelines documented here use WGSL and target WebGPU. Bloom's portable render path works on both backends; fused downsampling and FFT convolution additionally require WebGPU.
deck.gl's existing PostProcessEffect
accepts individual shader-pass modules. Named-target CompositeShaderPass graphs and the separate
WebGPU FFT bloom renderer require an integration that explicitly executes those rendering paths.
Related Guides​
- Shader Passes explains routing, history, and complete HDR render stacks.
- Rendering Techniques and Tradeoffs compares blur, occlusion, reflections, transparency, and temporal techniques.
- ShaderPassRenderer documents execution, bindings, intermediate targets, and presentation.
- Many classic image filters are derived from Evan Wallace's glfx.js.