Как 3D игры так эффективны?

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

188
задан Damjan Pavlica 8 November 2016 в 04:23
поделиться

10 ответов

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

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

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

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

Другая часть вашего вопроса заключается в том, почему демонстрация использует так много ЦП:

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

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

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

69
ответ дан 23 November 2019 в 05:43
поделиться

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

ЦП остается делать простые вещи - например, ИИ и другую игровую логику.

1
ответ дан 23 November 2019 в 05:43
поделиться

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

3
ответ дан 23 November 2019 в 05:43
поделиться
  1. Управление сценами. kd-деревья, отсечение усеченной пирамиды, bsps, иерархические ограничивающие прямоугольники, наборы частичной видимости.
  2. LOD. Отключение версий с более низкой детализацией для замены удаленных объектов.
  3. Самозванцы. Как LOD, но даже не объект, а просто картинка или «рекламный щит».
  4. SIMD.
  5. Пользовательское управление памятью. Выровненная память, меньше фрагментации.
  6. Пользовательские структуры данных (например, без STL, относительно минимальное создание шаблонов).
  7. Сборка местами, в основном для SIMD.
4
ответ дан 23 November 2019 в 05:43
поделиться

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

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

8
ответ дан 23 November 2019 в 05:43
поделиться

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

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

РЕДАКТИРОВАТЬ: Чтобы дать несколько цифр

2,8 ГГц Athlon-64 с графическим процессором NV-6800. Результаты следующие:

  • CPU: 72,78 Mflops
  • GPU: 2440,32 Mflops
17
ответ дан 23 November 2019 в 05:43
поделиться

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

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

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

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

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

39
ответ дан 23 November 2019 в 05:43
поделиться

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

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

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

  1. Ваш код построен вокруг двух вещей - ваших данных и вашего целевого оборудования.
  2. Самый быстрый код - это код, который никогда не выполняется - сортируйте данные в пакеты и выполняйте только дорогостоящие операции с данными, которые вам нужны.
  3. Способ хранения данных является ключевым - стремитесь к непрерывному доступу, это позволяет вам выполнять пакетную обработку на большой скорости.
  4. Упакуйте все, что только возможно.
  5. Современные процессоры быстрые, а современная оперативная память очень медленная. Промахи кеша смертельны.
  6. Нажимайте на графический процессор как можно больше - он имеет быструю локальную память, поэтому может пролистывать данные, но вам нужно помочь ему, правильно организовав данные.
  7. Избегайте большого количества переключений состояния рендеринга (опять же, пакетирование схожих данных вершин вместе), так как это заставляет GPU останавливать
  8. Swizzle ваших текстур и гарантировать, что они являются степенями двойки - это улучшает производительность кэша текстур на GPU.
  9. Используйте как можно больше уровней детализации - низкие / средние / высокие версии 3D-моделей и переключение в зависимости от расстояния от камеры плеера - нет смысла рендерить версию с высоким разрешением, если на экране всего 5 пикселей.
95
ответ дан 23 November 2019 в 05:43
поделиться

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

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

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

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

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

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

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

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

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


  1. в этом случае плавная прокрутка на аппаратном обеспечении ПК
  2. Скорее всего, больше, чем у меня, так что мы ясно об этом
  3. строго говоря, это была бы демонстрация и для его / ее менеджера, но опять же привод здесь был бы время и / или визуальное качество.
25
ответ дан 23 November 2019 в 05:43
поделиться

Eeeeek!

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

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

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

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

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

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

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

31
ответ дан 23 November 2019 в 05:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: