# Custom post-process a user GLSL effect runs on the TAA-resolved image before tonemap. ```{raw} html 📄 Docs only ``` **Tags:** `3d` A ``PostProcessEffect`` injects a fullscreen GLSL pass between the built-in post-processing and tonemap. It receives the current frame colour (``u_colour_tex``), depth (``u_depth_tex``), resolution and time, plus any uniforms you set. The effect below applies radial chromatic aberration and a vignette. The scene runs with temporal anti-aliasing ON, so the custom effect samples the TAA-RESOLVED (anti-aliased) image, and tonemap samples the effect's output: the resolve and the user effect compose correctly rather than one discarding the other. Toggling the effect off while TAA stays on returns cleanly to the plain resolved image. ``u_colour_tex`` clamps at the frame edge by default (correct for neighbourhood taps); pass ``wrap="repeat"`` / ``"mirror"`` to ``PostProcessEffect`` for an effect that deliberately tiles the framebuffer. Controls: E / click / tap : Toggle the custom effect on/off T : Toggle TAA on/off ESC : Quit Usage: uv run python examples/features/3d/custom_post_process.py ## Source ```{literalinclude} ../../examples/features/3d/custom_post_process.py :language: python :linenos: ```