無料のクラウドGPUでFBX SDK Pythonを動かす

# xRエンジニアもスタバMacでドヤりたい
スターバックスに行くとMacBook等のノートPCで作業している人を結構見かけます。すごく羨ましいです。



**自分もスタバMacでドヤりたい！**



ただ、FBXの加工処理とかを最近よく扱うのですが、かなり重たいので、ノートPCだとマシンスペックが心もとないんですよね。。。



# Google ColabでGPUマシンをリモートで使う

そんな時、とある勉強会で以下の記事に出会いました。
[他人のGPUでフォトグラメトリしたい！！](https://qiita.com/kotauchisunsun/items/9e3444faec734ddedcb5)



Google Colaboratoryという無料サービスを使えば、Pythonインストール済みのハイスペックマシン環境を、Webブラウザから使うことができるみたいです！



詳しくはこちらをご覧ください。
[Colaboratory へようこそ](https://colab.research.google.com/notebooks/welcome.ipynb)



Google Colab を知って、思いました。



**Pythonが使えるということは、FBX SDK Pythonも使えるのでは？？**



#Google ColabでFBX SDK動いた

FBX SDK Pythonを使って、 `cube.obj` を `cube.fbx` に変換するというサンプルプログラムを、以前作ったことがあります。これを試してみることにしました。
[GitHub / segurbvita / fbx_sdk_python_sample](https://github.com/segurvita/fbx_sdk_python_sample)



Google Colaboratoryに移植してみたところ、、、 **ちゃんと動きました！**



サンプルコードを以下に置きます。
[FBX SDK Python Sample for Colab](https://colab.research.google.com/drive/1uDAMdwPgAEfiyEanK8qdeNQWPq52Ka0x)



以下、解説していきます。



## 新しいノートブックを用意する

まず、 [Google Colab](https://colab.research.google.com/notebooks/welcome.ipynb) にアクセスして、 `ファイル > Python 2 の新しいノートブック` を選びます。

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/186795a0-b8bf-bf9b-676f-64b4018d7dd7.png)

（なぜPython2なのかというと、FBX SDK PythonのLinux版がPython2.7にしか対応してないからです。。。）



## FBX SDK Python をダウンロードする

以下のコマンドをコピー＆実行して、 FBX SDK Python をダウンロードしましょう。

```bash
# FBX SDK Python をダウンロードする
!wget https://www.autodesk.com/content/dam/autodesk/www/adn/fbx/20195/fbx20195_fbxpythonsdk_linux.tar.gz -O /tmp/fbx20195_fbxpythonsdk_linux.tar.gz
  
# ディレクトリを作成する
!mkdir /python-fbx 
!mkdir /python-fbx/install

# gzファイルを解凍する
!tar -zxvf /tmp/fbx20195_fbxpythonsdk_linux.tar.gz -C /python-fbx

# install ディレクトリに出力する。ここでエラーが発生するが無視する。
!printf "yes\nn" | /python-fbx/fbx20195_fbxpythonsdk_linux /python-fbx/install
```

エラーが発生しますが、特に害はなさそうなので、無視してください！



## site-packages フォルダのパスを確認する

 `site-packages` フォルダのパスを確認する必要があります。以下のコマンドを実行してください。環境変数 `SITE_PACKAGES` にパスが代入されます。

```python
import os;
import site;
os.environ['SITE_PACKAGES'] = site.getsitepackages()[0]
```



### FBX SDK Python をインストールする

ようやくインストールです。以下のコマンドを実行して、 `site-packages` に FBX SDK Python をインストールしましょう。

```bash
!cp /python-fbx/install/lib/Python27_ucs4_x64/* $SITE_PACKAGES
```





## FBX SDK が動くか確認する

FBX SDK Python が正しくインストールされたのか？以下のコマンドで確認できます。

```python
from fbx import *
```

何もエラーが表示されなければ成功です！



# cube.obj を cube.fbx に変換してみる

FBX SDK Python を使って cube.obj を cube.fbx に変換できるのか試してみます。



## cube.obj を作成する

まず、cube.objを作成します。以下のコマンドを実行してください。

```python
# Generate cube.obj

s = '''# cube
g cube
v -0.5 -0.5 -0.5
v 0.5 -0.5 -0.5
v -0.5 0.5 -0.5
v 0.5 0.5 -0.5
v -0.5 -0.5 0.5
v 0.5 -0.5 0.5
v -0.5 0.5 0.5
v 0.5 0.5 0.5
f 1 2 6 5
f 1 3 4 2
f 1 5 7 3
f 2 4 8 6
f 3 7 8 4
f 5 6 8 7
'''

path = 'cube.obj'
with open(path, mode='w') as f:
    f.write(s)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/b98547fd-3871-f3d1-f17e-a5642b421e15.png)

こんな感じで、 `ファイル` に `cube.obj` が生成されれば成功です。

ちなみに、ローカルにダウンロードして `ペイント3D` で開くとこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/46d2fc0f-33f6-faf7-1bc4-f2a1cdd9cf97.png)

ただの立方体ですね！



## cube.obj を cube.fbx に変換する

ようやく FBX SDK Python の出番です。以下のコマンドを実行してください。 `cube.obj` を読み込んで `cube.fbx` を出力します。

```python
import sys
from fbx import *


def main(obj_path, fbx_path):
    # 各種インスタンス生成
    manager = FbxManager.Create()
    scene = FbxScene.Create(manager, "fbxscene")
    importer = FbxImporter.Create(manager, "fbximporter")
    exporter = FbxExporter.Create(manager, "fbxexporter")

    # OBJ形式のファイルをシーンに読み込む
    importer.Initialize(obj_path, -1)
    importer.Import(scene)

    # シーンをFBX ascii 形式でファイルに書き込む
    exporter.Initialize(fbx_path, 1)
    exporter.Export(scene)

    # インスタンス破棄
    exporter.Destroy()
    importer.Destroy()
    scene.Destroy()
    manager.Destroy()


main('cube.obj', 'cube.fbx')
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/a38e7766-d3ec-074a-775f-4c84336d1a9d.png)

`cube.fbx` が出力されました！成功です！

念のため、ダウンロードして `ペイント3D` で開いてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221845/d5d80b1f-aa2f-3a77-8a16-e5972239bc56.png)

ちゃんと立方体ですね！（色が変わってるのは、FBX出力の際にライティング等の情報が付加されたためです。）



# さいごに

無事に Google Colaboratory でも FBX SDK Python が使えました！

本記事作成にあたり、以下の記事を参考にさせていただきました。わかりやすい記事、ありがとうございました。

- [Google Colaboratoryが、3D CGレンダリング用途にも有能すぎた件](https://qiita.com/stakemura/items/71aeefaa927ab277fcf1)
- [他人のGPUでフォトグラメトリしたい！！](https://qiita.com/kotauchisunsun/items/9e3444faec734ddedcb5)
- [Docker Hub / lerignoux / python-fbx](https://hub.docker.com/r/lerignoux/python-fbx/dockerfile)