Введение

Программное обеспечение для физических движков реального времени

PhysX — это SDK промежуточного программного обеспечения для физических движков реального времени с открытым исходным кодом, разработанный Nvidia в составе пакета программного обеспечения Nvidia GameWorks. Первоначально предполагалось, что видеоигры с поддержкой PhysX будут ускоряться с помощью PhysX PPU (плат расширения, разработанных Ageia). Однако после приобретения Ageia компанией Nvidia, специализированные карты PhysX были сняты с производства в пользу API, работающего на GPU GeForce с поддержкой CUDA. В обоих случаях аппаратное ускорение позволяло переносить вычисления физики с центрального процессора, освобождая его для выполнения других задач. PhysX и другие промежуточные физические движки широко используются в современных видеоиграх, поскольку они избавляют разработчиков игр от необходимости самостоятельно писать код для реализации классической механики (ньютоновской физики), например, для динамики мягких тел.

История

То, что сегодня известно как PhysX, возникло как движок физического моделирования под названием NovodeX. Движок был разработан швейцарской компанией NovodeX AG, выделенной из ETH Zurich. В 2004 году Ageia приобрела NovodeX AG и начала разрабатывать аппаратную технологию, способную ускорять физические вычисления, разгружая центральный процессор. Ageia назвала эту технологию PhysX, SDK был переименован из NovodeX в PhysX, а ускорители получили название PPU (Physics Processing Units). Первой видеоигрой, реализовавшей технологию PhysX, стала The Stalin Subway, выпущенная исключительно в российских игровых магазинах в сентябре 2005 года. В 2008 году компания Ageia была приобретена производителем графических технологий Nvidia. Nvidia начала обеспечивать аппаратное ускорение PhysX на своей линейке графических карт GeForce и в конечном итоге прекратила поддержку PPU Ageia. Запатентованный SDK был предоставлен разработчикам бесплатно для коммерческого и некоммерческого использования на платформах Windows, Linux, macOS, iOS и Android. 3 декабря 2018 года PhysX был переведен на открытый исходный код под лицензией BSD с тремя пунктами, однако это изменение коснулось только компьютерных и мобильных платформ. 8 ноября 2022 года версия с открытым исходным кодом была обновлена до PhysX 5 под той же лицензией BSD с тремя пунктами.

Особенности

Двигатель PhysX и SDK доступны для Microsoft Windows, macOS, Linux, PlayStation 4, Xbox 360, Xbox One, Wii, iOS и Android. BFG Technologies, Dell и ELSA Technology. Начиная с версии 2.8.3 SDK PhysX, поддержка карт PPU была прекращена, и производство карт PPU больше не ведется. Последняя версия автономной карты PhysX PPU, разработанная Ageia, обеспечивала производительность PhysX, сопоставимую с выделенной видеокартой 9800GTX.

ГПУ

После приобретения Ageia компанией Nvidia, разработка PhysX отошла от расширительных карт PPU и сосредоточилась на возможностях GPGPU современных графических процессоров. Современные графические процессоры очень эффективны в обработке и отображении компьютерной графики, а их высокопараллельная структура делает их более эффективными, чем центральные процессоры общего назначения, для ускорения физических симуляций с использованием PhysX. Любая графическая карта GeForce, поддерживающая CUDA (GPU серии 8 или более поздней, с минимум 32 ядрами и минимум 256 МБ выделенной видеопамяти), может использовать преимущества PhysX без необходимости установки отдельной карты PhysX.

АПЕКС

Технология Nvidia APEX — это масштабируемая многоплатформенная динамическая система, разработанная на основе PhysX SDK. Она впервые была представлена в игре Mafia II в августе 2010 года. APEX от Nvidia включает следующие модули: APEX Destruction, APEX Clothing, APEX Particles, APEX Turbulence, APEX ForceField и ранее APEX Vegetation, разработка которого была приостановлена в 2011 году. Начиная с версии 1.4.1, APEX SDK считается устаревшей.

Nvidia FleX

FleX — это технология моделирования на основе частиц, предназначенная для создания визуальных эффектов в реальном времени. Традиционно визуальные эффекты создаются путем комбинирования элементов, полученных с помощью специализированных решателей для твердых тел, жидкостей, ткани и т.п. Поскольку FleX использует единое представление объектов в виде частиц для всех типов, он позволяет создавать новые эффекты, в которых различные симулируемые вещества могут взаимодействовать друг с другом плавно и естественно. Подобные унифицированные физические решатели широко используются в офлайн-компьютерной графике, например, nCloth в Autodesk Maya и Lagoa в Softimage. Цель FleX — использовать вычислительную мощность графических процессоров, чтобы обеспечить возможности этих офлайн-приложений в компьютерной графике реального времени.

Критика от реальных технологий

5 июля 2010 года Real World Technologies опубликовала анализ архитектуры PhysX. Согласно этому анализу, большая часть кода, используемого в приложениях PhysX в то время, была основана на инструкциях x87 без какой-либо оптимизации для многопоточности. Это могло приводить к значительному снижению производительности при выполнении кода PhysX на центральном процессоре. В статье предполагалось, что переработка PhysX с использованием инструкций SSE может существенно уменьшить разницу в производительности между CPU PhysX и GPU PhysX. В ответ на анализ Real World Technologies, Майк Сколонес, менеджер по продукту PhysX, заявил, что от поддержки SSE отказались, поскольку большинство игр сначала разрабатываются для консолей, а затем портируются на ПК. В результате современные компьютеры запускают эти игры быстрее и лучше, чем консоли, даже при минимальной или отсутствующей оптимизации. Старший менеджер по связям с общественностью Nvidia, Брайан Дель Риццо, пояснил, что многопоточность уже была доступна в CPU PhysX 2.x, и её использование зависело от разработчика. Он также сообщил, что автоматическая многопоточность и SSE будут внедрены в версии 3 PhysX SDK. PhysX SDK 3.0 был выпущен в мае 2011 года и представлял собой значительную переработку SDK, включающую улучшения, такие как более эффективная многопоточность и единая кодовая база для всех поддерживаемых платформ: Panda3D, Diesel, Torque, HeroEngine и BigWorld.