PhysX — это пакет SDK промежуточного программного обеспечения физического движка реального времени с открытым исходным кодом [1] , разработанный Nvidia как часть программного пакета Nvidia GameWorks .
Изначально видеоигры, поддерживающие PhysX, должны были ускоряться с помощью PhysX PPU ( карты расширения, разработанные Ageia ). Однако после приобретения Ageia компанией Nvidia выпуск выделенных карт PhysX был прекращен в пользу использования API на графических процессорах GeForce с поддержкой CUDA . В обоих случаях аппаратное ускорение позволило разгрузить физические вычисления с ЦП , позволив ему вместо этого выполнять другие задачи.
PhysX и другие физические движки промежуточного программного обеспечения используются сегодня во многих видеоиграх, поскольку они освобождают разработчиков игр от необходимости писать собственный код, реализующий классическую механику (физику Ньютона) для реализации, например, динамики мягких тел . [2]
То, что сегодня известно как PhysX, возникло как движок физического моделирования под названием NovodeX. Двигатель был разработан швейцарской компанией NovodeX AG, дочерней компанией ETH Zurich . [3] В 2004 году Ageia приобрела NovodeX AG и начала разработку аппаратной технологии, которая могла бы ускорить физические вычисления, помогая процессору. Ageia назвала технологию PhysX, SDK был переименован с NovodeX в PhysX, а карты-ускорители получили название PPU (Physics Processing Units). [4]
В своей реализации первой видеоигрой, использующей технологию PhysX, является « Сталинское метро» , выпущенное в российских игровых магазинах в сентябре 2005 года. [5]
В 2008 году Ageia была приобретена производителем графических технологий Nvidia. [6] Nvidia начала включать аппаратное ускорение PhysX в своей линейке видеокарт GeForce [7] и в конечном итоге отказалась от поддержки процессоров Ageia PPU. [8]
PhysX SDK 3.0 был выпущен в мае 2011 года и представлял собой значительную переработку SDK, вносящую такие улучшения, как более эффективная многопоточность и унифицированная база кода для всех поддерживаемых платформ. [2]
На GDC 2015 Nvidia сделала исходный код PhysX доступным на GitHub , но потребовала регистрации на сайте Developer.nvidia.com. [9] Проприетарный SDK предоставлялся разработчикам бесплатно как для коммерческого, так и для некоммерческого использования на платформах Windows , Linux , macOS , iOS и Android . [10]
3 декабря 2018 года PhysX стал открытым исходным кодом под лицензией BSD из 3 пунктов , но это изменение распространялось только на компьютерные и мобильные платформы. [11]
8 ноября 2022 года версия с открытым исходным кодом была обновлена до PhysX 5 под той же лицензией BSD из трех пунктов . [12]
Движок PhysX и SDK доступны для Microsoft Windows, macOS, Linux, [11] PlayStation 3 , [13] [14] PlayStation 4 , [15] Xbox 360 , [16] Xbox One , [17] Wii , [18] iOS и Андроид. [11]
PhysX — это SDK для многопоточного моделирования физики. Он поддерживает динамику твердого тела , динамику мягкого тела (например, моделирование ткани , включая рвущуюся и находящуюся под давлением ткань), тряпичные куклы и контроллеры персонажей, динамику транспортных средств , моделирование частиц и объемной жидкости .
Физический процессор (PPU) — это процессор, специально разработанный для облегчения вычислительной нагрузки на ЦП, особенно вычислений, связанных с физикой. PPU PhysX предлагались потребителям в виде карт PCI или PCIe компаниями ASUS , [19] BFG Technologies , [20] [21] Dell [22] и ELSA Technology . [23]
Начиная с версии 2.8.3 PhysX SDK, поддержка карт PPU была прекращена, и карты PPU больше не производятся. [8] Последняя версия автономной карты PhysX PPU, разработанная Ageia, имела примерно ту же производительность PhysX, что и выделенная 9800GTX . [24]
После приобретения Nvidia компании Ageia разработчики PhysX отказались от карт расширения PPU и вместо этого сосредоточились на возможностях GPGPU современных графических процессоров.
Современные графические процессоры очень эффективны при манипулировании и отображении компьютерной графики, а их высокопараллельная структура делает их более эффективными, чем центральные процессоры общего назначения, для ускорения физического моделирования с использованием PhysX.
Любая видеокарта GeForce с поддержкой CUDA (GPU 8-й серии или новее с минимум 32 ядрами и минимум 256 МБ выделенной графической памяти [25] ) может использовать преимущества PhysX без необходимости установки выделенной карты PhysX.
Технология Nvidia APEX — это многоплатформенная масштабируемая динамическая среда, построенная на основе PhysX SDK. Впервые он был представлен в Mafia II в августе 2010 года. [26] APEX от Nvidia включает в себя следующие модули: APEX Destruction, APEX Clothing, APEX Particles, APEX Turbulence, APEX ForceField и ранее APEX Vegetation, работа которого была приостановлена в 2011 году. [27] [28 ] ]
Начиная с версии 1.4.1 APEX SDK устарел. [29]
FleX — это метод моделирования на основе частиц для создания визуальных эффектов в реальном времени . Традиционно визуальные эффекты создаются с использованием комбинации элементов, созданных с помощью специализированных решателей для твердых тел , жидкостей, одежды и т. д. Поскольку FleX использует единое представление частиц для всех типов объектов, он позволяет создавать новые эффекты, в которых различные моделируемые вещества могут взаимодействовать друг с другом. без проблем. Такие унифицированные решатели физики являются основным продуктом в мире автономной компьютерной графики , где широко используются такие инструменты, как nCloth от Autodesk Maya и Lagoa от Softimage . Цель FleX — использовать мощь графических процессоров для реализации возможностей этих автономных приложений в компьютерной графике в реальном времени. [30]
5 июля 2010 года Real World Technologies опубликовала анализ [31] архитектуры PhysX. Согласно этому анализу, большая часть кода, используемого в то время в приложениях PhysX, была основана на инструкциях x87 без какой-либо многопоточной оптимизации . Это может привести к значительному падению производительности при выполнении кода PhysX на процессоре. В статье предполагается, что перезапись PhysX с использованием инструкций SSE может существенно уменьшить разницу в производительности между CPU PhysX и GPU PhysX.
В ответ на анализ Real World Technologies Майк Сколонс, менеджер по продуктам PhysX, сказал [32] , что поддержка SSE осталась позади, поскольку большинство игр сначала разрабатываются для консолей , а затем портируются на ПК. В результате современные компьютеры запускают эти игры быстрее и лучше, чем консоли, даже с минимальной оптимизацией или без нее. Старший менеджер по связям с общественностью Nvidia Брайан Дель Риццо объяснил, что многопоточность уже была доступна в CPU PhysX 2.x и что разработчик должен был ее использовать. Он также заявил, что автоматическая многопоточность и SSE будут представлены в версии 3 PhysX SDK. [33]
PhysX SDK 3.0 был выпущен в мае 2011 года и представлял собой значительную переработку SDK, внося такие улучшения, как более эффективная многопоточность и унифицированная база кода для всех поддерживаемых платформ. [2]
Технология PhysX используется такими игровыми движками , как Unreal Engine (с 3-й версии), Unity , Gamebryo , Vision (с 6-й версии), Instinct Engine, [34] Panda3D , Diesel , Torque , HeroEngine и BigWorld . [25]
Как один из немногих основных физических движков, он используется во многих играх, таких как The Witcher 3: Wild Hunt , Warframe , Killing Floor 2 , Fallout 4 , Batman: Arkham Knight , Planetside 2 и Borderlands 2 . Большинство этих игр используют процессор для обработки физического моделирования.
Видеоигры с дополнительной поддержкой PhysX с аппаратным ускорением часто включают дополнительные эффекты, такие как рвущаяся ткань, динамический дым или имитация мусора из частиц. [35] [36] [37]
Другое программное обеспечение с поддержкой PhysX включает: