Добавил расчет для вторичного света (ссылка на код внизу)

Продолжаю допиливать глобальное освещение для 2D проекта с помощью рей-марчинга.

Абстрактные примеры

Здесь только прямой свет + пенумбры через реймарч SDF:

Прямой + вторичный свет методом virtual lights:

Как это работает

Проверка перекрытия света делается в два этапа:

1) Строим Signed-Distance-Field текстуру используя оклюлеры.

Добавил расчет для вторичного света (ссылка на код внизу)

2) Используя SDF для каждого пикселя "маршируем" луч в сторону каждого источника света и проверяем перекрыт ли он оклюдером.

Добавил расчет для вторичного света (ссылка на код внизу)

3) Далее, если источник не перекрыт, то вычисляем количество полученного пикселем света любой понравившейся формулой.

Для не физически-корректных пенумбр можно дешево посчитать расстояние от луча до ближайшего оклюдера как описано здесь.

4) Далее, вторичный свет вычисляем похожим образом, используя подсвеченные пиксели в качестве новых источников. Здесь я пока еще экспериментирую, но как будет хороший результат, сделаю отдельный пост.

Выложил исходный код на Rust+WGSL здесь:

4040
3 комментария

А можно обсчитывать тень на примере сосиски?

1
Ответить
Автор
5
Ответить