28
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-10-16

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.objcube.fbx に変換するというサンプルプログラムを、以前作ったことがあります。これを試してみることにしました。
GitHub / segurbvita / fbx_sdk_python_sample

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

サンプルコードを以下に置きます。
FBX SDK Python Sample for Colab

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

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

まず、 Google Colab にアクセスして、 ファイル > Python 2 の新しいノートブック を選びます。

キャプチャ.PNG

(なぜ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)

image.png

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

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

image.png

ただの立方体ですね!

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')

image.png

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

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

image.png

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

さいごに

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

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

28
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
40

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?