44

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

В след. раз расскажу про смену дня и ночи.

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"