前言
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 版本
-
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 運行結果: