xRエンジニアもスタバMacでドヤりたい
スターバックスに行くとMacBook等のノートPCで作業している人を結構見かけます。すごく羨ましいです。
自分もスタバMacでドヤりたい!
ただ、FBXの加工処理とかを最近よく扱うのですが、かなり重たいので、ノートPCだとマシンスペックが心もとないんですよね。。。
Google ColabでGPUマシンをリモートで使う
そんな時、とある勉強会で以下の記事に出会いました。
他人のGPUでフォトグラメトリしたい!!
Google Colaboratoryという無料サービスを使えば、Pythonインストール済みのハイスペックマシン環境を、Webブラウザから使うことができるみたいです!
詳しくはこちらをご覧ください。
Colaboratory へようこそ
Google Colab を知って、思いました。
Pythonが使えるということは、FBX SDK Pythonも使えるのでは??
#Google ColabでFBX SDK動いた
FBX SDK Pythonを使って、 cube.obj
を cube.fbx
に変換するというサンプルプログラムを、以前作ったことがあります。これを試してみることにしました。
GitHub / segurbvita / fbx_sdk_python_sample
Google Colaboratoryに移植してみたところ、、、 ちゃんと動きました!
サンプルコードを以下に置きます。
FBX SDK Python Sample for Colab
以下、解説していきます。
新しいノートブックを用意する
まず、 Google Colab にアクセスして、 ファイル > Python 2 の新しいノートブック
を選びます。
(なぜPython2なのかというと、FBX SDK PythonのLinux版がPython2.7にしか対応してないからです。。。)
FBX SDK Python をダウンロードする
以下のコマンドをコピー&実行して、 FBX SDK Python をダウンロードしましょう。
# 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
にパスが代入されます。
import os;
import site;
os.environ['SITE_PACKAGES'] = site.getsitepackages()[0]
FBX SDK Python をインストールする
ようやくインストールです。以下のコマンドを実行して、 site-packages
に FBX SDK Python をインストールしましょう。
!cp /python-fbx/install/lib/Python27_ucs4_x64/* $SITE_PACKAGES
FBX SDK が動くか確認する
FBX SDK Python が正しくインストールされたのか?以下のコマンドで確認できます。
from fbx import *
何もエラーが表示されなければ成功です!
cube.obj を cube.fbx に変換してみる
FBX SDK Python を使って cube.obj を cube.fbx に変換できるのか試してみます。
cube.obj を作成する
まず、cube.objを作成します。以下のコマンドを実行してください。
# 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)
こんな感じで、 ファイル
に cube.obj
が生成されれば成功です。
ちなみに、ローカルにダウンロードして ペイント3D
で開くとこんな感じです。
ただの立方体ですね!
cube.obj を cube.fbx に変換する
ようやく FBX SDK Python の出番です。以下のコマンドを実行してください。 cube.obj
を読み込んで cube.fbx
を出力します。
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')
cube.fbx
が出力されました!成功です!
念のため、ダウンロードして ペイント3D
で開いてみました。
ちゃんと立方体ですね!(色が変わってるのは、FBX出力の際にライティング等の情報が付加されたためです。)
さいごに
無事に Google Colaboratory でも FBX SDK Python が使えました!
本記事作成にあたり、以下の記事を参考にさせていただきました。わかりやすい記事、ありがとうございました。