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

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

+178
07 февр. '10 в 17:19
источник поделиться
17 ответов

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

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

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

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

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

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

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

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

+63
07 февр. '10 в 17:22
источник

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

Первое, что DX Demo - это прежде всего учебное пособие, поэтому для ясности, а не для скорости исполнения.

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

  • Ваш код разработан вокруг двух вещей - ваших данных и вашего целевого оборудования.
  • Самый быстрый код - это код, который никогда не запускается - сортируйте свои данные в партии и делайте только дорогостоящие операции с данными, которые вам нужны для
  • То, как вы храните свои данные, является ключевым - для непрерывного доступа это позволяет вам выполнять пакетный процесс на высокой скорости.
  • Устранить все, что возможно.
  • Современные процессоры бывают быстрыми, современная оперативная память очень медленная. Промахи кэша смертельны.
  • Нажимайте столько же на GPU, сколько сможете - у него есть быстрая локальная память, поэтому вы можете прорисовывать данные, но вам нужно помочь, организовав ваши данные правильно.
  • Избегайте делать много переключателей renderstate (снова вместе с подобными данными вершин вместе), поскольку это приводит к остановке графического процессора.
  • Подскажите свои текстуры и убедитесь, что они имеют две возможности - это улучшает производительность кеша текстур на графическом процессоре.
  • Используйте уровни детализации в максимально возможной степени - низкие/средние/высокие версии 3D-моделей и переключатели на основе расстояния от проигрывателя камеры - отсутствие точки рендеринга версии с высоким разрешением, если она имеет только 5 пикселей на экране.
+93
07 февр. '10 в 17:42
источник

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

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

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

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

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

+40
07 февр. '10 в 17:50
источник

Eeeeek!

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

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

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

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

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

Иногда его нормально отключать vsync (большинство игр имеют опцию в своих настройках). Иногда vsync отключается.

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

+30
11 июл. '10 в 21:24
источник

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

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

Возможности этих программистов (в сочетании с деловыми соображениями) - вот что сделало их богатыми.

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

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

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

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

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

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


  • в этом случае плавная прокрутка на аппаратном обеспечении ПК
  • Скорее всего, чем я, поэтому мы ясно знаем, что
  • строго говоря, это была бы демонстрация для его/ее менеджера тоже, но опять же диск здесь был бы временем и/или визуальным качеством.
+24
09 февр. '10 в 1:06
источник

Из-за нескольких причин

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

РЕДАКТИРОВАТЬ: дать несколько чисел

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

  • CPU: 72.78 Mflops
  • GPU: 2440.32 Mflops
+17
07 февр. '10 в 17:26
источник

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

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

+8
07 февр. '10 в 17:39
источник
  • Управление сценой. kd-деревья, отбраковка, bsps, иерархические ограничивающие прямоугольники, частичные наборы видимости.
  • LOD. Выключение более подробных версий для замены для отдаленных объектов.
  • Самозванцы. Как LOD, но даже не объект просто изображение или "рекламный щит".
  • SIMD.
  • Пользовательское управление памятью. Выровненная память, меньше фрагментации.
  • Пользовательские структуры данных (т.е. нет STL, относительно минимальные шаблоны).
  • Сборка в местах, в основном для SIMD.
+4
07 февр. '10 в 19:37
источник

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

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

Sleep(0);

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

+4
23 дек. '10 в 10:51
источник

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

+3
07 февр. '10 в 17:41
источник

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

+1
24 нояб. '15 в 19:04
источник

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

Процессор остается с простыми вещами - например, AI и другой логикой игры.

+1
07 февр. '10 в 17:31
источник

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

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

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

+1
14 дек. '10 в 10:50
источник

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

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

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

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

+1
14 дек. '10 в 11:02
источник

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

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

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

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

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

Наконец, посмотрите на использование GPU. Демонстрация, вероятно, занимает 1% на современной видеокарте, в то время как GTA, вероятно, будет принимать большинство во время игры.

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

+1
27 апр. '11 в 1:04
источник

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

  • CPU (часы и кеши)
  • Память (частота и время ожидания)
  • Жесткий диск (с точки зрения скорости и времени поиска)
  • GPU (#cores, часы и его память/кеши)
  • Интерфейсы: SATA-контроллеры, PCI-версии и т.д.

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

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

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

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

0
12 июн. '12 в 17:23
источник

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

0
22 сент. '10 в 23:52
источник

Посмотрите другие вопросы по меткам или Задайте вопрос