Оптимизируем мидкор: ПК-качество и челленджи с производительностью. Полигонаж
От мидкора игроки особенно ждут не только проработанных механик, но и достойного уровня визуала. Всё это накладывается на ограничения платформ и мощности отдельных девайсов. До сих пор встречаю игры, которые едва запускаются даже на средних девайсах. Для релиза это может быть критично, потому что игроки уйдут не из-за проблем с геймдизайном (который может быть прекрасным), а из-за проблем с оптимизацией. Рассмотрим несколько принципов, на что стоит обратить внимание, чтобы получить хорошую картинку без серьезного ущерба производительности.
Дисклеймер: универсального рецепта «крутой графики» в мобильных играх нет. Для одних проектов нужна сложная физика, другие гонятся за реалистичной картинкой, а кто-то вообще задействует только UI Canvas. Получить всё и сразу можно только на флагманских устройствах, которые есть далеко не у всех. Поэтому мы так бьемся над производительностью, чтобы расширить парк поддерживаемых девайсов. Ниже не будет каких-то секретных ноу-хау, но соблюдая эти простые рекомендации, можно сильно улучшить оптимизацию мидкорных игр.
Полигонаж и не только
Работая над моделями 3D-артисты часто зажаты в тиски условий, поставленные концептом. Но есть несколько «обманок», чтобы получить заветный «объём» и «глубину» в сдаваемой модели. Безусловно инструментарий 3D-артиста не бесконечен, но порой встречаются такие текстуры, на которых даже и Normal Map не нужна — настолько отбиваются детали в обычном Albedo. Поэтому первая рекомендация:
1. Прорабатывайте Albedo
Вместо моделирования пуговиц на жакете у главного героя или NPC, лучше запеките их в текстуру. Для AAA-мобильного шутера обычно достаточно 5000-8000 трисов на персонажа. Опытный 3D-артист вам скажет, что этот лимит расходуется на более важные вещи, чем пуговки, молнии и прочие мелочи. К примеру, в Railroad Empire есть поезд Jon Bull, у которого за рычагами управления стоит персонаж всего в 1000 треугольников и весом 166 КБ.
2. Используйте кранч компрессию
Очень полезная опция. В зависимости от степени сжатия вы можете превратить 5 МБ картинку в 250 КБ, не потеряв при этом исходного разрешения 2048×2048.
Из минусов: иногда при сильном сжатии появляются артефакты на текстурах, особенно бросается в глаза, если текстура белая, но на цветных текстурах практически незаметно.
3. Помните, что концепт — это лишь концепт, а не чертеж структуры адронного коллайдера. Но и вовсе не абстрактный рисунок
Основная цель 3D-модели — сохранить формы и колористику концепта с наименьшим полигонажем и количеством текстур. Часто в попытке сэкономить ресурсы встречаю перекос в сторону «спартанской оптимизации», что даже бочки рядом с домикам делаются билбордами и это сильно бросается в глаза. Другая крайность — чрезмерная детализация, когда у бочки моделируется каждая дощечка, а потом оказывается, что эта модель для RTS с камерой сверху.
В Railroad Empire вместо прорисовки каждой дощечки у бочонка, объекты обыгрывались картами Ambient Occlusion, запеченного в альфа-канал Albedo. Так можно получить объем, сэкономив текстуры.
4. Следите за количеством треугольников в кадре
Для слабых устройств их должно быть не больше 100 000 – 150 000 трисов на кадр. Да, прогресс не стоит на месте, устройства становятся мощнее из года в год, но и стоковая нагрузка на них становится больше.
Каждое новое обновление ОС вашего телефона включает в себя новые и новые дополнительные сервисы, оседающие в оперативной памяти; фоновые процессы; авто-докачки приложений из сторов, о которых вы возможно даже не подозревайте, потому что забыли где-то снять эту галочку; геолокация (если пользуйтесь навигатором) и ещё сотни других сервисов, поедающих оперативную память. На запуск игры в лучшем случае остается половина от общего объёма RAM, а то и меньше.
5. Лодирование
Пожалуй, это основной поинт оптимизации Railroad Empire. Именно через правильное и рациональное лодирование, мы можем получить фантастический прирост FPS. Например LOD0 на одной из высоток весит порядка 7000 трисов. LOD1 — уже 2000/1500 трисов. LOD2 — 700/300 трисов. Безусловно это совсем не best practices, но тут надо учитывать особенности проекта, и с нашей плотностью застроек мы получили целевой FPS на средних девайсах в первую очередь благодаря лодированию.
6. Реюзайте существующие 3D-модели в движке
Каждая 3D-модель занимает определенный объем памяти. 20 префабов одного и того же домика не равно 20 уникальных домиков на карте. В Railroad Empire очень много уникального по своей сути контента, но чтобы карты грузились быстрее мы часто используем реюз.
А в следующий раз разберем, что делать с текстурами и анимациями.
*****
- Часть 2. Текстуры и анимация