Rendering: camera post-processing (vignette, color grading, bloom)

Current State

No post-processing / camera-effects pipeline. The GPU renderer writes lit color straight to the swapchain (only a tonemap step is in scope, via #27 (closed)).

Goal

A small, composable post-process stack on the camera: vignette, color grading (LUT or basic lift/gamma/gain), and bloom, applied after the main lit pass and before/alongside tonemapping.

Motivation

Driven by the Bistro milestone: raw lit output looks flat for marketing screenshots/video without at least vignette + color grading. General-purpose engine feature, not scene-specific — any project benefits.

Scope

  • CameraComponent (or a new PostProcessSettings asset) holding: vignette (intensity, radius, smoothness), color grading (LUT texture or lift/gamma/gain), bloom (threshold, intensity, radius).
  • GPU pass: fullscreen post-process step in GpuRenderer after the lit pass, before/combined with tonemap (#27 (closed)).
  • Skip in the software renderer initially (GPU-only, like shadows).

Acceptance

  • A camera with vignette + color grading enabled visibly darkens edges and shifts color balance in the GPU viewport.
  • Bloom makes emissive/over-bright surfaces glow.