Добавил нормальный шейдинг объектов над полом

Доработал то как шейдятся объекты над полом. Я разделил пол, стены, и "остальные объекты" на 3 отдельных слоя (RenderLayer в Bevy). Текстуры этих слоев затем передаются в один фрагментный шейдер для всего экрана где они по разному освещаются заранее посчитанной текстурой света пола и затем смешиваются. Думаю для начала получилось неплохо. Сам метод для освещения объектов тоже довольно простой (учитывая что у нас уже посчитано свечение для пола), но вроде бы рабочий.

UPD – добавил до и после.

Пол, стены и другие объекты теперь рендерятся отдельно.

Фрагментный шейдер выглядит примерно так:

  • Для пола мы просто перемножаем его текстуру на текстуру свечения. Тут без все изменений.
  • Для стен мы позволяем свету проникать внутрь стены на некоторый радиус.
  • Для других объектов над полом (мебель, персонажи, декорации и тп) мы делаем дополнительные семплы из текстуры свечения пола с большим отступом (на видео +/-32 текселя) и берем максимум. Потом еще учитываем вертикальное направление чтобы больше света приходило от источников перед объектом, а не за ним.

После этого мы делаем альфа-смешивание слоев.

PR изменения пока еще не в основной ветке, осталось еще исправить пару багов чтобы свет не семплился из границ экрана.

Также у этого проекта для системы 2D освещения появился второй контрибутор который сделал настраиваемое разрешение для SDF, поддержку поворотов и масштабирования для окклюдеров, и исправил рей-марчинг за пределами экрана.

Код открыт под лицензией Apache 2.0, так что если есть желание внести свои изменения и исправления – patches are welcome.

UPDATE: До и после изменения

До изменения. Объект на полу освещается так же как и сам пол, также имеет собсвеную тень внутри.
После изменения. Объект на полу освещается своим методом.
308308
48 комментариев

Красивое

13
Ответить

Продают или просто показывают?

2
Ответить

Красота, ну, всё, ждём инди-рогалик с 1000 предметов и механик через неделю :D

4
Ответить

С открытым миром, крутым сценарием, без пустых, монотонных квестов, с интересными локациями на каждый кв. см.

3
Ответить

можт стоит прикрепить как было до переделки?

4
Ответить
Автор

Добавил в конец статьи.

4
Ответить

Это просто хобби? Или в чем цель изучения не актуального движка?

Ответить