Trailer Title Card Film Grade (grain + vignette + chroma)
A tiny canvas_item shader for trailer / ad title cards: animated film grain, soft vignette, a subtle R/B edge fringe, and a `flash` uniform you can tween to 1.0 on a beat cut.
How to use: put it on a ColorRect behind your title Label, then tween `flash` 0 → 1 → 0 on each hit. Tune `grain_amount`, `vignette_strength`, `chroma_nudge`, `grain_speed`, `base_color`.
Works in Godot 4.3+ (Compatibility, Forward+, Mobile).
Want the full kit (guides, beat-cut timing, title card scene)? Free Trailer Ad Multiplier LITE for Godot 4: https://assetsmithpixels.itch.io/trailer-ad-multiplier-godot-4-lite
Pairs with my VHS shader: https://godotshaders.com/shader/analog-horror-vhs-tracking-chroma-grain/
Shader code
// Trailer Ad Multiplier LITE — title-card film grade (grain + vignette + chroma nudge)
// (c) 2026 assetsmithpixels — MIT License (see LICENSE.txt)
shader_type canvas_item;
uniform float grain_amount : hint_range(0.0, 1.0) = 0.18;
uniform float vignette_strength : hint_range(0.0, 2.0) = 0.9;
uniform float chroma_nudge : hint_range(0.0, 8.0) = 2.0;
uniform vec4 base_color : source_color = vec4(0.04, 0.04, 0.07, 0.94);
uniform float flash : hint_range(0.0, 1.0) = 0.0;
uniform float grain_speed : hint_range(0.0, 30.0) = 11.0;
float hash(vec2 p) {
return fract(sin(dot(p, vec2(12.9898, 78.233))) * 43758.5453);
}
void fragment() {
vec2 uv = UV;
vec2 centered = uv - vec2(0.5);
float vig = clamp(1.0 - vignette_strength * dot(centered, centered) * 2.8, 0.0, 1.0);
float frame = floor(TIME * grain_speed);
float n = hash(uv * vec2(640.0, 360.0) + frame);
vec3 col = base_color.rgb;
float edge = length(centered);
// soft R/B fringe toward the edges (film/CRT chroma nudge)
col.r += chroma_nudge * 0.012 * edge;
col.b -= chroma_nudge * 0.010 * edge;
col += (n - 0.5) * grain_amount;
col = mix(col, vec3(1.0), flash * 0.4);
col *= vig;
COLOR = vec4(clamp(col, 0.0, 1.0), base_color.a);
}
