Marching toward a light, not away from a camera
Classic 3D raymarching steps a ray out from the camera, checking a distance field at every step, until it's essentially standing on a surface. In 2D, the same idea has an immediate, practical use: soft shadows. Cast a ray from a pixel toward a light position. At every step along it, ask the scene's SDF: "how far is this point from the nearest surface?" If that answer ever gets close to zero, the ray grazed something on its way to the light — that pixel is in shadow.
A binary yes/no shadow looks harsh, though. The trick (credit to Iñigo Quilez, who popularized it for 3D scenes) is to track the smallest ratio of distance-to-surface over distance-traveled seen anywhere along the march. A ray that grazes close to an edge produces a small ratio — a soft, penumbra-like shadow — while a ray that passes nowhere near anything stays fully lit. One loop, no separate blur pass.
Fake normals for free, from the distance field itself
One more trick worth knowing, purely as a read: an SDF's gradient — how its value changes as you nudge p slightly in each direction — points straight out along the surface normal, for free, with no mesh and no stored normal map. A central-difference approximation does it in four extra SDF evaluations:
vec2 e = vec2(0.001, 0.0);
vec2 normal = normalize(vec2(sdf(p + e.xy) - sdf(p - e.xy), sdf(p + e.yx) - sdf(p - e.yx)));
Feed that into the same fake-lighting dot product from Module 08 and you get correct-looking lighting on any SDF shape — not just a circle, where "normalize(p)" happened to already be the right answer.