PhysX — это открытый [1] исходный код промежуточного программного обеспечения SDK для движка физики в реальном времени , разработанный 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, является The Сталинское метро , выпущенная в игровых магазинах только в России в сентябре 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 , но это изменение коснулось только компьютерных и мобильных платформ. [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 и Android. [11]
PhysX — многопоточный SDK для моделирования физики. Поддерживает динамику твердых тел , динамику мягких тел (например, моделирование ткани , включая разрывы и давление ткани), рэгдоллов и контроллеров персонажей, динамику транспортных средств , частицы и моделирование объемной жидкости .
Физический процессор (PPU) — это процессор, специально разработанный для облегчения вычислительной нагрузки на центральный процессор, в частности вычислений, связанных с физикой. PhysX PPU предлагались потребителям в виде карт 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]
После приобретения Ageia компанией Nvidia разработчики PhysX отказались от карт расширения PPU и сосредоточились на возможностях GPGPU современных графических процессоров.
Современные графические процессоры очень эффективны при обработке и отображении компьютерной графики, а их высокопараллельная структура делает их более эффективными, чем универсальные центральные процессоры, для ускорения физического моделирования с использованием PhysX.
Любая видеокарта GeForce с поддержкой CUDA (графический процессор 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 на CPU. В статье предполагалось, что переписывание PhysX с использованием инструкций SSE может существенно уменьшить разницу в производительности между CPU PhysX и GPU PhysX.
В ответ на анализ Real World Technologies Майк Сколонес, менеджер по продукции PhysX, сказал [32] , что поддержка SSE осталась позади, поскольку большинство игр сначала разрабатываются для консолей , а затем портируются на ПК. В результате современные компьютеры запускают эти игры быстрее и лучше, чем консоли, даже с небольшой оптимизацией или без нее. Старший PR-менеджер 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 включает: