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

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

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

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

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

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

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

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

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

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

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

До изменения. Объект на полу освещается так же как и сам пол, также имеет собсвеную тень внутри.
После изменения. Объект на полу освещается своим методом.
32K32K показов
2.8K2.8K открытий
44 репоста
48 комментариев

Красивое

Ответить

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

Ответить

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

Ответить

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

Ответить

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

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

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

Ответить

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

Ответить