Ray Marching Soft Shadows in 2D (2020)
Метод ray marching мягких теней в 2D использует distance field — изображение, где яркость пикселя отражает расстояние до ближайшей формы (светло-серый — близко, темно-серый — далеко). Для текста на canvas генерируется DF с помощью GPU-библиотеки. От пикселя к источнику света строится луч: на каждом шаге запрашивается расстояние из DF (sceneDist), и луч продвигается ровно на него, гарантируя, что формы не пропусятся (пример: шаг 95 пикселей). Если rayProgress превышает расстояние до света без пересечения (sceneDist <= 0), пиксель освещён (1.0); иначе — в тени (0.0). Для производительности — цикл for вместо while.
Мягкие тени достигаются двумя правилами: 1 — чем ближе луч к форме (минимум sceneDist по шагам), тем темнее; 2 — чем дальше пиксель от точки наибольшего сближения (sceneDist / rayProgress), тем сильнее тень. Возвращается минимум этого коэффициента вместо 1.0/0.0, создавая пенумбру без полной реалистичности, но быстро и красиво. GLSL-код прост: отслеживает min(sceneDist / rayProgress). Демо на WebGL показывает шаги луча.