FBX Python Bindings を maya2023向けにビルドする

fbx.pyd および fbxsip.pyd をwindowsでビルドする手順を紹介


目次


Autodesk より配布されている FBX関連ファイル、そのなかに PythonよりFBXを読み書き操作するためのモジュールを含む Python Bindisgがある。このモジュールは Python のバージョンごとに用意する必要がある。(後方互換あるバージョンもあるケースもあるのだが割愛)しかし、事前に用意されている Bindings は Python3.7 のみであり、それ以外のバージョンでは利用不可だ。maya2023の Python 3.9からは使用不能だ。そのうえ公式サイトにはビルド手順が紹介されておらず、また用意されているファイルは罠だらけだ。ここに記録を残しておく。 なお Windows環境についてのみ記載するが、他のプラットフォームでも事情は同じと思われる。

ビルド環境

まずはビルドに必要な環境・コンパイラを用意しよう。Microsoft より、BuildTools for Visual Studio のインストーラををDLし読み込みたい Python環境に合わせたバージョン、ここでは Python3.9に必要な 2019 をインストールしておく。 Python3.9 環境自体も必要なので用意する。あるいは mayapy を用いてもよいが、パスの設定手間なのでこの記事では割愛。

関連ファイルの収集

つぎにビルドに必要なファイルを用意しよう。 Autodesk のサイトより

  • FBX SDK 2020.3.2 VS2019
  • FBX SDK 2020.3.2 Python
  • FBX SDK 2020.3.2 Python Bindings

および

以上をDL & インストールしておく。なお 昔の記事では Riverbank よりSIP をDLするように案内されていることがあるが、現在は必要なバージョンにたどり着くのが難しいため sourceforge よりアーカイブをDLすることをおすすめする( https://www.autodesk.com/company/legal-notices-trademarks/open-source-distribution にも置いといてくれよなー )。v4最終バージョンや、v5, v6ではビルド不可なので注意しよう。 これらのファイルを ファイルパスにスペースを含まない場所に配置する (用意されているビルドスクリプト(後述)がスペースに対応できていないため。まじかよ)ここでは d:\fbx に配置したとする。解凍直後のフォルダにスペースが含まれている場合、リネームしておく

ビルドスクリプトの編集

用意されているファイル PythonBindings/2020.3.2/PythonBindings.py を編集する。(開いていきなりびっくりするが)コンパイラバージョンがハードコーディングされているので修正する。

- vsCompiler = "vs2015"
+ vsCompiler = "vs2019"

vcvars.bat へのパスも buildtools に対応していない。必要に応じ各自のパスに修正する。

def vcvars(platform_tag):
+   # ちゃんとするの面倒だった
+   return "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Auxiliary/Build/vcvars64.bat"
+     
    prefix = vcCompiler.replace('vc', 'VS')
    vc_common_tool_dir = os.path.expandvars('$'+prefix+'COMNTOOLS')
    if platform_tag == 'FBX_X64':
        result = os.path.normpath(os.path.join(vc_common_tool_dir, '../../VC/bin/amd64/vcvars64.bat'))
    else:
        result = os.path.normpath(os.path.join(vc_common_tool_dir, '../../VC/bin/vcvars32.bat'))
    return result

ビルド

準備ができたのでビルドスクリプトを実行する

cd /d %~dp0

SET FBX_VERSION=2020.3.2

SET FBXSDK_ROOT=D:\fbx\FBXSDK\%FBX_VERSION%
SET FBXSDK_LIBS_64_FOLDER=D:\fbx\FBXSDK\%FBX_VERSION\lib\vs2019\x64\release
SET SIP_ROOT=D:\fbx\sip-4.19.13

cd D:\fbx\PythonBindings\%FBX_VERSION%
python PythonBindings.py Python3_x64 buildsip

コマンドプロンプトより以上の内容のバッチを実行。あるいは同等のコマンドを発行しビルドする。 成功すると D:\fbx\PythonBindings\2020.3.2\build\Distrib\site-packages 以下に必要な成果物ができあがる。

以上。