«Чтобы и топовая картинка, и запускалось на калькуляторе»: тред бывшего левелдизайнера Skyforge об оптимизации игр

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

«Чтобы и топовая картинка, и запускалось на калькуляторе»: тред бывшего левелдизайнера Skyforge об оптимизации игр

Ярослав Кравцов, который работал левлдизайнером в Allods Team, а сейчас занимается инди-разработкой, опубликовал в своём твиттере тред о том, как оптимизируют игры. Поводом послужило заявление сооснователя CD Projekt RED Марчина Ивински, в котором тот назвал систему стриминга одной из основных проблем Cyberpunk 2077.

Объясняя ситуацию вокруг Cyberpunk 2077 Марчин Ивиньский рассказывает, что ключевая проблема в системе стриминга. Хороший повод поговорить про оптимизацию производительности в играх. Как сделать игру, чтобы и топовая картинка, и запускалось на калькуляторе.

По словам Кравцова, в студиях нередко стоят «топовые компьютеры», которые облегчают работу разработчикам и позволяют отделу маркетинга демонстрировать игру со всеми новейшими техническими достижениями. Однако ближе к релизу может выясниться, что такие устройства есть лишь у малого количества игроков, «а у остальных игра будет с низким fps, долго загружаться и вообще хорошо, если запустится».

При этом купить в офис старый компьютер для проверки работоспособности билда — это тоже непростая задача, ведь каждый компонент нужно искать на вторичном рынке.

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

Что может входить в требования на мин.конфиге:
- Работа в определенном разрешении экрана
- Средний FPS 30 и выше
- FPS не опускается ниже 20
- Нет фризов
- Норматив на время загрузки (ну, чтоб не 5 минут)
- Чтобы всё влезло в оперативную память и видеопамять
- Размер билда

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

Открытые миры, как в той же Cyberpunk 2077, отличает то, что всё их наполнение нельзя разом загрузить в память. Тут на помощь приходит стриминг, благодаря чему объекты впереди игрока постоянно подгружаются, а позади — выгружаются. Однако у стриминга есть предельная скорость и порой игрок может заметить подгрузку окружения — например, при быстром перемещении по миру.

Скорость стриминга зависит от носителя, на который установлена игра. Так, при использовании SSD проблем со стримингом меньше, чем при установке на HDD. Однако второй дешевле и шире распространён, из-за чего «игры долго загружаются, а затем не справляются со стримингом».

Именно поэтому, по словам Кравцова, на некоторых компьютерах Cyberpunk 2077 не справляется со стримингом, хотя сама система, считает разработчик, должна быть невероятно сложной, чтобы определять приоритет объектов для загрузки.

Например, NPC, которые стоят как декорация-массовка и не участвуют в геймплее, имеют приоритет ниже и поэтому их чаще можно застать в Т-позе (не прогрузилась анимация). Это мое предположение, как там под капотом я не знаю.

Другим важным инструментом оптимизации Кравцов называет LOD (level of details). Суть в том, что объекты, которые находятся далеко от игрока, имеют меньшую детализацию, а значит потребляют и меньше ресурсов.

На производительность оказывают воздействие и источники освещения, которые производят тени в реальном времени. В целях экономии тут используют либо запечённое освещение, либо безтеневые источники.

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

Далее Кравцов описывает несколько хитростей, которые могут помочь новичкам с оптимизацией игры.

Draw Call - дорогая процедура отрисовки объекта на видеокарте. Для этого есть трюки, например, batching - отрисовывать несколько объектов как один. Для этого нужно, чтобы объекты пользовались общим материалом/текстурой. Лучше грузить одну большую текстуру, чем гонять много мелких
Culling - убирать из процесса рендера те объекты, которые находятся вне видимости игрока. Но аккуратно, чтобы, например, оставалась тень от объекта, который не в кадре. Сюда же относится отключение мелких объектов, если они очень далеко.
В системе террейна Unity с давних пор есть две подсистемы: травы и деревьев. Потому что объектов травы вокруг игрока может быть крайне много, но с расстоянием она может исчезать. А вот деревья большие, должны быть видны издалека, им просто так исчезать нельзя.
Система террейна в том числе нужна для правильной оптимизации. Представьте, что у вас террейн 1х1 км, а шаг сетки 1 метр. Это значит модель террена состоит из 1млн квадратов, каждый из которых это треугольника (полигона). Это дофига 2млн полигонов на голом террейне.

Разработчик также отмечает, что его тред ориентирован в первую очередь на новичков.

Странно писать об этом в конце треда, а не в начале. Этот тред рассчитан на новичков, которые ещё не сталкивались с болью оптимизации. Понятное дело, что сюда легко могут набежать крутые программисты, потрясти RenderDoc'ом и разгромить меня в пух и прах. Что, кстати, хорошая идея

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

Хотя бывает и экзотика. Например, всю разработку вели на процессорах Intel и видеокартах NVIDIA, а после релиза оказалось, что на процессорах и видеокартах AMD что-то критически отваливается.

Оптимизация на поздних этапах, по словам Кравцова, — трудоёмкий процесс, ведь разработчикам приходится переписывать целые системы, если проблема в коде, или переделывать тысячи моделей, если что-то не так с данными. Но и преждевременная оптимизация — не лучший выбор, ведь можно потратить много времени на то, что в итоге вырежут из игры.

183183
278 комментариев

При этом купить в офис старый компьютер для проверки работоспособности билда — это тоже непростая задача, ведь каждый компонент нужно искать на вторичном рынке.Расскажите ему про существование виртуалок)

26
Ответить

Комментарий недоступен

152
Ответить

Я лично сам не понял этот пассаж. Видимо мы зря ругаем разработчиков. Пользоваться барахолками это уже для них невыполнимая задача.  То есть бюджеты растут, есть деньги на офис, деньги на зарплату профессионалам, деньги на маркетинг, но найти старый компьютер это уже всё, это за гранью фантастики. 
Я теперь ничего не буду требовать от разработчиков и не буду больше их критиковать. Они даже элементарно на Ebay не могут зайти, что вы хотите от них то? 

45
Ответить

Ты вот выйди с ним раз на раз в твиттере, как мужчина, а не вот это вот "передайте ему" , "расскажите ему" 😎

7
Ответить

Путаете виртуализацию и эмуляцию. При виртуализации хост система отдает часть ресурсов гостевой системе и используется тоже железо. Эмуляция то что нужно, но адекватной производительности не добиться при этом. Чтобы было понятно, VirtualBox запускает виртуальные машины, Qemu эмулирует железо, DosBox тоже эмуль. Как жрут ресурсы эмуляторы, достаточно глянуть на эмули PS3, XBox и схожих. Без реального железа это бессмысленно использовать эмули, только чтобы убедится что софт просто запускается.

8
Ответить

Комментарий недоступен

5
Ответить

Прости, а что за виртуалка позволит эмулировать разные модели видеокарт?
С процессорами то всё проще, топовые матери позволяют отрубать часть ядер, плюс можно частоту оных понизить, и получить более слабый аналог и без всяких виртуалок, но основная проблема то в видюхах как раз.

4
Ответить