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"

1
Автор поста оценил этот комментарий

Так уж вышло) Всё это долго и сложно)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

И не говорите. Разработка игр очень сложная и долгая тема.
Многие пока сами не попробуют, думают, что это очень легко и быстро.

показать ответы
1
Автор поста оценил этот комментарий

http://www.gamedev.ru/projects/forum/?id=209522

Были попытки)

На форуме описывал, хотя в конечном счёте по большей части пришлось переписывать.


На самом деле тени рассчитаны по тайлам, просто я рассчитывал значение освещённости в 4 углах каждого тайла и шейдером делал плавное освещение.

+ тут свету нельзя поворачивать больше, чем на 45 градусов, за угол свет не пойдёт.

+ за счёт шейдера ещё выходит некое размытие, резких переходов нет.

Обзор тоже завязан на этот алгоритм.

Просто я хотел сделать возможность выбора потайлового и шейдерного освещения, кому как больше нравится, соответственно потайловый расчёт был вполне уместен.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Просмотрел всю тему.
Выглядит прикольно.
Я так понял проект временно заброшен?

показать ответы
1
DELETED
Автор поста оценил этот комментарий

при том, что иконки взяты из террарии :)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Вся графика полностью моя.
Уточните какая текстура, как вы считаете, из террарии?

3
Автор поста оценил этот комментарий

У меня в своё время подход с шейдерами убил кучу времени... У квадратного освещения есть свой шарм, я бы так и оставил. А ещё освещение лучше делать на сервере, т.к. оно может влиять на какие-то характеристики и т.д.

На клиенте конечно оптимальнее, но тут уж зависит от задач.

Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Делали свою реализацию SS13?
Расскажите немного о своем проекте?
Или где о нём можно почитать.

Согласен, квадратное освещение выглядит ламповее для 2д игр.
Я вижу у вас на скрине что-то типа FoV? Сделали его по аналогии с тенями в 2д?

показать ответы
1
Автор поста оценил этот комментарий

Спасибо. Парень предлагает клетки уменьшить, а что если маску сделать из клеток и сделать их меньшего размера, ну и выпиливать не нужные, можно даже в пределах экрана. И видимо я опять не вижу очевидную проблему в таком способе :)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Маска будет не очень удобна, потому что нам надо будет делать много различных вариантов для неё.
Проще сделать через клетки. А улучшать и сглаживать я буду позже.

1
Автор поста оценил этот комментарий

А что если на экран наложить картинку-маску, а свет будет выпиливать в ней "дыры". Тогда можно сделать круглый свет. Это чисто гипотеза, я не программист, и потому, интересно узнать, идея дурацкая или право имеет?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Право имеет, но возникает проблема что свет выходит за стены.

показать ответы
7
Автор поста оценил этот комментарий

rimworld какойто

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Подробнее про вдохновление с римворолда можно почитать тут:

https://pikabu.ru/story/terrapath_0_5274718

1
Автор поста оценил этот комментарий

Это рекурсивное освещение? Если это так, то норм так за пару часов накатать. у меня пару дней уходило на такое

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да. Мне было проще, т.к. я уже его писал в 2012, только менее оптимизированное и для 3д.

Иллюстрация к комментарию
1
Автор поста оценил этот комментарий

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

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Да, идею понял. Возможно, позже попробую это реализовать.
Пока тружусь над сетью.

1
Автор поста оценил этот комментарий

Такой вариант будет хорош если клетки будут меньше, 8 на 8 идеально будет.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Тоже думал над этим. Хотя для начала я сделаю сглаживание по вершинам.

показать ответы