Физический движок — это компьютерное программное обеспечение , которое обеспечивает приблизительное моделирование определенных физических систем , таких как динамика твердого тела (включая обнаружение столкновений ), динамика мягкого тела и динамика жидкости , используемых в областях компьютерной графики , видеоигр и фильмов ( CGI ). Их основное применение — в видеоиграх (обычно в качестве промежуточного программного обеспечения ), в этом случае моделирование происходит в реальном времени . Этот термин иногда используется в более общем смысле для описания любой программной системы для моделирования физических явлений, например, высокопроизводительного научного моделирования .
Обычно существует два класса физических движков : реального времени и высокой точности. Высокоточные физические движки требуют большей вычислительной мощности для расчета очень точной физики и обычно используются учеными и компьютерными анимационными фильмами. Физические движки реального времени — используемые в видеоиграх и других формах интерактивных вычислений — используют упрощенные вычисления и пониженную точность для вычислений вовремя, чтобы игра могла реагировать с соответствующей скоростью для игрового процесса. Физический движок — это по сути большой калькулятор, который выполняет математические вычисления, необходимые для моделирования физики. [1]
Один из первых компьютеров общего назначения, ENIAC , использовался как очень простой тип физического движка. Он использовался для разработки баллистических таблиц, чтобы помочь военным США оценить, куда приземлятся артиллерийские снаряды различной массы при выстреле под разными углами и пороховыми зарядами, а также с учетом дрейфа, вызванного ветром. Результаты вычислялись только один раз и были сведены в печатные таблицы, которые раздавались командирам артиллерии.
Физические движки широко использовались на суперкомпьютерах с 1980-х годов для выполнения моделирования вычислительной гидродинамики , где частицам назначаются векторы силы , которые объединяются для отображения циркуляции. Из-за требований скорости и высокой точности были разработаны специальные компьютерные процессоры, известные как векторные процессоры, для ускорения вычислений. Эти методы могут использоваться для моделирования погодных условий в прогнозировании погоды , данных аэродинамической трубы для проектирования воздушных и водных или моторных транспортных средств, включая гоночные автомобили, и теплового охлаждения компьютерных процессоров для улучшения теплоотводов . Как и во многих вычислительных процессах, нагруженных вычислениями, точность моделирования связана с разрешением моделирования и точностью вычислений; небольшие колебания, не смоделированные в моделировании, могут кардинально изменить прогнозируемые результаты.
Производители шин используют физическое моделирование для изучения того, как новые типы протекторов шин будут вести себя на мокрой и сухой дороге, используя новые материалы для шин различной гибкости и при разных уровнях весовой нагрузки.
В большинстве компьютерных игр скорость процессоров и геймплей важнее точности моделирования. Это приводит к разработке физических движков, которые выдают результаты в реальном времени, но которые воспроизводят физику реального мира только для простых случаев и, как правило, с некоторым приближением. Чаще всего моделирование направлено на обеспечение «перцептивно правильного» приближения, а не реального моделирования. Однако некоторые игровые движки, такие как Source , используют физику в головоломках или в боевых ситуациях. Это требует более точной физики, чтобы, например, импульс объекта мог опрокинуть препятствие или поднять тонущий объект.
Физически обоснованная анимация персонажей в прошлом использовала только динамику твердого тела , потому что она быстрее и проще для расчета, но современные игры и фильмы начинают использовать физику мягкого тела . Физика мягкого тела также используется для эффектов частиц, жидкостей и ткани. Некоторая форма ограниченной симуляции динамики жидкости иногда предоставляется для симуляции воды и других жидкостей, а также потока огня и взрывов в воздухе.
Объекты в играх взаимодействуют с игроком, окружающей средой и друг с другом. Обычно большинство 3D-объектов в играх представлены двумя отдельными сетками или формами. Одна из этих сеток — это очень сложная и подробная форма, видимая игроку в игре, например, ваза с элегантными изогнутыми и петлевыми ручками. Для ускорения вторая, упрощенная невидимая сетка используется для представления объекта физическому движку, чтобы физический движок рассматривал вазу как простой цилиндр. Таким образом, было бы невозможно вставить стержень или выстрелить снарядом через отверстия для ручек в вазе, поскольку модель физического движка основана на цилиндре и не знает о ручках. Упрощенная сетка, используемая для обработки физики, часто называется геометрией столкновения. Это может быть ограничивающий ящик , сфера или выпуклая оболочка . Движки, которые используют ограничивающие ящики или ограничивающие сферы в качестве окончательной формы для обнаружения столкновений, считаются чрезвычайно простыми. Обычно ограничивающая рамка используется для обнаружения столкновений в широкой фазе, чтобы сузить число возможных столкновений до того, как будет выполнено дорогостоящее обнаружение столкновений «сетка на сетке» в узкой фазе обнаружения столкновений.
Другой аспект точности в дискретном обнаружении столкновений касается частоты кадров или количества моментов времени в секунду, когда рассчитывается физика. Каждый кадр рассматривается как отдельный от всех других кадров, и пространство между кадрами не рассчитывается. Низкая частота кадров и небольшой быстро движущийся объект приводят к ситуации, когда объект не движется плавно в пространстве, а вместо этого, кажется, телепортируется из одной точки пространства в другую по мере расчета каждого кадра. Снаряды, движущиеся с достаточно высокой скоростью, будут промахиваться мимо цели, если цель достаточно мала, чтобы поместиться в зазор между рассчитанными кадрами быстро движущегося снаряда. Для преодоления этого недостатка используются различные методы, такие как представление снарядов в Second Life в виде стрел с невидимыми хвостами, длиннее, чем зазор в кадрах, чтобы столкнуться с любым объектом, который может поместиться между рассчитанными кадрами. Напротив, непрерывное обнаружение столкновений, такое как в Bullet или Havok, не страдает от этой проблемы.
Альтернативой использованию систем физики твердого тела на основе ограничивающего прямоугольника является использование системы на основе конечных элементов . В такой системе создается трехмерная объемная тесселяция трехмерного объекта. Тесселяция приводит к появлению ряда конечных элементов, которые представляют аспекты физических свойств объекта, такие как прочность, пластичность и сохранение объема. После построения конечные элементы используются решателем для моделирования напряжения внутри трехмерного объекта. Напряжение может использоваться для управления разрушением, деформацией и другими физическими эффектами с высокой степенью реализма и уникальности. По мере увеличения количества моделируемых элементов увеличивается способность движка моделировать физическое поведение. Визуальное представление трехмерного объекта изменяется системой конечных элементов с помощью использования шейдера деформации, запущенного на центральном или графическом процессоре. Системы на основе конечных элементов были непрактичны для использования в играх из-за накладных расходов на производительность и отсутствия инструментов для создания представлений конечных элементов из трехмерных художественных объектов. С появлением более производительных процессоров и инструментов для быстрого создания объемных тесселяций в играх начали использоваться системы конечных элементов в реальном времени, начиная с игры Star Wars: The Force Unleashed , в которой для эффектов деформации и разрушения дерева, стали, плоти и растений использовалась цифровая молекулярная материя с использованием алгоритма, разработанного доктором Джеймсом О'Брайеном в рамках его докторской диссертации. [2]
В реальном мире физика всегда активна. Существует постоянное дрожание броуновского движения для всех частиц в нашей вселенной, поскольку силы толкают друг друга вперед и назад. Для игрового физического движка такая постоянная активная точность является неоправданной тратой ограниченной мощности процессора, что может вызвать такие проблемы, как снижение частоты кадров . Таким образом, игры могут помещать объекты в «спящий» режим, отключая вычисление физики для объектов, которые не переместились на определенное расстояние в течение определенного периода времени. Например, в трехмерном виртуальном мире Second Life , если объект лежит на полу и не перемещается дальше минимального расстояния примерно за две секунды, то физические вычисления для объекта отключаются, и он застывает на месте. Объект остается замороженным до тех пор, пока обработка физики не будет повторно активирована для объекта после столкновения с каким-либо другим активным физическим объектом. [3]
Физические движки для видеоигр обычно имеют два основных компонента: систему обнаружения столкновений / реакции на столкновения и компонент динамического моделирования, отвечающий за решение сил, воздействующих на моделируемые объекты. Современные физические движки могут также содержать жидкостное моделирование , системы управления анимацией и инструменты интеграции активов . Существует три основных парадигмы для физического моделирования твердых тел: [4]
Наконец, возможны гибридные методы, сочетающие аспекты вышеперечисленных парадигм.
Основным ограничением реализма физического движка является приближенный результат разрешений ограничений и результат столкновения из-за медленной сходимости алгоритмов. Обнаружение столкновения, вычисленное на слишком низкой частоте, может привести к тому, что объекты будут проходить друг сквозь друга, а затем отталкиваться с аномальной силой коррекции. С другой стороны, приближенные результаты силы реакции обусловлены медленной сходимостью типичного решателя Projected Gauss Seidel, что приводит к аномальному отскоку. Любой тип свободно движущегося составного физического объекта может продемонстрировать эту проблему, но она особенно подвержена влиянию на звенья цепи под высоким натяжением и колесные объекты с активными физическими несущими поверхностями. Более высокая точность уменьшает позиционные/силовые ошибки, но за счет необходимости большей мощности ЦП для вычислений.
Физический процессор (PPU) — это специализированный микропроцессор, предназначенный для обработки физических вычислений, особенно в физическом движке видеоигр . Примерами вычислений с участием PPU могут быть динамика твердого тела , динамика мягкого тела , обнаружение столкновений , динамика жидкости , моделирование волос и одежды, конечно-элементный анализ и разрушение объектов. Идея заключается в том, что специализированные процессоры разгружают трудоемкие задачи с центрального процессора компьютера, во многом подобно тому, как графический процессор выполняет графические операции вместо основного центрального процессора. Термин был придуман маркетингом Ageia для описания их чипа PhysX потребителям. Несколько других технологий в спектре CPU-GPU имеют некоторые общие черты с ним, хотя решение Ageia было единственным полным, разработанным, продаваемым, поддерживаемым и помещенным в систему исключительно как PPU.
Аппаратное ускорение для обработки физики теперь обычно обеспечивается графическими процессорами, которые поддерживают более общие вычисления, концепция, известная как универсальные вычисления на графических процессорах (GPGPU). AMD и NVIDIA обеспечивают поддержку вычислений динамики твердого тела на своих последних графических картах.
Серия GeForce 8 от NVIDIA поддерживает технологию ускорения ньютоновской физики на базе GPU, называемую Quantum Effects Technology . NVIDIA предоставляет набор инструментов SDK для технологии CUDA ( Compute Unified Device Architecture ), которая предлагает как низкоуровневый, так и высокоуровневый API для GPU. [5] Для своих GPU AMD предлагает аналогичный SDK, называемый Close to Metal (CTM), который обеспечивает тонкий аппаратный интерфейс.
PhysX — пример физического движка, который может использовать аппаратное ускорение на базе GPGPU, если оно доступно.