Добавил нормальный шейдинг объектов над полом
Доработал то как шейдятся объекты над полом. Я разделил пол, стены, и "остальные объекты" на 3 отдельных слоя (RenderLayer в Bevy). Текстуры этих слоев затем передаются в один фрагментный шейдер для всего экрана где они по разному освещаются заранее посчитанной текстурой света пола и затем смешиваются. Думаю для начала получилось неплохо. Сам метод для освещения объектов тоже довольно простой (учитывая что у нас уже посчитано свечение для пола), но вроде бы рабочий.
UPD – добавил до и после.
Фрагментный шейдер выглядит примерно так:
- Для пола мы просто перемножаем его текстуру на текстуру свечения. Тут без все изменений.
- Для стен мы позволяем свету проникать внутрь стены на некоторый радиус.
- Для других объектов над полом (мебель, персонажи, декорации и тп) мы делаем дополнительные семплы из текстуры свечения пола с большим отступом (на видео +/-32 текселя) и берем максимум. Потом еще учитываем вертикальное направление чтобы больше света приходило от источников перед объектом, а не за ним.
После этого мы делаем альфа-смешивание слоев.
PR изменения пока еще не в основной ветке, осталось еще исправить пару багов чтобы свет не семплился из границ экрана.
Также у этого проекта для системы 2D освещения появился второй контрибутор который сделал настраиваемое разрешение для SDF, поддержку поворотов и масштабирования для окклюдеров, и исправил рей-марчинг за пределами экрана.
Код открыт под лицензией Apache 2.0, так что если есть желание внести свои изменения и исправления – patches are welcome.
UPDATE: До и после изменения
Красивое
Продают или просто показывают?
Красота, ну, всё, ждём инди-рогалик с 1000 предметов и механик через неделю :D
С открытым миром, крутым сценарием, без пустых, монотонных квестов, с интересными локациями на каждый кв. см.
можт стоит прикрепить как было до переделки?
Добавил в конец статьи.
Это просто хобби? Или в чем цель изучения не актуального движка?