Наука и технологии
27 августа 2024
Поделиться

Про оптимизацию с оптимизмом: почему современные игры выходят не готовыми?

Про оптимизацию с оптимизмом: почему современные игры выходят не готовыми?

источник: IPQuorum

Много копий было сломано в дискуссиях о том, что не так с современными играми, хотя в одном спорщики сходятся почти единогласно — игры регулярно выходят «сырыми»: плохо работают на мощных компьютерах (а порой и консолях тоже), глючат и попросту мешают в них играть, нуждаясь в патчах. Проще говоря, краеугольным камнем становится необходимость нормальной оптимизации. IPQuorum поговорил с CG-художником Ярославом Ковалёнком о том, почему так происходит и что можно сделать, чтобы исправить ситуацию (в том числе в российском геймдеве).

Как работает оптимизация в играх?

Давайте начнем сразу с самого главного — со страшного слова «оптимизация». Что это такое, зачем оптимизировать игры и почему игры бывают не оптимизированными? Сама оптимизация состоит из компонентов графики, каждый из которых нужно оптимизировать для реал-тайм движка, то есть игрового движка, который воспроизводит контент в реальном времени. Из чего игра состоит? Из моделей в первую очередь, то есть наборов полигонов (плоскостей для визуализации). Важно, чтобы полигонов было достаточно — не слишком много и не слишком мало. Когда их много, это негативно влияет на производительность. А когда слишком мало, то у тебя получаются, как было во многих старых играх, условно, легендарные квадратные колеса в Enter the Matrix. Тогда были строгие ограничения на количество полигонов — компьютеры просто не могли их обсчитывать. Поэтому были проблемы с круглыми объектами.

Следующий, достаточно важный компонент — вызовы отрисовки. Для каждого объекта посылается запрос в видеокарту на отрисовку, после чего видеокарта посылает «ответ» и отрисовывает. Как это можно оптимизировать? Например, использовать инстансы, то есть связанные копии объектов. Чаще всего можно увидеть это в игровой траве: куча копий одного и того же пучка, разбросанных тут и там. Если приглядеться, то легко увидишь. Такая работа с однообразными, похожими объектами сокращает количество посылов в оперативную память — как итог, она меньше забивается. А нам очень важно, чтобы «оперативка» была загружена лишь до определенного момента.

Далее. Все модели состоят из материалов и текстур (массив цветовых точек, образующих изображение). Материалы — это физические свойства объекта. Например, все объекты в мире могут быть шероховатыми или гладкими, и тогда они будут либо сильно отражать свет, либо чересчур матовыми. Все это надо оптимизировать. У каждой модели есть такой параметр, как texel density, то есть плотность текстуры, и эта плотность должна быть равномерной. Если в игре есть стол, то у него может быть достаточно плотная текстура, потому что он большой. Но если это шариковая ручка, которая лежит на столе, то делать ей такую же плотную текстуру, как у стола, — излишняя детализация, вы все равно не обратите на нее особого внимания. Если только эта ручка не используется непосредственно в какой-нибудь кат-сцене. Чаще всего мы смотрим на лица персонажей, поэтому они всегда больше всего детализированы и в плане геометрии, и в плане текстур.

Еще важно использовать карты нормалей. Это такие функции, которые позволяют понять, как падает свет, и немного его «переотразить», чтобы неровности на объекте были максимально реалистичными. У самого объекта, как у строгой геометрической фигуры, нет неровностей, но из-за карты нормалей они становятся видны. Плюс, конечно же, пост-обработка в работе с геометрическими объектами. Сейчас, например, в играх модно облака делать «настоящими», как в Red Dead Redemption 2. Облако там — это комплексная структура, сгенерированная при помощи разных шумов, которая пропускает свет по определенным законам. Это позволяет разработчикам делать, например, так, что грозовые облака отличаются от облаков в ясный день, или от облаков на закате, или на рассвете. Они движутся по карте, анимируются, и все согласно законам природы.

А потом идет оптимизация кода. Это более сложно, я в этом уже не так хорошо разбираюсь, тем не менее идея такая, что многие вещи можно оптимизировать, то есть описать более правильно, чтобы какая-то команда выполнялась быстрее. Собственно, из всех этих вещей складывается оптимизация. Плюсом идет использование определенных технологий. Например, если вы знаете, что в игру будут играть на RTX 4090, одной из самых мощных видеокарт, то можно использовать наниты (Nanite) — новая технология виртуальной геометрии для движка Unreal Engine 5, которая подгружает только видимую камере геометрию и позволяет рисовать сцены быстрее обычного. Значит, тебе не так сильно нужно оптимизировать всю сетку модели (мы же помним, что модели состоят из сетки полигонов?), потому что наниты делают это автоматически.

Кстати, а что значит «видимую камере геометрию»? Тут надо рассказать, что такое система лодов. Наверное, приходилось видеть, когда играешь в игры, что объекты, которые далеко от тебя, превращаются в более низкополигональные. Вот это и есть лод, или Level of Detail, то есть уровень детализации. Для каждого объекта в игре делается несколько вариаций, отображающих его форму и суть, но каждая из которых имеет все меньшее и меньшее количество полигонов и более низкое разрешение текстуры, то есть меньшее количество цветовых точек. Это делается для того, чтобы как раз-таки на дистанции, где эта детализация не так важна и где ты даже не увидишь подмену (если расстояние до объекта подсчитано правильно), меньше нагружать компьютер. Если же ты близко к объекту, он уже имеет высокий полигонаж и текстуру высокого разрешения.

Проще говоря, оптимизация по сути своей: где важно — сделать максимально качественно, где не важно — срезать углы. Поэтому сейчас, например, большинство игр используют такую штуку, когда большинство объектов отрисовывается только в поле зрения камеры (то есть та самая «видимая камере геометрия»). Всё, что за камерой, вне поля твоего зрения, не отрисовывается. Таким образом, экономится память, оперативка и так далее.

Про плохую оптимизацию игр

Считаю, что самые главные проблемы — это сроки и руководство компаний. В наше время продукт пытаются выпустить в минимальные сроки. Сейчас игры разрабатываются очень большими компаниями, иногда это делают сразу несколько крупных команд, разбросанных по всему миру. И когда такое происходит, есть шанс, что игру выпустят немножечко не готовой. Как, например, было со Star Wars Jedi: Survivor. Сами разработчики говорили о том, как на них давили, чтобы они выпустили ее как можно скорее. Если чисто по-человечески на это посмотреть, менеджмент видит, что игра есть, все прекрасно работает. Почему бы ее не выпустить? Потом приходят разработчики и говорят: нам еще надо отполировать, оптимизировать код. А им отвечают: нет, выпускайте. Чаще всего, мне кажется, это так. Очень редка, в моем понимании, вина именно разработчика. Конечно, бывают инди-студии начинающие, которые не знают, как оптимизировать игры, но прежде всего это индустрия профессионалов, которые неплохо разбираются в своем деле.

Вспомним, как было с Cyberpunk 2077. CD Projekt выпустили не оптимизированный продукт, все страшно ругались, мол, это не игра, а кусок кода. Между тем до этого ее выход переносили два или даже три раза. Сейчас с момента выпуска прошло четыре года, и теперь это отлично работающая, сбалансированная игра, которая идет даже на не самых мощных компьютерах. Да, она все еще достаточно требовательная: если ты играешь на каком-нибудь старом «ведре», придется скинуть настройки до минимума. Но она запустится и будет хорошо работать. А на топовом «железе» ты увидишь чудеса современной графики. В свое время «Ведьмак 3» тоже вышел на первых порах не очень играбельным, но по итогу там была очень хорошая игра внутри, и это всех удерживало в нем.

Могут ли разработчики оценить, сколько им нужно времени на «полировку»? Наверное, да, но есть другая проблема: иногда разработчики и менеджеры в плохом контакте находятся. С якутской игрой The Day Before вообще была курьезная ситуация, когда дату выхода на какой-то конференции выкатили. И разработчики узнали о том, что игра выходит через месяц, только из этого ролика. У них были другие сроки, другие задачи, а тут вот такое. Игровая индустрия уже больше, чем, например, киноиндустрия, по капитализации. А где много денег, там происходят такие вещи. Раздуваются команды, маркетинг, и сроки зачастую важнее, чем сам продукт.

Про опережение технологиями развития «железа»

Все в меру. Допустим, Playstation 5 уже сколько лет (консоль была выпущена в ноябре 2020-го)? «Железо» в ней не менялось. Но игры на ней все еще выглядят офигенно. То есть начинка позволяет работать с гораздо более новыми технологиями. Или, например, Nintendo Switch. Там мобильный чип 2015 года, это с ума сойти, какая старая штука. И на нее тем не менее до сих пор выходят порты актуальных игр (Hogwarts Legacy, например). Если нужно оптимизировать — могут оптимизировать, да. Но есть игры, в которых графика является основным продающим продуктом, поэтому ее пытаются сделать крутой, классной и актуальной. И тогда уже старое «железо» может не подойти.

Для ПК-геймеров есть еще одна проблема, связанная с самим «железом». Вам нужно держаться актуальной линейки видеокарт, тогда и графика будет хорошая, и оптимизация будет на уровне. Не обязательно брать RTX 4090, чтобы играть в Cyberpunk 2077, хватит и 4070, и даже 4060. Не все технологии получится задействовать на полную мощность, но работать будет и получить удовольствие от игры тоже получится. Зачастую люди покупают компьютер на очень долгий срок, и порой можно встретить не очень адекватные пожелания, чтобы у игрока работал «Киберпанк» на видеокарте GTX 880, которая из поколения еще старше «свитча». Плюс, конечно же, влияют мировые кризисы, как и то, что «железо» становится дороже с каждым новым поколением. Когда выходила серия видеокарт GeForce 30, были очень большие проблемы с тем, чтобы купить их из-за майнингового бума — все стали скупать видеокарты, чтобы добывать биткоин. Их не было в розничных магазинах, и приходилось заказывать с пересылкой по цене в два-три раза дороже.

Есть мнение, что игроки в принципе не всегда успевают покупать актуальное «железо» и что эта проблема усилилась в последние годы — индустрия разрослась, денег на разработку нужно больше, выходит очень много дорогих и требовательных игр. Я не могу сказать, что раньше было иначе. Всегда происходит так: технологический бум, изобретается что-то новое, энтузиасты бегут скупать новое «железо», а остальные остаются на старом и не могут толком ничего запустить на нем. Можно вспомнить не самый удачный опыт Ageia PhysX с физическими ускорителями в 2008-м: они решили сделать ставку на то, что следующим big thing в графике, то есть неким трендом, на который все будут ориентироваться, станет игровая физика. Они сделали специальную карту, которая вставлялась в отдельный порт рядом с твоей видеокартой и обеспечивала физическое взаимодействие разных объектов. И без нее «физика» в играх работала некорректно. Такое решение сильно не понравилось людям, и в итоге от него отказались, но сам вычислительный блок и физический движок PhysX, который был для этого придуман, перекочевал в последующие поколения видеокарт Nvidia.

Раньше на острие новых технологий всегда были именно консоли — их покупали именно чтобы играть в игры, а подходящие компьютеры для этих целей были слишком дорогие. Сейчас же приставки по сути мало чем отличаются от ПК, который можно регулярно обновлять. С консолями тебе остается только ждать следующего поколения. Выходит, чтобы геймеры поспевали за индустрией, всем просто нужно обзавестись топовыми компьютерами? В идеале, конечно, да, но нет. Я думаю, важно, чтобы менеджеры, которые в этих командах работают, научились лучше слушать разработчиков: ставить правильные сроки, предугадывать дополнительные расходы и закладывать средства на непредвиденные, давать время на оптимизацию и правильно доносить информацию. Проще говоря, нужно заново создавать коммуникации. У нас есть примеры шикарно выглядящих игр с отличной оптимизацией, например Gears 5, хотя это тот же самый Unreal Engine, который любят ругать. Сейчас, кстати, частенько еще и сокращаются команды, ответственные за оптимизацию, и вместо них нанимают людей на аутсорсе, которые не были погружены в проект все это время.

Про технологическое состояние индустрии

По-моему, она на пике. Все технологии, которые развивались в течение последних 20 лет, привели нас к тому, что мы достигли практически совершенства. Классический, технический прогресс, где были важны терафлопсы (рейтинг измерения производительности графического процессора) и так далее, — тут мы как будто упираемся в тупик. Вот пример. Процессор состоит из кучи маленьких транзисторов, размер которых постоянно пытаются уменьшить вдвое. Закон Мура, если слышали о нем. Так вот, в последние несколько лет он как будто бы перестал работать — мы приблизились к наномиру, где уже совсем другие законы и дальше просто физически невозможно уменьшать. После четырех нанометров в процессоре уже нет каких-то суперинноваций. Да, где-то делают два нанометра, но это все немного танцы с бубном и, скорее, хитрый маркетинговый обман, чем настоящая новая технология.

Сейчас происходит нечто совершенно иное: уход в нейросети, в машинное обучение, deep learning. Это на самом деле не просто слова и не просто Midjourney, который рисует тебе картинки, это очень интересные вещи. Взять популярную сейчас технологию, рейтрейсинг (трассировка лучей — алгоритм для расчета распространения света). Вычислительной мощности, чтобы считать настоящий рейтрейсинг, не хватает. Что делают разработчики? Они заставляют искусственный интеллект предположить, где будут лучи, и за счет этого делать более стабильную, качественную картинку (технология называется Ray Reconstruction). Мне кажется, направление, в котором двигается Nvidia, — это сейчас самый правильный тренд — внедрять нейросети в постоянные задачи, когда часть работы перекладывается на обученный алгоритм.

Возьмем, например, так называемые «лесенки» (графические баги по краям объектов, в результате которых происходит слишком резкий переход между границами кривых линий и возникает характерная «рябь», неприятная глазу). Стандартно это называется aliasing, или элайзинг, а технологии, которые «лесенки» убирают, — antialiasing. Допустим, мы рендерим (отрисовываем) прямую линию. Если мы представим, как выглядит изображение в игре, то это, по сути, набор светящихся квадратов: один пиксель — один квадрат. Отсюда и возникают «лесенки»: линии между квадратами не сглаживаются. И тут есть два варианта, как избавиться от них. Например, можно очень сильно увеличить разрешение. Но чем выше разрешение, тем больше нам нужно вычислительных мощностей. Есть темпоральный способ, когда берутся сэмплы из предыдущего кадра, текущего и следующего, и они между собой как бы смешиваются, а мы подмыливаем картинку. Есть вариант, когда мы рендерим картинку в немного более высоком разрешении, а потом сжимаем. И вот есть разные решения на основе нейросетей.

Сейчас, например, есть технология DLSS, когда изображение рендерится в меньшем разрешении, потом апскейлится, то есть растягивается, и затем обратно сжимается. И мы уже видим картинку без «лесенок». Как сама технология работает — в каком-то смысле black box, но, как заявляет Nvidia, они обучают нейросеть на изображениях с высоким разрешением. Получив кадр, нейросеть увеличивает его до 16к и дорисовывает детали, после чего картинка сжимается до разрешения нашего монитора. Мы получаем изображение, которое подходит для нашего 4к- или 8к-экрана, но улучшенное, как если бы это было 16к. Сжатие такого большого изображения решает проблему элайзинга: изображение даже в формате 2к будет, как в 4к, но производительность останется на том же, удобоваримом уровне. Так получается антиалайзинг. И это технологическое чудо. Единственная его проблема — проприетарность таких технологий, но, когда они станут менее сложными, более понятными и открытыми, тогда мы увидим очень серьезное развитие.

В каком состоянии российская индустрия?

Не могу сказать, что она сильно отстает или опережает мировую, но болеет в основном теми же болезнями. Например, Atomic Heart — это продукт, который делался вдохновленными людьми. Он прекрасно оптимизирован и с каждым годом становится только лучше. Более того, в России огромное количество специалистов, которые работают в самых разных студиях мира. А есть «Смута», которая вызывает довольно много нареканий.

Но есть проблемы, например, с бюджетами. Нет субсидий, а налоги большие. Поэтому большинство российских студий зарегистрированы на Кипре. Плюс современная повестка с санкциями. В России всего 140 миллионов человек, из которых играют, условно, миллионов 30. Если ты будешь продавать игру на аудиторию в 30 миллионов, то это как-то несерьезно, учитывая, каких огромных бюджетов требуют современные игры. Их нужно продавать на весь мир, а выходов на него очень мало. Проще сделать дополнительное юрлицо, но где-то за границей. Нет проблем, конечно, из России в Steam продаваться, но есть проблемы с оплатой. Разработчику было бы интересно, чтобы его игру покупало как можно больше людей. Поэтому, кстати, самый распространенный язык игр — английский.

Очень показателен пример провала якутской The Day Before. Братья Готовцевы никогда не занимались разработкой AAA-игр и специализировались на мобилках по типу «три в ряд». И тут они решили, что есть такая хайповая тема, сделали крутую презентацию, картинку, ролики, а саму игру, по сути, разрабатывать и не начали. Набрали неопытных разработчиков, которые только прошли какие-то курсы и не работали на больших проектах, предложили за не очень большое вознаграждение создать суперкрутой проект, который показали на всех мировых выставках игр. Игра еще до того, как вышла, аккумулировала огромное количество денег, плюс еще что-то сделала на продажах. Они себе даже едва ли не сотрудничество с Nvidia выбили.

То есть как бизнесмены, безусловно, хорошо поработали, и неплохо заработали. Но просто забыли о том, что нужно сделать игру. У них не было налаженного процесса, коммуникации между отделами, квалифицированных сотрудников, плюс все это еще и было организовано на аутсорсе. Вдобавок был еще и маленький срок разработки. Но мало того, они еще и концепцию самой игры меняли несколько раз: изначально это была одиночная игра, потом она превратилась в кооперативную, а потом в онлайн-шутер типа Division. А Division, на секундочку, сделала Ubisoft, у которой огромное количество ресурсов, студий и опыта в плане разработки именно сетевых игр, которые требуют особого подхода. Как и любая современная игра на самом деле.

 

 

 

Автор: Иван Афанасьев

 

Следите за событиями в нашем новостном телеграм-канале
Читать дальше