Как бы вы оптимизировали большую сцену в 2D игре?

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

Но что делать, если нужна большая сцена? Например, 100 на 100 юнитов.
Большая, бесшовная сцена, поделенная на участки (лес, горы, деревня). Сразу скажу - на сцене нет объектов живущих своей жизнью, вне игрока (игрок ушел - все остановилось).
Огромное количество объектов на сцене вызовет нагрузку на процессор, видеоадаптер, упадет фпс, появятся лаги.

Что я пробовал:
1. Отключать части сцены вне камеры. Например, когда игрок в лесу, отключать деревню (место, где его сейчас нет).
А когда игрок подходит к деревне - включать деревню.
Результат - "зависание" т.к. на загрузку нужно время. Разумеется, можно это было оформить в виде таблички - идет загрузка, но тогда это не бесшовный мир (да и проще поделить 1 большую сцену на несколько маленьких).

2. Индивидуально отключать объекты вне камеры. Проще говоря если игрок не видит куст - отключаем объект, когда игрок уже близко к кусту - включаем объект. Но это сложно реализуемо т.к. отключенный объект не может включить сам себя (из Disable стать Enable) и нужен ещё один объект, который это будет делать.

В общем большая сцена тормозит т.к. на ней много объектов (что очевидно).
Делаем дозагрузку локации - получаем зависание на 5 секунд.
Делаем дозагрузку объекта получаем зависание на 0.1 секунды (приблизительно) и кучу работы.

Как бы вы оптимизировали большую сцену в 2D игре? Есть идеи?
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 2
mayton2019
@mayton2019
Bigdata Engineer
Когда объекты крупные в сцене то пользователь видит их скорость кадров. Можно ставить 60 fps.
Когда пользователь смотрит на объекты размером с пиксель - то и не нужно их обновлять часто.
Сделай хоть 10-15 fps и будет норм.

Ну тоесть я как-бы взял level of detalization но применительно не к пространству а ко времени.
Ответ написан
K0TlK
@K0TlK
Буллю людей.
Разделить мир на ячейки, обновлять и отрисовывать только те сущности, которые находятся от игрока на определенном радиусе. Не знаю что там тебе и откуда нужно подгружать, 100 на 100 юнитов это небольшая сцена, все ее содержимое спокойно будет помещаться в оперативной памяти, с диска там ничего подгружать не нужно. Гугли spatial hashing, выбирай алгоритм, который тебе лучше подходит
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы