GPU Effects

Height-map displacement (vertex/tessellation shaders), procedural fBm terrain, slope/height-based texture splatting with blend maps, triplanar mapping for cliffs, LOD (geomipmapping, CDLOD, clipmaps), atmospheric scattering for the sky.

31.1 GPU particle systems

Store particles in SSBOs; a compute shader updates position/velocity/life; emit new particles via an atomic counter; render with instancing or point sprites (gl_PointCoord for round particles); sort for alpha blending (bitonic sort in compute) or use additive blending.

Forces: gravity, curl noise for turbulence, attractors, collisions with depth buffer or SDFs.

31.2 Water

Vertex displacement with sums of Gerstner waves, or FFT ocean (Tessendorf) computed in compute shaders.

Fragment: normal maps scrolling in two directions, Fresnel reflection/refraction (reflection texture from a mirrored camera or SSR), depth-based color absorption, foam where the water meets geometry, caustics.

vec3 gerstner(vec3 p, vec2 dir, float steepness, float wavelength, float t) {
    float k = 6.2831853 / wavelength;
    float c = sqrt(9.81 / k);
    vec2 d = normalize(dir);
    float f = k * (dot(d, p.xz) - c * t);
    float a = steepness / k;
    return vec3(d.x * a * cos(f), a * sin(f), d.y * a * cos(f));
}

31.3 Terrain

Height-map displacement (vertex/tessellation shaders), procedural fBm terrain, slope/height-based texture splatting with blend maps, triplanar mapping for cliffs, LOD (geomipmapping, CDLOD, clipmaps), atmospheric scattering for the sky.

31.4 Volumetrics & atmosphere

Volumetric fog/light shafts (ray march in screen space or froxel grids computed in compute shaders), Rayleigh/Mie atmospheric scattering, volumetric clouds (3-D noise textures, Henyey–Greenstein phase function), fire/smoke (fluid simulation on 3-D textures).

31.5 Other effects

Grass/fur (shells, geometry/mesh shaders, instancing with wind), dissolve effects (noise threshold + emissive edge), holograms/force fields (Fresnel + scan lines + depth intersection), outlines, decals, portals, screen-space refraction, text rendering with signed distance field fonts (MSDF):

// SDF font rendering
float dist = texture(uFontAtlas, vUV).r;          // 0.5 = glyph edge
float w = fwidth(dist);
float alpha = smoothstep(0.5 - w, 0.5 + w, dist);
outColor = vec4(uTextColor, alpha);