Почему игры лагают? Это глобальный сговор? Или лень разрабов?

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

Почему игры лагают? Это глобальный сговор? Или лень разрабов?

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

Как строится кадр на видеокарте

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

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

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

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

После того как посчитали материалы, считается свет. Тут эти ваши люмены, отражения и прочая штукенция, которая много хавает GPU. Обычно чем больше источников света в кадре, тем тяжелее. И да, свет может убить всю производительность.

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

Почему игры лагают? Это глобальный сговор? Или лень разрабов?

Почему лагает из-за видеокарты?

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

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

А еще вся эта движуха взаимодействует друг с другом. Например, в игре используются виртуальные тени, но разраб забыл убрать их с мелкой травы перед игроком. Это значит, что они постоянно будут отрисовываться, и это ад. Потому что трава обычно в маске, там куча перекрытий. Значит Shadows Pass будет обрабатываться дольше, расчетов больше, нагрузка выше. И так в любом их Pass-ов.

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

Что делает процессор

Процессор обрабатывает игрока (нажатия клавиш и тп), двигает весь мир - позиции объектов, анимации, скрипты, ии. Если в сцене у вас например 5 объектов, это легко. А если 500, то уже тяжело. Это база.

Также проц считает физику - падения, столкновения, разрушения и тому подобные штуки. Чем больше физики, тем процессору тяжелее.

Искусственный интеллект, тобишь враги, тоже работают на процессоре. То как они принимают решения, строят путь, получают задачи и тд - все это работает ваш камень.

Также, что очень важно, процессор готовит кадр для видеокарты. Он решает какие объекты видны, сортирует их, создает драв колы и отправлет команды на видеокарту. И тут очень важная мысль. Если процессор не успевает - видеокарта просто ждёт в очереди.

Почему игры лагают? Это глобальный сговор? Или лень разрабов?

Почему может лагать из-за процессора

Тут важно понять, что видяха считает пиксели, а проц - логику. Если проц не успел подготовить кадр, видеокарте считать нечего, а если видеокарта ничего не посчитала, кадр не выводится и начинаются лаги.

Если разраб кинул кучу npc на карту, и при этом они у него одновременно (даже не в зоне видимости камеры игрока) ходят, прыгают, чето делают, то это ад. Анимации зашкаливают, команды для ии тоже. Поэтому важно оптимизировать этот момент, и тогда с камнем проблем не будет.

Разраб еще может нафигачить разрушаемости, но например вместо 50 частей бочки (которая рушится) сделать 500. Игрок сразу рушит 10 бочек, в итоге у него вместо 50 деталей - 5000. И все это просчитывается и получается пиковая нагрузка. А если еще и в одном кадре, то жопа.

Вывод

Ну а если серьезно, то игры лагают, потому что процессор и видеокарта делают разную работу, и если один из них не успевает, страдает FPS. Процессор думает за мир: считает позиции объектов, анимации, физику, ИИ и решает, что видеокарте нужно рисовать. Видеокарта рисует кадр: превращает модели в пиксели, добавляет свет, тени, отражения и постпроцесс.

Чем больше объектов, света, прозрачности и деталей - тем тяжелее нагрузка. Если CPU или GPU перегружены, кадры считаются медленно, и игра тормозит. Оптимизация нужна одновременно для логики и графики, иначе даже мощная видеокарта не спасёт от лагов. И да. Виноваты разрабы.

Моя экшен рпг игра - Island of Ash, которую делаю уже полтора года
Моя экшен рпг игра - Island of Ash, которую делаю уже полтора года

Добавляйте мою игру в вишлист в стиме, я думаю об оптимизации, по крайней мере пытаюсь, в меру знаний 😁

7
7
4
58 комментариев