前言
Unity 3D 中的物理引擎分为 2D 引擎和 3D 引擎两部分,其中 2D 引擎使用的 Erin Catto
写的是 Box2D,而 3D 引擎使用的的 NVIDIA 的 PhysX
,在 Unity Editor 中打开 Help
— About Unty
可以看到 "Physics powered by PhysX. (c) 2011 NVIDIA Corporation."
的字样。
Unity 历史 PhysX 版本
-
2005 年,Unity 1.0 就使用 PhysX 作为物理引擎
-
2010 年,Unity 3.0 版本将 PhysX 版本从 2.6 升级到 2.8
-
2014 年,Unity 5.0 版本将 PhysX 版本从 2.x 升级到 3.3
-
Unity 2018.3 版本开始,Unity 将 PhysX 版本从 3.3.1 升级到 3.4.2
主要提升了稳定性和性能,且增加了多世界支持
-
Unity 2019.1 又加入了
Physics Debugger
工具用于可视化检查场景中几何图形的碰撞器,通过 Window > Analysis > Physics Debugger 打开
PhysX 简介
PhysX
是 NVIDIA 旗下的物理加速技术,利用 GPU 的处理能力来执行复杂的物理效果计算,利用 CUDA
技术,由显示核心加速运算。
目前支持的平台有:Windows 、Linux 、Android ARM 、mac OS 和 iOS 。
Github 源码:在 NVIDIAGameWorks 官方的 Github 仓库中有两份源码:
-
PhysX 2018 年 12 月份才开源的 4.0 版本,2019 年 3 月份更新至 4.1 版本(PhysX SDK 4.0 is available 和 Updated PhysX SDK 4.1 released)
-
PhysX-3.4 2016 年 10 月份开源的 3.4 版本(Pre-release version of PhysX SDK 3.4 is now available on GitHub)
目前主流的已集成了 PhysX
的游戏引擎有:Unity 3D 、Unreal Engine 3/4 等。(数据来源 phyxinfo )
更多 PhysX 的资讯可以查看官方网站 physxinfo.com 和 physx 总览
下载 PhysX 源码
从 Github 上下载 PhysX 4.0 源码:
$ git clone https://github.com/NVIDIAGameWorks/PhysX.git
工程有点大,大概 1.26G 左右,当然也可以直接下载 release 版本的压缩包:PhysX-4.0.0.zip ,然后解压
下载完毕,工程目录如下:
├─ PhysX
│ ├─ externals
│ ├─ kaplademo
│ └─ physx
│ └─ pxshared
下面是将 PhysX 引入我们自己的工程中的步骤,大致参考了 PhysXSetup.pdf 和
安装 DirectX SDK
假如只是想编译得到 SDK 的核心库,则不必安装此 SDK ,因为此 SDK 只在源码中的示例中被使用,即源码中提供的一个 demo 工程。符合要求的版本:Microsoft DirectX SDK 2010 年 6 月份及之后的版本,直接下载 DirectX SDK 9.29.1962 June 2010 ,然后双击进行安装即可,似乎只能装在 C 盘,其他盘装不了。
然而,我在安装 DirectX 的过程中出现了 Error Code:s1023
导致安装失败。
原因分析:
DirectX 安装过程中会顺便安装 Microsoft Visual C++ 2010 x86 Redistributable - 1010.0.30319
组件,而电脑中已经存在比此版本更高的 C++ Redistributable ,我在控制面板看了一下,由于我安装了 VS 2010 、VS 2015 和 VS 2017 ,并且都安装了 C++ 支持相关的 SDK,因此我电脑中 C++ Redistributable 的版本也有很多个:
看起来简直是噩梦,但其实跨大版本是不会冲突的。
解决方案:
因此只需要先卸载 Microsoft Visual C++ 2010 x86 Redistributable - 1010.0.40219
即可,包括 x64 和 x86。然后,再重新安装 DirectX 。
其实回退版本影响并不大,当然,假如还希望安装被卸载掉的 C++ 组件,可以从 Microsoft Visual C++ 2010 Service Pack 1 Redistributable Package MFC Security Update 下载安装。
更多 C++ Redistributable 版本可以在这里下载: Visual C++ Redistributable Packages and Related Registry Entries 。
SDK 编译源码
根据 官方文档 readme_windows 指出的编译要求:
-
CMake 3.12 或以上版本
-
Python 2.7.6 版本
这里我使用的是 CMake 3.13.0-r3 和 Python 2.7.9 ,具体编译步骤如下:
-
进入工程的 physx 目录,运行
generate_projects.bat
来生成 VS 解决方案,可以进入编译选择界面:E:\C++\libs\PhysX-4.0.0\physx>exit /b 0 Preset parameter required, available presets: (0) android <--- Android-19, armeabi-v7a with NEON PhysX SDK (1) vc12win32 <--- VC12 Win32 PhysX general settings (2) vc12win64 <--- VC12 Win64 PhysX general settings (3) vc14win32 <--- VC14 Win32 PhysX general settings (4) vc14win64 <--- VC14 Win64 PhysX general settings (5) vc15win32 <--- VC15 Win32 PhysX general settings (6) vc15win64 <--- VC15 Win64 PhysX general settings Enter preset number:
除了第一个 android 版本外,其余的都是 windows 平台下使用的,vc 版本对于 VS 编译器版本大致关系如下:
Visual Studio 2013 : vc12 Visual Studio 2015 : vc14 Visual Studio 2017 : vc15
这里我选择 6 ,则生成的工程用 VS 2017 打开,编译生成用 64 位的库。
-
工程生成成功后,在
physx/compiler
目录下会多出一个vc15win64
的目录:假如当前已安装了 VS2017 ,直接双击打开
PhysXSDK.sln
文件 。 -
编译全部:
然后依次选择菜单:
调试
>开始执行
结果出现 3 个错误:
58>------ 已启动生成: 项目: ALL_BUILD, 配置: debug x64 ------ 58>Building Custom Rule E:/C++/libs/PhysX-4.0.0/physx/compiler/public/CMakeLists.txt 58>CMake does not need to re-run because E:/C++/libs/PhysX-4.0.0/physx/compiler/vc15win64/CMakeFiles/generate.stamp is up-to-date. ========== 生成: 成功 55 个,失败 3 个,最新 0 个,跳过 0 个 ==========
查看输出日志,3 个错误分别是:
29>已完成生成项目“SamplePlatform.vcxproj”的操作 - 失败。 ... 30>已完成生成项目“SampleRenderer.vcxproj”的操作 - 失败。 ... 44>已完成生成项目“Samples.vcxproj”的操作 - 失败。 ...
而导致失败的原因是:
: fatal error C1083: 无法打开包括文件: “d3dx9.h”: No such file or directory
这是因为源码中的 demo 依赖 DirectX SDK ,解决步骤如下:
在
解决方案资源管理器
中分别选择报错的三个工程:SamplePlatform
、SampleRenderer
和Samples
,右键
>属性
:-
设置 include 目录
C/C++
>常规
>附加头文件
,进入编辑状态然后添加 DirectX SDK 安装目录中的 include 目录:C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include
-
设置 lib 目录
库管理器
>常规
>附加库目录
(Samples
不是静态链接库,因此是链接
>常规
>附加库目录
),进入编辑状态,添加目录 DirectX SDK 安装目录中的 Lib目录:C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib
完成上述配置后,重新生成,输出如下表示编译完成了:
59>------ 已跳过全部重新生成: 项目: INSTALL, 配置: release x64 ------ 59>没有为此解决方案配置选中要生成的项目 ========== 全部重新生成: 成功 58 个,失败 0 个,跳过 1 个 ==========
-
运行示例
在 physx\bin\win.x86_64.vc141.mt\debug
目录下会生成很多 .exe
文件,这些都是官方提供的示例,可以直接双击运行。例如 Samples_64.exe 运行结果: