← Back to list

Why Your Godot 4 Post-Processing Shaders Are Killing Your Frame Rate (And What I Built Instead)

Most shader packs look great in screenshots. Then you drop them into your actual project, run the profiler, and watch your frame time…

Weasert 911 · 2026-05-27 21:43 · 0 claps · 3.6 min read
#godot #game-development #shaders #indie-game #performance
Open on Medium ↗

Why Your Godot 4 Post-Processing Shaders Are Killing Your Frame Rate (And What I Built Instead)

Most shader packs look great in screenshots. Then you drop them into your actual project, run the profiler, and watch your frame time double.

That’s not a Godot problem. That’s an architecture problem. And it’s almost always the same two mistakes: multi-pass pipelines that weren’t necessary, and texture sampling patterns that scale badly with resolution. Before I get into what the Shader Showroom Pack does differently, it’s worth understanding exactly why most post-processing shaders underperform; because once you see it, you can’t unsee it.

The Multi-Pass Trap

A multi-pass shader splits its work across multiple render passes: one pass for edge detection, another for blur, another for compositing. Each pass reads the entire screen texture, processes it, and writes the result back to a buffer for the next pass to read.

At 1080p, your screen texture is 1920×1080 = 2,073,600 pixels. A 3-pass shader reads and writes that buffer three times per frame. At 60fps, that’s 373 million pixel operations per second just for your art style filter, before your actual game geometry, lighting, and UI have done anything.

The hidden cost is memory bandwidth. Modern GPUs are fast at arithmetic. They are not infinitely fast at moving data in and out of VRAM. Multi-pass shaders are bandwidth-heavy by design, and on integrated graphics: Intel UHD, Apple M-series iGPU, Steam Deck; that bandwidth ceiling is much lower than on discrete cards.

The fix is single-pass architecture: every effect, regardless of complexity, happens in one fragment shader invocation per pixel. *You read the screen texture once. You do all your math. You output the final color*. Done.**

How the Shader Showroom Pack Is Built

Every shader in the pack is single-pass, full stop. Here’s what that means in practice across the 7 styles:

  1. 90s Lo-Fi Retro: 1 texture sample. UV snapping, color quantization, and ordered Bayer dithering all happen in pure arithmetic: no additional samples needed. Essentially free on any hardware.
  2. ASCII Cyberpunk: 1 texture sample. The entire character grid, luminance computation, and phosphor glow output from a single nearest-neighbor sample per 8×12 cell. Also essentially free.
  3. RGB Quantization: 1 texture sample. Block snapping, dominant channel detection, luminance scaling: all arithmetic, one sample. Runs identically on a Steam Deck and an RTX 4090.
  4. Anime Cel-Shading: 5 texture samples. Four neighbors for Sobel edge detection plus the center sample. Posterization and saturation math happens after sampling, not in additional passes. Moderate cost, consistent across hardware.
  5. Blueprint Sketch: 5 texture samples. Four cardinal neighbors for Laplacian edge detection, one center. The grid pattern is pure arithmetic; no texture lookup needed for the background. Moderate, predictable cost.
  6. Manga Halftone: 10 texture samples. Full 3×3 Sobel kernel for thick ink outlines plus the halftone dot math. Most expensive of the lightweight shaders, still a single pass.
  7. Oil Painting (Kuwahara): 81 samples at the default radius of 4. This is the honest one: Kuwahara filtering is inherently sample-heavy because it evaluates four overlapping quadrant neighborhoods per pixel. At radius 4, that’s a (2×4+1)² = 81-sample kernel. On a discrete GPU at 1080p it runs fine. On integrated graphics, drop brush_radius to 2 or 3; that brings it down to 25 samples and the visual quality loss is minimal.

All shaders use canvas_item type on a full-screen ColorRect inside a CanvasLayer. The 3D scene renders to the viewport. The ColorRect samples it via hint_screen_texture. One layer, one material, one pass.

The Interactive Showroom: Why It Exists

Testing post-processing shaders is genuinely hard. A floating test sphere in an empty scene will lie to you. Kuwahara Oil Painting looks spectacular on a sphere. It looks completely different, sometimes worse, sometimes better: on a scene with flat architectural geometry, strong directional lighting, and small high-frequency details scattered across the frame.

The Shader Showroom is a purpose-built 3D environment for evaluating exactly this. Three scenes were chosen for maximum geometric variety:

The Circus Stage has dense, overlapping geometry, strong color contrast, diagonal lines everywhere, and complex silhouettes. It stress-tests edge detection shaders and exposes any halftone artifacts immediately.

The Modern Apartment Interior has flat surfaces, controlled lighting, and fine architectural detail. It’s the environment where Oil Painting and Blueprint Sketch show their best results, and where Lo-Fi Retro’s pixelation becomes most readable.

The Classic Car is a single high-detail object against an open background. It isolates how each shader handles curved surfaces, specular highlights, and fine surface detail, the hardest test for any art-style filter.

Five preset camera angles per environment. A free-cam mode with WASD movement, Q/E vertical, and scroll zoom so you can get into any corner. Real-time shader swapping via Shift+1 through Shift+7 so you can A/B compare instantly without reloading anything.

The showroom isn’t a demo. It’s a testing tool, and it ships with the pack.

What You’re Actually Buying

Seven shaders. One interactive showroom. Forward+ renderer, Godot 4.7+, Direct3D 12 / Vulkan / Metal. Drop onto a ColorRect, it works.

If you were going to write these yourself, you’d spend weeks getting Kuwahara right alone. The single-pass Sobel implementations took iteration to get the kernel weights balanced across different scene types. The ASCII glyph masking is deceptively fiddly to get looking like actual characters rather than noise.

Or you spend $9 this week and ship your game with a visual identity that doesn’t look like every other Godot project on itch.io.

Code EARLYBIRD40. $9 until June 1st, back to $15 after.

**Get the Shader Showroom Pack →**


메타데이터
post_id
d886f699ab93
slug
why-your-godot-4-post-processing-shaders-are-killing-your-frame-rate-and-what-i-built-instead-d886f699ab93
url
https://medium.com/@weasert/why-your-godot-4-post-processing-shaders-are-killing-your-frame-rate-and-what-i-built-instead-d886f699ab93
canonical_url
https://medium.com/@weasert/why-your-godot-4-post-processing-shaders-are-killing-your-frame-rate-and-what-i-built-instead-d886f699ab93
author_url
https://medium.com/@weasert
status
ok
fetched_at
2026-06-16 19:09:56