24

TerraPath #18

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

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

TerraPath #18 Gamedev, Разработка игр, Инди-Разработка, Terrapath, Indigamedev, Разработка, Гифка, Длиннопост

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

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

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

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

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

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

TerraPath #18 Gamedev, Разработка игр, Инди-Разработка, Terrapath, Indigamedev, Разработка, Гифка, Длиннопост

стало:

TerraPath #18 Gamedev, Разработка игр, Инди-Разработка, Terrapath, Indigamedev, Разработка, Гифка, Длиннопост

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

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

TerraPath #18 Gamedev, Разработка игр, Инди-Разработка, Terrapath, Indigamedev, Разработка, Гифка, Длиннопост

стало:

TerraPath #18 Gamedev, Разработка игр, Инди-Разработка, Terrapath, Indigamedev, Разработка, Гифка, Длиннопост

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

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

https://pikabu.ru/profile/GooDCrafter


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

https://vk.com/terrapath

Найдены возможные дубликаты

+3

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

раскрыть ветку 1
0

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

+2

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

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

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

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

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

раскрыть ветку 1
+1

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

+1

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


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

раскрыть ветку 3
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) Рендерим батчи.

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

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

раскрыть ветку 6
0

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

Иллюстрация к комментарию
раскрыть ветку 5
+1

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

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


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

Иллюстрация к комментарию
раскрыть ветку 4
+1

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

раскрыть ветку 3
0

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

раскрыть ветку 2
0

у тебя 4 спрайта разрушения смотрят в одну сторону, если их крутануть в разные стороны

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

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

0

Все равно как-то глупо двери выглядят. Если мы смотрим на стены сверху,то думаю было бы лучше сделать и на двери вид сверху. Не обязательно делать их тонкими,но чтобы они хоть как то отличались по форме от стен.

раскрыть ветку 3
0

Ну, например, в Legend of Zelda - A Link to the Past сделано именно так, как у автора.

Иллюстрация к комментарию
раскрыть ветку 2
+1
Нет, по крайней мере на твоем скриншоте - каждая дверь под тем же углом, что и примыкающая стена.

У автора сделано как в Rimworld (1 и 2 скрины).

Комментатор выше предлагает что-то на подобии Escapist 2 (3 и 4 скрины) или Prison Architect (5 скрин).


https://rimworldgame.com/images/screens/defenseline.jpg

https://images.vice.com/vice/images/articles/meta/2016/09/05...

https://news.xbox.com/wp-content/uploads/Escapists-01.jpg

https://news.xbox.com/wp-content/uploads/Escapists-03.jpg

https://lgdb.org/sites/default/files/node_images/5881/8040.j...

раскрыть ветку 1
0

Опять самописный движок?

раскрыть ветку 1
0

Вроде.

-2
По-моему игра выглядит блёкло. Погляди основы цветовой теории.
раскрыть ветку 2
+4

Думаю, что до графики еще далеко.

раскрыть ветку 1
-2
Она уже есть.
Похожие посты
Возможно, вас заинтересуют другие посты по тегам: