Почему игры лагают? Это глобальный сговор? Или лень разрабов?
Полтора года назад я начал делать игры на анриле пятом и подробней погрузился в этот вопрос. Теперь попробую рассказать почему многие игры лагают простым языком.
Давайте пойдем по порядку. Так почему все же игры лагают? Причин может быть множество, но самые частые это упор в видеокарту или в процессор, разберем подробней. Постараюсь простыми словами.
Как строится кадр на видеокарте
Изначально видеокарта получает вершины, какие точки надо соединять в треугольники. Ведь любая модель это куча трисов. Далее каждая точка переносится в мир, к ней применяется трансформ. Если на данном этапе моделей очень много, то нагрузка растет.
На следующем этапе трианглы превращаются в пиксели экрана. На данном этапе чем больше объектов, разрешение и мелких деталей, тем дольше занимает эта операция.
Потом видеокарта проводит проверку глубины, что-то вроде "этот пиксель виден или его перекрывает другой объект?". Невидимые пиксели отбрасываются. Если объектов много друг перед другом, нагрузка также растет.
Следующим этапом считается шейдер , для каждого пикселя идет просчет нормалей, шероховатостей, цвета, отражений и тд. Тут есть затык, чем сложнее материал, то есть у него больше инструкций, тем дольше выполняется этот момент, это базовый проход Basepass.
После того как посчитали материалы, считается свет. Тут эти ваши люмены, отражения и прочая штукенция, которая много хавает GPU. Обычно чем больше источников света в кадре, тем тяжелее. И да, свет может убить всю производительность.
Дальше идет постобработка, в народе называют Postprocess. Это размытие движения, цветокор, сглаживание, фулл скрин эффекты. Если вы рендерите в 4к, это ад и миллионы пикселей.
Почему лагает из-за видеокарты?
Видяха не рисует модель, она считывает каждый пиксель экрана. Для каждого пикселя надо проверить глубину, посчитать материал, свет и тд. Если у вас 60 фпс, то это делается 60 раз в секунду.
А теперь представьте, что разраб натыкал в игру сложных материалов, не настроил нормальное отсечение и дистанцию видимости, забыл про лоды, или натыкал вообще нанитных объектов на листву, которая в маске. От этого и образуются лаги.
А еще вся эта движуха взаимодействует друг с другом. Например, в игре используются виртуальные тени, но разраб забыл убрать их с мелкой травы перед игроком. Это значит, что они постоянно будут отрисовываться, и это ад. Потому что трава обычно в маске, там куча перекрытий. Значит Shadows Pass будет обрабатываться дольше, расчетов больше, нагрузка выше. И так в любом их Pass-ов.
В общем если коротко, суть такова, что если много сложных материалов, неправильно размещены объекты, не настроены тени, свет и тд, то видяха захлебнется и вы получите те самые лаги. И да, скорее всего это не глобальный сговор, а лень разрабов или не знание базы.
Что делает процессор
Процессор обрабатывает игрока (нажатия клавиш и тп), двигает весь мир - позиции объектов, анимации, скрипты, ии. Если в сцене у вас например 5 объектов, это легко. А если 500, то уже тяжело. Это база.
Также проц считает физику - падения, столкновения, разрушения и тому подобные штуки. Чем больше физики, тем процессору тяжелее.
Искусственный интеллект, тобишь враги, тоже работают на процессоре. То как они принимают решения, строят путь, получают задачи и тд - все это работает ваш камень.
Также, что очень важно, процессор готовит кадр для видеокарты. Он решает какие объекты видны, сортирует их, создает драв колы и отправлет команды на видеокарту. И тут очень важная мысль. Если процессор не успевает - видеокарта просто ждёт в очереди.
Почему может лагать из-за процессора
Тут важно понять, что видяха считает пиксели, а проц - логику. Если проц не успел подготовить кадр, видеокарте считать нечего, а если видеокарта ничего не посчитала, кадр не выводится и начинаются лаги.
Если разраб кинул кучу npc на карту, и при этом они у него одновременно (даже не в зоне видимости камеры игрока) ходят, прыгают, чето делают, то это ад. Анимации зашкаливают, команды для ии тоже. Поэтому важно оптимизировать этот момент, и тогда с камнем проблем не будет.
Разраб еще может нафигачить разрушаемости, но например вместо 50 частей бочки (которая рушится) сделать 500. Игрок сразу рушит 10 бочек, в итоге у него вместо 50 деталей - 5000. И все это просчитывается и получается пиковая нагрузка. А если еще и в одном кадре, то жопа.
Вывод
Ну а если серьезно, то игры лагают, потому что процессор и видеокарта делают разную работу, и если один из них не успевает, страдает FPS. Процессор думает за мир: считает позиции объектов, анимации, физику, ИИ и решает, что видеокарте нужно рисовать. Видеокарта рисует кадр: превращает модели в пиксели, добавляет свет, тени, отражения и постпроцесс.
Чем больше объектов, света, прозрачности и деталей - тем тяжелее нагрузка. Если CPU или GPU перегружены, кадры считаются медленно, и игра тормозит. Оптимизация нужна одновременно для логики и графики, иначе даже мощная видеокарта не спасёт от лагов. И да. Виноваты разрабы.
Добавляйте мою игру в вишлист в стиме, я думаю об оптимизации, по крайней мере пытаюсь, в меру знаний 😁