24

TerraPath #18

Кратко о содержании сегодняшнего поста:

Батчинг.
Отсечение по области видимости.
Улучшения с прошлого поста.
Текстура разрушения растягивается на весь объект.

Ошибка расчёта матрицы при инстасинге стала давать вот такой результат.
Кто сказал что кодить под видеокарту это скучно? x)

Добавил батчинг в игру.
Батчинг это такой способ оптимизации. Смысл его заключается в том что мы рисуем однотипные объекты(шейдер + модель) за один вызов отрисовки (DrawCall).
То есть не важно будут это 100 объектов или десять, все они отрисуются за один DrawCall.
Тем самым я скинул кол-во дравколлов с 6183 до 73.
В некоторых частях сцены он даже доходил и до 10.000, так как я рисовал все объекты отдельными дравколлами.

Следующим шагом стало добавление Отсечение по области видимости:
Принцип его работы следующей: Каждрый раз когда мы добавляем объект на отрисовку, мы сперва проверяем, а видно ли его в камере. Тем самым мы не рисуем объекты которые не видно и экономим ресурсы видеокарты.

После всех оптимизации фпс на моей машине в собранном билде вырос с 152 до 528.

Улучшения с прошлого поста:
Товарищь @Distinguishable, и @Ashvar, предложили немного улучшить двери:

Ashvar:
Я бы ещё посоветовал сделать немного другую границу у стен для ситуаций, когда стена переходит в другой вид стен или переходит в дверь.
Distinguishable:
Боковые двери выглядят отвратительно, надо их повернуть на 90
вот что из этого получилось:
было:

стало:

Мелочь конечно, но уже выглядит намного лучше.

Текстура разрушения растягивается на весь объект.
Было:

стало:

А на этом всё, спасибо, что дочитали.

Также не пропустите прошлые посты:

https://pikabu.ru/profile/GooDCrafter


Ссылка на группу в вк(есть играбельная демка):

https://vk.com/terrapath

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

ЗАПРЕЩЕНО:

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

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

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


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

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

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

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

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

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

Нельзя растягивать текстуру разрушения!

У тебя пиксельная графика без сглаживания, ну какое растягивание в самом деле?

Я бы сделал спрайты трещин для разрушения стен (для каждой из 16 вариантов поворота), но для объектов нужны какие-то индивидуальные варианты отображения поломок.

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

Двери стали лучше, хотя кончено у них всё же другая проекция, не такая как у стен. Но смотрится хорошо. Лучшее решение для минимальных трудозатрат.

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

Это временное решение.
В планах переписать разрушение на шейдеры.

1
Автор поста оценил этот комментарий
А как формируется чанк? По идее это ведь выборка из мирового массива или мир хранится как массив чанков? И может имеет смысл рисовать чанки, оставляя камеру в центральном, а не игрока. На случай, если планируется реализовать в будущем свободный обзор камерой
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
А как формируется чанк? По идее это ведь выборка из мирового массива или мир хранится как массив чанков?

Чанк область 16*16 клеток.

Для хранения использую хешмап, ключом выступает позиция чанка в мире.

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

А это хорошая идея. Спасибо!

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

а каким алгоритмом проверяли на видимость? просто я в свое время тоже подобным заморачивался и остановился на двумерном массиве.


Весь мир представлен как двумерный массив. Суть в том, что проверялось положение игрока 10 раз в секунду например, можно к скорости игрока привязать частоту проверки. Если int от положения изменялся по сравнению с предыдущим значениям, то перестраивались границы прорисовки массива на экран. Массив размером с экран + пол экрана в каждую сторону или около того (для корректного просчета света за экраном). ну и внутри "экранного" массива уже просчитывалась видимость. Правильнее может конечно было использовать какую-нибудь хэш-таблицу, но производительность просто зашкаливала. Само собой батчинг и т.д. В итоге отрисованный без оптимизации мир, даже размером с экран, выдавал меньше фпс, чем сделанный вышеописанным способом

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

Всё просто если опустить структуру и некоторые архитектурные решения, то отрисовка идет так:
1) Получаем чанк в котором игрок.
chunkX = player.x / tileSize / chunkSize;

chunkY = player.y / tileSize / chunkSize;

2) Устанавливаем камеру на игрока.
camera.x = player.x;

camera.y = player.y;


3) Рисуем 3*3 чанка, игрок всегда в центральном.

4) При отрисовке чанка мы проверяем каждый тайл на видимость камеры.
Если тайл видно заносим его в батч.

5) Тоже самое делаем с объектами.

6) Рендерим батчи.

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

Пока что пилю бэкенд, так что показывать нечего.

---

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

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

В плане?


А среди "своих" - геймдевов можно и в других местах показать
Как сделаете, киньте ссылку, интересно глянуть что другие делают.

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

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

Схематично нарисовал наиболее логичный(реалистичный) вариант, где всё это исправлено.


UPD: прочитал в группе, что перспектива будет сверху, как в римворлде. Ну тогда ладно, можно выкинуть все мои идеи, потому что в графике рима нет логики.

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

Да изначально вдохновляюсь римом. А проекция там не реальная. Часть объектов в одной/часть в другой.
В целом в этом есть свой шарм.

А можете показать внешний вид вашей игры, ну и в целом рассказать что за проект.
Посмотрел у вас в профиле, но не нашел постов об игре :c

показать ответы
0
Автор поста оценил этот комментарий
Судя по скрину, теперь текстура разрушения вылезает за границу объекта справа.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Она и раньше вылазила.

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

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

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

Да было бы неплохо увидеть скрин.
А так у меня уже есть сортировка, на буфере глубины.
К примеру деревья занимаю физическую одну клетку, а визуально 1,5 в высоту.

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

переходы бы сгладить между типами земли

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

Уже стоит в планах.

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

а что если текстуру разрушения рисовать не растягиванием, а так-же, но с рандомным направлением спрайта

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

Не совсем понял. Всмысле крутить спрайт?
Можно пример?

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

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества