Блог

Оптимизация изометрической RTS с помощью отсечения по пирамиде видимости



Разработчик игр Амине Рехиуи поделился подходом к оптимизации изометрической стратегии реального времени, в которой карта имеет очень большой размер. Стандартных инструментов Unity для отсечения объектов по видимости в его случае оказалось недостаточно, поэтому он реализовал собственную систему, основанную на разбиении карты на секторы и ручном управлении фрустум куллингом.

Суть метода заключается в том, что вся игровая карта разбивается на логические секторы. Камера видит только часть мира, и на каждом кадре вычисляется, какие именно секторы попадают в пирамиду видимости. Объекты в видимых секторах участвуют в отрисовке, а все, что находится за пределами фрусума, не рендерится и не нагружает графический конвейер. Такой подход особенно важен для больших изометрических карт с плотной застройкой и множеством юнитов, где стандартное отсечение Unity уже не дает нужного выигрыша по производительности.

Амине отдельно подчеркивает, что логика игры и отрисовка должны быть полностью разделены. Даже если сектор не попадает в кадр и его объекты скрываются с экрана, они все равно обязаны продолжать выполнять свою игровую логику. Юниты могут передвигаться, производиться, вести бой, ресурсы добываться, таймеры отсчитываться и так далее. Иначе поведение мира станет зависеть от положения камеры, что недопустимо для стратегии. Собственный фрустум куллинг должен отключать именно визуальную часть, а не работу игровых систем.

Отдельное внимание в его подходе уделяется миникарте. Для нее нельзя просто использовать те же настройки отсечения, что и для основной камеры. Если оставить куллинг включенным, то на миникарте начнут исчезать целые участки карты, как это видно на примере тестового ролика. Для корректной работы обзорной карты нужно либо отключать отсечение на время ее рендеринга, либо использовать отдельную камеру и собственный режим отображения, который игнорирует фрустум основной камеры.

Амине подробно описал свой метод и показал, какого прироста производительности удалось добиться после внедрения секторного подхода. Сейчас он применяет эти принципы в своем проекте Powerplay. Это стратегия, в которой игрок управляет экономикой и военной машиной индустриальной державы, балансируя между развитием промышленности, ресурсами и армией. Для такого типа игр стабильная работа на больших картах с большим количеством объектов критически важна, и ручное управление фрустум куллингом становится одним из ключевых элементов оптимизации.

Комментарии (2)

Делаю свою изометрическую стратегию на Unity и как раз уперся в проблему, когда встроенный куллинг перестал спасать на больших картах. Идея с разбиением на секторы и отдельным управлением видимостью оказалась очень кстати. Особенно понравился акцент на разделении логики и рендера, потому что у меня в прототипе часть поведения реально зависела от камеры, и теперь понятно, почему это было ошибкой.
Я не разработчик, но увлекаюсь стратегиями и периодически читаю материалы про то, как их делают. Было интересно заметить, что даже крупным проектам на Unity не хватает стандартных инструментов, и приходится придумывать свои решения. История с тем, как из за куллинга на миникарте пропадали целые куски карты, звучит забавно, но в то же время показывает, насколько такие мелочи важны для финального ощущения от игры. Теперь буду внимательнее смотреть на то, как ведут себя миникарты в разных RTS.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.