PhysX для высокой производительности за счет графического процессора?

StackOverflow https://stackoverflow.com/questions/939838

Вопрос

Недавно я сравнил некоторые существующие физические движки для моделирования и разработки игр.Некоторые из них бесплатны, некоторые с открытым исходным кодом, некоторые коммерческие (1 даже очень коммерческий $$$$).Havok, Ode, Newton (он же oxNewton), Bullet, PhysX и «сырая» встроенная физика в некоторых 3D-движках.

На каком-то этапе я пришел к выводу или вопросу:Зачем мне использовать что-то кроме NVidia PhysX, если я могу использовать его потрясающую производительность (если она мне нужна) благодаря обработке графического процессора?В будущих картах NVidia я могу ожидать дальнейшего улучшения, независимо от обычных этапов создания процессоров.SDK бесплатен и доступен также для Linux.Конечно, это немного привязано к поставщику и не является открытым исходным кодом.

Каково ваше мнение или опыт?Если бы вы прямо сейчас начали разработку, согласились бы вы с вышесказанным?

ваше здоровье

Это было полезно?

Решение

Отказ от ответственности:Я никогда не использовал PhysX, мой профессиональный опыт ограничен Bullet, Newton и ODE.Из этих трех ODE, безусловно, мой фаворит;он наиболее численно стабилен, а у двух других есть проблемы с зрелостью (полезные соединения не реализованы, разрешенные комбинации суставов и двигателей ведут себя неопределенным образом и т. д.).

В своем вопросе вы упомянули проблему привязки к поставщику, но стоит повторить:если вы используете PhysX в качестве единственного решения по физике, люди, использующие карты AMD, не смогут запустить вашу игру (да, я знаю, что это возможно). заставить работать, но он не является официальным и не поддерживается NVIDIA).Один из способов обойти эту проблему — определить механизм аварийного переключения с использованием ODE или чего-то еще в системах с картами AMD.Это работает, но удваивает вашу рабочую нагрузку.Соблазнительно думать, что вы сможете скрыть различия между двумя движками за общим интерфейсом и написать большую часть кода игровой физики один раз, но большинство ваших трудностей с игровой физикой будут связаны с особенностями вашей конкретной игры. физический движок, определяющий значения таких вещей, как контактное трение и восстановление.Эти значения не имеют единого значения во всех физических движках и (в большинстве случаев) не могут быть формально выведены, поэтому вы застреваете в поиске красивых, играбельных значений экспериментальным путем.С PhysX плюс аварийное переключение вы выполняете всю эту работу дважды.

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

Пока я не рассматриваю PhysX как очевидный выбор для разработки высококлассных игр, я бы сказал, что его следует избегать, если только вы не думаете, что люди с картами AMD составляют значительную часть вашей базы игроков (крайне маловероятно), или вы иметь достаточно специалистов по программированию и обеспечению качества для тестирования двух физических движков (более правдоподобно, хотя, если ваша компания настолько богата, я слышал хорошие отзывы о Havok).Или, я думаю, если вы разработали физическую игру с настолько высокими требованиями к производительности, что вас может удовлетворить только потоковая физика - но в этом случае я бы посоветовал вам создать группу и позволить закону Мура делать свое дело в течение года. или два.

Другие советы

Ответ на обновление начала 2013 года:Я разрабатываю для того, что я считаю большой тройкой ОС:Линукс, ОС Х, МС.Я также разрабатываю три большие физические библиотеки:Физикс, Хавок, Пуля.

Что касается PhysX, я недавно провел несколько тестов с последней версией на момент написания этой статьи — 3.2.2.На мой взгляд nVidia действительно снизила эффективность библиотеки.Самым большим из них является отсутствие ускорения твердых тел.Библиотека только ускоряет частицы и ткань.Даже они не взаимодействуют с обычными твердыми телами.Я совершенно озадачен тем, что nVidia делает это, поскольку у них есть огромная маркетинговая кампания по продвижению приложений с ускорением на графическом процессоре, сосредоточенных на научных вычислениях, а основной движущей силой является физическое моделирование.

Так что, хотя я и ожидал, что королем физического симулятора будут PhysX, Havok и Bullet именно в таком порядке, на самом деле я вижу обратное.Bullet выпустила библиотеку 2.8.1 с образцами поддержки OpenCL.Bullet — относительно небольшая библиотека с щедрой лицензией.Их цель — выпустить версию 3 с полностью интегрированным ускорением твердого тела OpenCL.

Часть комментариев говорит о нескольких путях кода.Моё мнение, это не такая уж большая проблема.Я уже поддерживаю три ОС с минимальной поддержкой жесткого кода (по большей части многопоточность и не использую код, специфичный для ОС;используйте шаблоны C++ и std lib).То же самое и с физическими библиотеками.Я использую общую библиотеку и абстрагирую общий интерфейс.Это нормально, потому что физика особо не меняется ;) Вам все равно нужно будет настроить среду моделирования, управлять объектами, выполнять итерации в среде, очищать ее по завершении.Остальное флеш, реализовано на досуге.

С появлением OpenCL в основных библиотеках (nVidia Cuda очень близка к этому — см. демо-версии Bullet OpenCL) работа плагина физики сократится.

Итак, начинаем с нуля и занимаемся только физическим моделированием?Вы не ошибетесь, выбрав Bullet.Небольшая, гибкая лицензия (бесплатная), очень близкая к готовому к производству OpenCL, которая будет кросс-платформенной для трех больших решений ОС и графических процессоров.

Удачи !

Вам может быть интересно это:

http://www.xbitlabs.com/news/video/display/20091001171332_AMD_Nvidia_PhysX_Will_Be_Irrelevant.html

Это предвзято...по сути это интервью с AMD...но здесь есть некоторые моменты, которые, я думаю, стоит учитывать в вашем случае.

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

Итак, если вы действительно хотите, чтобы в вашем движке было аппаратное ускорение физики СЕЙЧАС, выбирайте Physx, но имейте в виду, что когда станут доступны решения, подобные тем, которые постулируются AMD в этой статье (они абсолютно воля но их еще нет), вы столкнетесь с неприятным выбором:

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

2) продолжать использовать только Physx, полностью игнорируя пользователей AMD

3) попробуйте заставить Physx работать на графических процессорах AMD (блин...)

Помимо идеи Дэвида об использовании физического движка ЦП в качестве запасного варианта (выполняющего двойную работу и создающего два движка, которые не ведут себя одинаково), ваш единственный другой вариант - использовать чистую физику ЦП.

Однако по мере того, как такие вещи, как OpenCL, становятся мейнстримом, мы можем увидеть, как ODE/Bullet/kin начинает включать это...IOW, если вы закодируете его сейчас с помощью ODE/Bullet/kin, вы можете (вероятно, со временем получите) получить ускорение графического процессора «бесплатно» позже (без изменений в вашем коде).Он все равно будет вести себя немного по-другому с версией графического процессора (неизбежная проблема из-за эффекта бабочки и различий в реализации с плавающей запятой), но, по крайней мере, у вас будет сообщество ODE/Bullet/kin, работающее с вами, чтобы сократить этот разрыв. .

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

Гипотетическая выгода от будущих карт GFX — это хорошо, но в будущем также будут выгоды от дополнительных ядер ЦП.Можете ли вы быть уверены, что в будущих картах GFX всегда будет достаточно места для вашей физики?

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

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

я использовал ОДА и теперь использую Физика. Физика упрощает построение сцен и (мое личное мнение) кажется более реалистичным, однако для этого не существует адекватной документации. Физика;на самом деле почти никакой документации вообще.С другой стороны, ОДА имеет открытый исходный код и содержит множество документов, руководств и т. д.ПС:Использование ускорения графического процессора значительно помогает мне и моим коллегам;мы используем АПЕКС разрушение и Физика частицы.

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

если весь ваш код поддается массовому парализованию, тогда дерзайте!

во всем остальном графические процессоры совершенно неадекватны.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top