ДонНТУ > Портал магистров ДонНТУ
Магистр ДонНТУ Безе Владимир Игоревич

Безе Владимир Игоревич

Факультет компьютерных наук и технологий
Кафедра автоматизированных систем управления
Специальность «Информационные управляющие системы»

Подсистема оптимизации маршрутов погрузчиков в условиях склада ЗАО «ПО «КОНТИ»

Научный руководитель: к.т.н., доц. Телятников Александр Олегович

NVIDIA PhysX для игровой индустрии

Введение

PhysX — физический движок, работающий в режиме реального времени. Принадлежит компании NVIDIA. PhysX SDK — пакет подпрограммного обеспечения (англ. middleware) для работы с PhysX. Является мультиплатформенным (X-Box 360, PS3, Wii, iPhone).
Я использовал этот движок для разработки собстенных не комерческих игр, так как качество технологии движка PhysX на данный момент лучше всех остольных движков.

Описание

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

После того, как компания NVIDIA приобрела Ageia, PhysX полностью перешел в собственность NVIDIA. До выхода физического процессора PhysX движок носил название NovodeX. Исходный код PhysX SDK активно предлагается для продажи (лицензирования) сторонним компаниям, его используют около ста игр. Основная особенность PhysX SDK — это возможность использовать физический процессор PhysX или мощности видеокарт NVIDIA для ускорения обработки физических вычислений. Стоит отметить такой важный факт: PhysX SDK распространяется бесплатно и накладывает на разработчиков лишь необходимость указания в программном продукте информации о используемом физическом движке, а так же отображения логотипа компании nVidia на этапе загрузки программного продукта. Так же важно отметить, что PhysX SDK бесплатен на ПК для всех и, недавно, на консолях для зарегистрированных разработчиков.

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

Физический движок PhysX SDK состоит из трёх главных компонентов по обработке физики:
— обработка твёрдых тел (rigid body);
— обработка тканей (cloth);
— обработка жидкостей (fluid).

Новая версия PhysX под номером 3.0 возможно будет показана на предстоящем GDC2010.
NVIDIA активно развивает другой свой продукт — APEX, который базируется на PhysX.

Скриншоты



Character Controller

Character Controller широко используются для передвижения персонажа игрока и персонажа с A.I. Такое передвижение не вынуждает вас использовать силы для того чтобы сдвинуть объект. Но Character Controller по прежнему взаимодействует с окружающим физическим миром: вы можете двигать им динамические объекты, он не позволит вам проходить сквозь статические, также он позволит скользить вдоль стен, падать, прыгать, подниматься по лестницам или заходить на невысокие или пологие объекты. В общем получается физический персонаж, которым вы можете управлять при помощи задачи координат, а не прилагая к нему сил.

Для того чтобы начать создание Controller необходио написать следующий код:
mManager = NxCreateControllerManager(allocator);
NxBoxControllerDesc desc;
desc.position.x = pos.x;
desc.position.y = pos.y;
desc.position.z = pos.z;
desc.extents = dim;
desc.skinWidth = 0.1f;
desc.slopeLimit = cosf(NxMath::degToRad(45.0f));
desc.stepOffset = 25.5f;
desc.upDirection = NX_Y;
desc.callback = &mReport;
mController = mManager->createController(scene, desc);

Для управления и обновления Controller (Capsule), используется седующий код, который вставляеся в функцию обработки кадров (frameStarted):
NxCapsuleController* capsuleCtrl = ((NxCapsuleController*) mController);
NxF32 height = capsuleCtrl->getHeight() + offset.y;
NxF32 radius = capsuleCtrl->getRadius() + offset.y/2;
NxExtendedVec3 pos = capsuleCtrl->getPosition();
pos.y += offset.y;
if (height <= 0.0f || radius <= 0.0f)
     break;
NxCapsule worldCapsule;
worldCapsule.p0 = NxVec3(pos.x, pos.y-height/2, pos.z);
worldCapsule.p1 = NxVec3(pos.x, pos.y+height/2, pos.z);
worldCapsule.radius = radius;
capsuleCtrl->setCollision(false);
capsuleCtrl->setHeight(height);
capsuleCtrl->setRadius(radius);
capsuleCtrl->setPosition(pos);
capsuleCtrl->setCollision(true);

Вот то что получается после создания Character Controller`а, рисунок с графическим отображением объектов:

рисунок в RemoteDebugger`е:

Ссылки

  1. NVIDIA: PhysX для разработчиков [Электронный ресурс]. - Режим доступа: http://developer.nvidia.com...
  2. NVIDIA: PhysX-форумы [Электронный ресурс]. - Режим доступа: http://developer.nvidia.com...
  3. EULA [Электронный ресурс]. - Режим доступа: http://developer.nvidia.com...
  4. Игры в которых используется PhysX [Электронный ресурс]. - Режим доступа: http://developer.nvidia.com...

Резюме | Автобиография | Реферат | Библиотека | Ссылки | Отчет о поиске