assimp 是一个开源的模型加载库,支持非常多的格式,还有许多语言的 binding,这里我们选用 assimp 的 python 的 binding 来加载模型文件。不过社区主要是在维护 assimp 的 C++ 代码,对于这些 binding 可能更新的不够及时,比如 python 版本的就存在一些问题。
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 https://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. 总结
- 用 vcpkg 编译得到 assimp 的库,注意修改编译选项;
- 安装 pyassimp 的 4.1.3 版本!!;
- 将 assimp 库放到 pyassimp 可以找到的地方