TerraPath #6
Кратко о содержании сегодняшнего поста:
Освещение.
Чтобы создать освещение у нас есть огромное количество вариантов, рассмотрим 3 основных из них:
1) Считать освещение через шейдеры.
Плюсы:
- Очень классная картинка.
Минусы:
- Сложность в написании.
- Требуется наличие карт нормалей для каждого объекта, для более качественного освещения.
Вариант отличный, но очень долгий и сложный. Возможно в будущем освещение будет работать на шейдерах, но мы идем дальше.
2) Считать освещение по клеткам в каждом чанке (область 16*16 клеток):
Плюсы:
- Достаточно легко кодить.
Минусы:
- Выглядит чуток хуже чем шейдерное освещение.
Вариант хороший, но мы его немного оптимизируем.
3) Я назвал эту технику Space Screen Lighting Model. Суть в ней точно такая же как и в прошлом варианте, только свет считается исключительно для видимых блоков на экране.
Плюсы:
- Работает быстрее чем прошлый вариант.
- Возможно делать динамические источники света.
Минусы:
- Не возможно получить значение света за пределами окна видимости.
Пару слов как можно исправить этот минус:
На клиенте освещение можно считать как в 3 варианте, а на сервере как во 2, если потребуется знать свет в каждом тайле.
Варианты 2 и 3 можно улучшить графически, если считать среднее значение освещенных клеток на вершине. Освещение получится мягким, но я это реализую позже.
В итоге где-то за пару часов я написал вот такой вариант:
Сразу сделал возможность задавать освещение любому объекту.
Причём свет задается в формате RGB, то есть освещение цветное.
0xFFFFFF - самый яркий свет.
0x000000 - свет отсутствует.
Максимальная яркость по отдельным каналам:
И их комбинации:
Все три факела вместе:
А на этом всё, спасибо, что дочитали.
Также не пропустите прошлые посты:
https://pikabu.ru/profile/GooDCrafter
Ссылка на группу в вк:
https://vk.com/terrapath
В след. раз расскажу про смену дня и ночи.
























