Как 3D-игры настолько эффективны?

что-то я никогда не понимал. Как может большая большая компьютерная игра, такая как GTA IV, использовать 50% моего процессора и работать на 60fps, в то время как DX-демо вращающегося чайника @ 60fps использует колоссальные 30% ?

17 ответов


В общем, это потому, что

  1. игры являются оптимальными о том, что им нужно сделать, и
  2. они используют особое преимущество вашего оборудования.

например, одна простая оптимизация, которую вы можете сделать, на самом деле не пытается рисовать вещи, которые нельзя увидеть. Рассмотрим сложную сцену, такую как городской пейзаж из Grand Theft Auto IV. Визуализатор фактически не отображает все здания и сооружения. Вместо, это рендеринг только того, что может видеть камера. Если бы вы могли подлететь к задней части тех же зданий, повернувшись лицом к оригинальной камере, вы бы увидели наполовину построенную пустотелую оболочку. Каждая точка, которую камера не может видеть, не отображается-так как вы не можете видеть ее, нет необходимости пытаться показать ее вам.

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

другая часть вашего вопроса-почему демо использует так много CPU:

... в то время как демонстрация DX вращающегося чайника @ 60fps использует колоссальные 30% ?

это распространено для демонстраций графических API (например,dxdemo), чтобы вернуться к тому, что называется программное обеспечение визуализации когда ваше оборудование не поддерживает все функции, необходимые для показа красивого примера. Эти функции могут включать такие вещи, как тени, отражение, трассировка лучей, физика и так далее.

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


терпение, техническое мастерство и выносливость.

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

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

  1. ваш код строится вокруг двух вещей - ваших данных и вашего целевого оборудования.
  2. самый быстрый код код, который никогда не выполняется-сортируйте данные в пакеты и выполняйте только дорогостоящие операции с данными, которые вам нужны
  3. как вы храните ваши данные ключ-цель для непрерывного доступа это позволяет пакетный процесс на высокой скорости.
  4. Parellise все, что вы, возможно, может
  5. современные процессоры быстрые, современная ОЗУ очень медленная. Промахи кэша смертельны.
  6. нажмите столько, сколько на GPU, как вы можете - Он имеет быструю локальную память, так что может полыхать через данные, но вы должны помочь ему, правильно организовав свои данные.
  7. избегайте делать много переключателей renderstate (снова пакетные аналогичные данные вершин вместе ), так как это заставляет GPU останавливаться
  8. Swizzle ваши текстуры и убедитесь, что они полномочия двух - это улучшает производительность кэша текстуры на GPU.
  9. используйте уровни детализации как можно больше -- низкие/средние / высокие версии 3D-моделей и переключатель на основе расстояния от проигрывателя камеры - нет точки рендеринга с высоким разрешением версию, если это только 5 пикселей на экране.

3D-игры отлично обманывают ваши глаза. Например, существует метод, называемый экранированием окружающего пространства (SSAO), который даст более реалистичное ощущение, затеняя те части сцены, которые близки к разрывам поверхности. Если вы посмотрите на углы вашей стены, вы увидите, что они кажутся немного темнее, чем центры в большинстве случаев.

тот же самый эффект может быть достигнут с помощью radiosity, который основан на довольно точном моделировании. Я также примите во внимание больше влияний отскакивая Светов, etc. но это вычислительно дорого - это метод трассировки лучей.

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

эти 'оптимизации' являются огромный - вы можете эффективно реализовать алгоритм и заставить его работать в 10 раз быстрее, но выбор интеллектуального алгоритма, который дает аналогичный результат ("обман"), может заставить вас перейти от O(N^4) к O(log(N)).

оптимизация фактической реализации-это то, что делает игры еще более эффективными, но это только линейная оптимизация.


Eeeeek!

Я знаю, что этот вопрос старый, но интересно, что никто не упомянул свыше!!!???

вы сравнили использование процессора игры на 60fps с использованием процессора демо-версии чайника на 60fps.

разве не очевидно, что оба работают (более или менее) ровно на 60fps? Это приводит к ответу...

оба приложения работают с включенным vsync! Это означает (dumbed-down), что частота кадров рендеринга заблокирована на "вертикальный пустой интервал" вашего монитор. Графическое оборудование (и / или драйвер)будет отображаться только на макс. 60фпс. 60 кадров в секунду = 60 Гц (Гц=в секунду) частота обновления. Поэтому вы, вероятно, используете довольно старый, мерцающий ЭЛТ или общий ЖК-дисплей. На ЭЛТ, работающей на 100Hz, вы, вероятно, увидите частоты кадров до 100Hz. VSync также применяется аналогичным образом к ЖК-дисплеям (они обычно имеют частоту обновления 60 Гц).

Итак, демо-версия чайника может работать намного эффективнее! Если он использует 30% времени процессора (по сравнению с 50% времени процессора для GTA IV), то он, вероятно, использует меньше времени процессора каждый кадр и просто ждет дольше следующего вертикального пустого интервала. Чтобы сравнить оба приложения, вы должны отключить vsync и снова измерить (вы будете измерять гораздо более высокий fps для обоих приложений).

иногда его ОК, чтобы отключить vsync (в большинстве игр есть опция в его настройках). Иногда вы увидите "разрывающие артефакты", когда Vsync отключен.

вы можете найти подробную информацию о нем и почему он используется в Википедии: http://en.wikipedia.org/wiki/Vsync


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

  • GTA4 $400 миллионов долларов в первую неделю
  • и CryTech написал чрезвычайно впечатляющую графическую демонстрацию, чтобы позволить nVidia "показать" на выставке. Полученные впечатления заставили их поднять ногу, чтобы создать то, что станет фарсом.
  • клапана 2005 выручка и операционная прибыль были заявлены как 70 и 55 миллионов долларов США соответственно.

возможно, лучшим примером (безусловно, одним из самых известных) является программное обеспечение Id. Они поняли это очень рано, в дни Командир Кин (задолго до 3D), что придумывает умный способ достичь чего-то1, даже если он полагался на современное оборудование (в этом случае графическая карта EGA!) который графически превосходил конкурентов что это выделит твою игру. Это было правдой, но они также поняли, что вместо того, чтобы придумывать новые игры и контент, они могут лицензировать технологию, получая таким образом доход от других, в то же время имея возможность развивать следующее поколение двигателя и, таким образом, перепрыгнуть через конкуренцию снова.

способности этих программистов (в сочетании с деловой смекалкой) - это то, что сделало их богатыми.

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

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

  • меньше время
  • меньше ресурсов
  • меньше награда стимул
  • меньше внутренней и внешней конкуренции
  • меньшее целей
  • меньше таланта

последнее может показаться резким2

меньшие цели один скорее всего, это главная причина. Цель чайничек демо-всего лишь демо. Но не демо программистов навык3. Это будет демонстрация одной небольшой грани (большой) ОС, в данном случае рендеринга DX.

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


  1. в этом случае плавная прокрутка на оборудовании ПК
  2. вероятно, больше, чем я, поэтому мы ясно об этом
  3. строго говоря, это было бы демонстрацией для его / ее менеджера, но снова диск здесь будет временем и / или визуальным качеством.


по нескольким причинам

  • 3D игровые движки высоко оптимизированы
  • большая часть работы выполняется вашим графическим адаптером
  • 50% Hm, позвольте мне догадаться, что у вас есть двойное ядро и используется только одно ядро; -)

EDIT: чтобы дать несколько чисел

2.8 Ghz Athlon-64 с NV-6800 GPU. Результаты:

  • процессор: 72.78 Mflops
  • GPU: 2440.32 Mflops

иногда сцена может быть больше, чем кажется. Например, вращающийся чайник с тысячами вершин, отображением среды, отображением рельефа и другими сложными пиксельными шейдерами, которые отображаются одновременно, составляет много обработки. Много раз эти демо-версии чайника просто предназначены для демонстрации какого-то специального эффекта. Они также не всегда могут наилучшим образом использовать GPU, когда абсолютная производительность не является целью.

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


  1. управление сценой. KD-деревьев, выбраковка frustrum, плат, heirarchical рамки, частичной видимостью наборов.
  2. Лод. Переключение более низких версий деталей для замены удаленных объектов.
  3. самозванцы. Как Лод, но даже не объект, а просто картина или "рекламный щит".
  4. SIMD.
  5. управление пользовательской памятью. Выровненная память, меньше фрагментации.
  6. пользовательские структуры данных (т. е. нет STL, относительно минимальный templating).
  7. сборка в местах, в основном для SIMD.

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

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

Sleep(0);

сразу после возвращения из функция рендеринга и сравнение.


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


ядром любого ответа должно быть это -- преобразования, которые выполняют 3D-движки, в основном указываются в дополнениях и умножениях (линейная алгебра) (без ветвей или прыжков), операции рисования одного кадра часто указываются таким образом, что несколько таких заданий add-mul могут выполняться параллельно. Ядра GPU очень хорошо добавляют add-mul, и у них есть десятки или сотни ядер add-mull.

CPU остается делать простые вещи - как AI и другие игры логика.


Как может большая большая компьютерная игра, такая как GTA IV, использовать 50% моего процессора и работать на 60fps, в то время как DX-демо вращающегося чайника @ 60fps использует колоссальные 30% ?

в то время как GTA, скорее всего, будет более эффективным, чем DX demo, измерение эффективности процессора таким образом существенно нарушено. Эффективность может быть определена, например, сколько работы вы делаете в данный момент времени. Простой контрпример: создайте один поток на логический процессор и позвольте простому бесконечному циклу работать на нем. Вы получите CPU использование 100 %, но это не эффективно, так как никакой полезной работы.

Это также приводит к ответу: как игра может быть эффективной? При программировании "great big games" огромные усилия направлены на оптимизацию игры во всех аспектах (что в настоящее время обычно включает в себя многоядерную оптимизацию). Что касается демо DX, его точка не работает быстро, а скорее демонстрирует концепции.


Я думаю, вы должны взглянуть на использование GPU вместо CPU... Бьюсь об заклад, графическая карта намного загруженнее в GTA IV, чем в образце чайника (он должен быть практически простаивает).

может быть, вы могли бы использовать что-то вроде этого монитора, чтобы проверить, что:

http://downloads.guru3d.com/Rivatuner-GPU-Monitor-Vista-Sidebar-Gadget-download-2185.html

также частота кадров-это то, что нужно учитывать, возможно, образец чайника работает на полной скорости (возможно, 1000fps), и большинство игр ограничены частотой обновления монитора (около 60fps).


посмотрите на ответ на vsync; вот почему они работают с одинаковой частотой кадров.

во-вторых, CPU пропускает лидерство в игре. Упрощенное объяснение состоит в том, что основной игровой цикл-это просто бесконечный цикл:

while(1) { 
  update();
  render();
}

даже если ваша игра (или в этом случае чайник) не делает много, вы все еще едите CPU в своем цикле.

50% cpu в GTA "более продуктивен", чем 30% в демо, так как, скорее всего, он вообще не делает многого; но GTA обновляет тонны деталей. Даже добавление "сна (10)" в демо, вероятно, снизит его процессор на тонну.

наконец, посмотрите на использование GPU. Демо, вероятно, занимает

короче говоря, ваши критерии и измерения не являются точными.


демонстрация чайника DX не использует 30% процессора, выполняющего полезную работу. Он занят-ждет, потому что ему больше нечего делать.


из того, что я знаю о нереальной серии, некоторые соглашения нарушаются, как инкапсуляция. Код компилируется в байт-код или непосредственно в машинный код в зависимости от игры. Кроме того, объекты визуализируются и упаковываются в виде сеток, а такие вещи, как текстуры, освещение и тени, предварительно вычисляются, тогда как чистая 3D-анимация требует этого в реальном времени. Когда игра фактически работает, есть также некоторые оптимизации, такие как только рендеринг только видимых частей объект и отображение деталей текстуры только при закрытии. Наконец, вероятно, что видеоигры разработаны, чтобы получить лучшее из платформы в данный момент времени (например: Intelx86 MMX/SSE, DirectX,...).


Я думаю, что здесь отсутствует важная часть ответа. Большинство ответов говорят вам "знать свои данные". Дело в том, что вы должны точно так же и с одинаковой степенью важности знать свое:--1-->

  • CPU (часы и кэши)
  • память (частота, задержки)
  • жесткий диск (с точки зрения скорости и времени поиска)
  • GPU (#ядра, часы и их память / кэши)
  • интерфейсы: контроллеры Sata, версии PCI, так далее.

но, кроме того, с текущими современными компьютерами вы никогда не сможете проигрывать реальное видео 1080p в >>30ftp (одно изображение 1080p в 64 битах займет 15 000 Ko/14.9 MB). Причина этого заключается в точности выборки. Видеоигра никогда не будет использовать двойную точность (64 бит) для пикселей, изображений, данных и т. д..., но вместо этого используйте более низкую пользовательскую точность (~4-8 бит), а иногда и меньшую точность, масштабируемую интерполяцией методы, позволяющие разумное время вычислений.

есть и другие методы, такие как обрезка данных (как со стандартом OpenGL, так и с программной реализацией), сжатие данных и т. д. Имейте также в виду, что текущие графические процессоры могут быть >300 раз быстрее, чем текущие процессоры с точки зрения аппаратных возможностей. Однако хороший программист может получить коэффициент 10-20x, если ваша проблема полностью оптимизирована и полностью распараллеливается (особенно задача распараллеливается).

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

Итак, чтобы вернуться к чайнику, вы должны увидеть, как представлена геометрия, выборка и с какой точностью Vs см. В GTA 5, с точки зрения геометрии/текстур и, самое главное, деталей (точность, выборка и т. д.)