PhysX 物理引擎研究(一)源碼編譯

前言

Unity 3D 中的物理引擎分爲 2D 引擎和 3D 引擎兩部分,其中 2D 引擎使用的 Erin Catto 寫的是 Box2D,而 3D 引擎使用的的 NVIDIA 的 PhysX,在 Unity Editor 中打開 HelpAbout Unty 可以看到 "Physics powered by PhysX. (c) 2011 NVIDIA Corporation." 的字樣。

Unity 歷史 PhysX 版本

  • Unity 2018.3 版本開始,Unity 將 PhysX 版本從 3.3.1 升級到 3.4.2

    主要提升了穩定性和性能,且增加了多世界支持

    參考:UpgradeGuide20183

  • Unity 2019.1 又加入了 Physics Debugger 工具

    用於可視化檢查場景中幾何圖形的碰撞器,通過 Window > Analysis > Physics Debugger 打開

    參考:Physics Debug Visualization

 

PhysX 簡介

PhysX 是 NVIDIA 旗下的物理加速技術,利用 GPU 的處理能力來執行復雜的物理效果計算,利用 CUDA 技術,由顯示核心加速運算。

目前支持的平臺有:Windows 、Linux 、Android ARM 、mac OS 和 iOS 。

Github 源碼:在 NVIDIAGameWorks 官方的 Github 倉庫中有兩份源碼:

目前主流的已集成了 PhysX 的遊戲引擎有:Unity 3D 、Unreal Engine 3/4 等。(數據來源 phyxinfo

更多 PhysX 的資訊可以查看官方網站 physxinfo.comphysx 總覽

 

下載 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 ,解決步驟如下:

    解決方案資源管理器 中分別選擇報錯的三個工程:SamplePlatformSampleRendererSamples右鍵 > 屬性

    • 設置 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 運行結果:

 

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章