僕は発展途上技術者

サーバー(Ubuntu)上でBlenderを動かし、objファイルをインポートしてレンダリングする

最近はUnityやらARKitやら、Blenderを触っていてだいぶ3D慣れしてきました。

objファイルをブラウザからアップロードし、そのファイルで定義された3Dオブジェクトのスクリーンショットを表示したいという要望があり、いろいろと方法を調べたところ、サーバー側でBlenderを動かしてobjファイルをインポートしてレンダリングすればできるということがわかりました。その手順を紹介します。

まずサーバーにBlenderをインストールします。2018/1/11時点で最新の2.79をインストールするため、最新のパッケージを含んでいるレポジトリをadd-apt-repositoryで追加してからapt-getでインストールします。

% sudo add-apt-repository ppa:thomas-schiex/blender
% sudo apt-get update
% sudo apt-get install blender

参考 http://ubuntuhandbook.org/index.php/2017/09/blender-2-79-released-install-it-in-ubuntu/

BlenderはGUIで操作する3DCGソフトなのですが、操作内容をPythonで書くことができ、コマンドラインから実行することができます。

以下が、「--」以降の第1引数で指定した.objファイルを読み込み、第2引数で指定した.pngファイルにレンダリングしたイメージを書き出します。この.pngファイルがスクリーンショットになります。

Blenderを起動するとデフォルトでライトとカメラ、立方体のサンプルのオブジェクトが表示されるので、以下の命令で立方体のサンプルを削除しています。

bpy.data.objects.remove(bpy.data.objects['Cube'])

以下のようにして、Blenderをコマンドラインで呼び出します。

% blender --python import_obj.py -- cone.obj cone.png

--pythonオプションの後に、pythonスクリプトimport_obj.pyを指定し、-- 以降、第1引数にcone.objを指定し、第2引数に書き出す画像ファイルcone.pngを指定しています。

cone.objは円錐の3Dオブジェクトの頂点データを持っています。

上記コマンドで書き出されるcone.pngは以下の通りです。

cone.png

上記import_obj.pyは一つの.objファイルを読み込むだけの非常にシンプルなスクリプトでした。複数の.objファイルを読み込んだり、マテリアルを適用したり、カメラの角度やライトの当て方を変えるPythonのコードを追加することで自在に3Dオブジェクトのキャプチャを取ることができます。

プロフィール

株式会社まちクエスト代表、つくる社LLC代表。

Raspberry Piではじめる どきどきプログラミングを書きました。

Amazonから図書館検索 Libron、iPhoneアプリ ひらがなゲーム かなぶん を作っています。

Twitter @jishiha

最近のエントリー

アーカイブ