[CG從零開始] 3. 安裝 pyassimp 庫載入模型文件

assimp 是一個開源的模型載入庫,支援非常多的格式,還有許多語言的 binding,這裡我們選用 assimp 的 python 的 binding 來載入模型文件。不過社區主要是在維護 assimp 的 C++ 程式碼,對於這些 binding 可能更新的不夠及時,比如 python 版本的就存在一些問題。

assimp 的源碼

1. 安裝 pyassimp

官方的編譯的指南,有些坑還是需要踩一下。

pyassimp 只是 assimp 的一個 wrapper,所以計算上還必須有 assimp 的庫才行,還是免不了要去編譯 assimp。

這裡推薦採用 vcpkg 的進行管理,windows 上需要裝一下 visual studio,mac 需要裝一下 xcode,這些軟體也是標配了。我的電腦是 macOS,這裡有個坑需要注意一下,vcpkg 這個默認編譯是靜態庫 .a,我們需要編譯動態庫,所以需要改一下 vcpkg 的編譯選項。如下 vcpkg/triplets/x64-osx.cmake 中將如下選項改為 dynamic

set(VCPKG_LIBRARY_LINKAGE dynamic)

依次執行以下命令即可。

git clone //github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install assimp

等待編譯完成,即可在 vcpkg/packages/assimp_x64-osx/lib 中找到動態庫 .dylib 文件,windows 應該也是差不多的路徑。
然後可以用 pip 來安裝 pyassimp

注意! 這裡有個坑,pyassimp 的 4.1.4 版本,現在默認最新版本,存在 bug,載入模型可能會隨機 crash,github 上有個 issue 在討論這個事情,大家目前的解決方案就是回退到 4.1.3 所以在安裝的時候,我們指定一下版本。

pip install pyassimp==4.1.3

2. 調用 pyassimp API 載入模型

這個時候如果直接調用載入 API 載入模型,會報找不到庫的錯誤:

raise AssimpError("assimp library not found")
pyassimp.errors.AssimpError: assimp library not found

因為 vcpkg 安裝的 assimp 的庫不在 pyassimp 的搜索路徑下,看了一下 pyassimp 搜索庫的路徑,基本上常用的庫的路徑他都搜索來,我們有兩種方法,1. 創建一個軟鏈接到搜索路徑中, 2. 將 assimp 庫的路徑加入環境變數 LD_LIBRARY_PATH 中。

為了方便我創建一個軟鏈接到系統庫中

ln -s {你的 assimp 庫的路徑} /usr/local/lib

然後我們執行下面的程式碼,主要 path 換成你的模型文件,這下就可以找到庫文件了。

import pyassimp
path = "box.fbx"
scene = pyassimp.load(path)
print(scene.meshes[0].vertices.shape)

3. 總結

  1. 用 vcpkg 編譯得到 assimp 的庫,注意修改編譯選項;
  2. 安裝 pyassimp 的 4.1.3 版本!!;
  3. 將 assimp 庫放到 pyassimp 可以找到的地方