Продолжаю допиливать глобальное освещение для 2D проекта с помощью рей-марчинга.Абстрактные примерыЗдесь только прямой свет + пенумбры через реймарч SDF:Прямой + вторичный свет методом virtual lights:Как это работаетПроверка перекрытия света делается в два этапа:1) Строим Signed-Distance-Field текстуру используя оклюлеры.2) Используя SDF для каждого пикселя "маршируем" луч в сторону каждого источника света и проверяем перекрыт ли он оклюдером.3) Далее, если источник не перекрыт, то вычисляем количество полученного пикселем света любой понравившейся формулой.Для не физически-корректных пенумбр можно дешево посчитать расстояние от луча до ближайшего оклюдера как описано здесь.4) Далее, вторичный свет вычисляем похожим образом, используя подсвеченные пиксели в качестве новых источников. Здесь я пока еще экспериментирую, но как будет хороший результат, сделаю отдельный пост. Выложил исходный код на Rust+WGSL здесь:github.comGitHub - zaycev/bevy-2d-gi-experiment: Experiment with computing 2D shading, lighting and shadows with Bevy Engine
А можно обсчитывать тень на примере сосиски?