Introduction to Shaders for Games
What shaders are, the difference between vertex and fragment shaders, and how games use them for effects like water, glow and outlines.
A shader is a small program that runs on the GPU to decide how things are drawn. Every pixel you see in a modern game passed through a shader. They sound intimidating, but the core concept is simple — and understanding it unlocks effects you can't get any other way.
Why shaders exist
Your GPU is a massively parallel machine: it can run the same tiny program on thousands of pixels at once. A shader is that tiny program. Instead of the CPU coloring pixels one by one, the GPU colors them all simultaneously — which is why effects like water, glow and heat-haze are cheap to render even though they touch the whole screen.
The two you'll meet first
- Vertex shader — runs once per vertex (corner point of a mesh). It decides where each point ends up on screen. Use it to move, wave or distort geometry (grass swaying, a flag rippling).
- Fragment (pixel) shader — runs once per pixel of the surface. It decides what color that pixel is. This is where most visual effects live: tinting, outlines, gradients, texture blending.
Geometry flows through the vertex shader (positioning) then the fragment shader (coloring).
What shaders are used for
- Water and liquids — animated ripples, refraction, reflections.
- Outlines and highlights — glowing selected units, hit flashes.
- Post-processing — bloom, color grading, vignette, CRT/retro filters applied to the whole screen.
- Dissolves and transitions — characters fading in/out with a pattern.
- Palette effects — recoloring pixel art on the GPU without new textures.
Uniforms: feeding data in
Shaders take inputs called uniforms — values you pass from your game each frame, like time, player position or a color. Passing time in is what lets a shader animate (e.g. offset = sin(time) for a wave). This is the bridge between your game logic and the GPU effect.
Where to start
Begin with fragment shaders on a full-screen quad or a single sprite — tint it, add a scrolling gradient, pulse its brightness with time. Small, visible wins build intuition fast. From there, sampling a texture and manipulating its colors covers a huge range of 2D effects. Save vertex-shader geometry tricks for once the coloring side feels natural.