nVidia的物理系统
PhysX
PhysX(wiki en 中文,physx wiki physx wiki2)是nVidia公司一款跨平台实时物理引擎,可使用硬件(GPU、PPU: Physics Processing Unit, 物理处理器)加速
支持刚体(rigid bodies)、软体(soft bodies)、流体(fluids)、面料(cloths)、力场(force fields)等
目前已在github上开源,有3个开源项目:
PhysX3.3(私有库):其中集成了Apex1.3.4
PhysX3.4(公有库):其中集成了Apex1.4,UE4.22集成的是该版本 源代码路径:Engine\Source\ThirdParty\PhysX3 运行时库:Engine\Binaries\ThirdParty\PhysX3
注:UE4集成的PhysX具体版本号在Engine\Source\ThirdParty\PhysX3\PhysX_3.4\release_notes.html
ApexDestruction:Engine\Plugins\Runtime\ApexDestruction
NvCloth:Engine\Source\ThirdParty\PhysX3\NvCloth
Blast:Engine\Plugins\Experimental\BlastPlugin\Source\ThirdParty
PhysX(公有库):最新版本为4.1
UE4可在Build.cs中通过以下设置来控制是否使用PhysX及其相关组件
Target.bCompilePhysX
Target.bCompileAPEX
Target.bCompileNvCloth
== 以PhysX3为例,说明不同版本dll的区别==
PhysX3DEBUG_x64.dll // Debug版本
PhysX3CHECKED_x64.dll // 宏断言版本
PhysX3PROFILE_x64.dll // 带性能数据收集功能版本
PhysX3_x64.dll // Release版本
获取nVidia Gameworks私有github库方法,大致步骤如下:
1. 注册NVIDIA Developer开发者账号(不是有NVIDIA账号就能直接登录的,必须是开发者账号)
2.同意最终用户许可协议(EULA),并在最后把自己的GitHub用户名输入。
3. 在一段时间后,会收到github上NvidiaGameWorksAdmin拉你入NVIDIAGameWorks组的邮件。
4. 加入NVIDIAGameWorks后,会收到NVIDIA GameWorks用github邮箱发的邮件,告诉你已经把你拉入GameWorks_EULA_Access Team,并被赋予“Pull”权限。
5. 访问https://github.com/NVIDIAGameWorks,这个时候就能看见NvCloth、Blast、Flex、Flow等私有库。
① UE3中Pawn行走时的碰撞检测、重力、武器射击、流体(FluidSurfaceActor)的模拟是自己实现的
② 人物死亡,调用SetPawnRBChannels(TRUE)开启布娃娃系统(ragdoll),并且将SetPhysics(PHYS_RigidBody),则会使用Pawn的PhysicsAsset数据进行PhysX物理模拟
③ 载具使用是PhysX物理模拟 (udn 设置载具 载具系统技术指南)
④ 从RigidBodyBase派生的Actor(如:RB_ConstraintActor、RB_PrismaticActor)开启模拟后,会进行PhysX物理模拟
⑤ 破坏(FracturedStaticMesh)、软体会使用PhysX进行物理模拟
Apex
Apex(physx wiki)在PhysX之上开发一套跨平台SDK,用于制作和运行复杂的物理数据(如带破坏模型、面料等)
Apex1.3.4(随PhysX3.3)和Apex1.4(随PhysX3.4)已开源,具体文档详见:NVIDIA(R) APEX(TM) SDK Documentation
1.4版本之后,nVidia放弃了Apex,并发布了一些新开源项目NvCloth、Blast、Flow(私有库)来替换Apex中各个组件
Apex的发布记录:NVIDIA(R) APEX(TM) SDK Release Notes
Apex的架构如下:
注1:Authoring为制作物理资源的组件集合,Run-time为运行物理资源的组件集合
注2:绿色部分为nVidia提供的物理组件工具集
Apex包括如下组件模块:
APEX Clothing(面料) --> NvCloth(docs 私有库 github)
APEX Destruction(破坏) --> Blast(api docs authoring docs 私有库 github)
APEX Particles(粒子) --> Flow(docs 私有库 github)
APEX Turbulence(湍流)
APEX ForceField(力场)
APEX Vegetation (植被 开发已暂停)
在UE3中使用Apex
布料:APEX Clothing in UE3(udn en 中文)
破坏:APEX Destruction in UE3(udn en 中文)
FleX
FleX(physx wiki)是GPU加速基于粒子模型的物理模拟库,其源码也在Github上开源(私有库)
支持刚体(rigid bodies)、变形体(deformable bodies)、软体(soft bodies)、流体(fluids)、面料(cloths)、气体(gases)等
FleX Documentation
FleX UE4 Plugin Documentation
nVidia Gameworks documentation simulation中列出了所有物理相关的SDK组件
GameWorks PhysX Overview中介绍了最新的PhysX及基于PhysX的组件
nVidia Gameworks Download Center中提供了PhysX相关的软件下载(需要登录nVidia开发者账号),如下为PhysX SDK3.4.0的下载内容:
3D Studio Max DCC plug-in for PhysX:PhysX的3Ds Max插件
Maya DCC plug-in for PhysX :PhysX的Maya插件
注:① DCC为Digital Content Creation简称 ② DCC plug-in for PhysX
PhysX Visual Debugger(PVD):PhysX的可视化调试软件。通过与被调试的PhysX程序建立连接,实时地将其物理元素可视化到PVD中
PhysX Lab:为APEX Destruction(破坏)和APEX Particles(粒子)制作数据的工具
参考