MRが楽しい

MRやVRについて学習したことを書き残す

Blenderのビルド手順 その10(Pythonモジュール向けのBlender2.8のテスト実行)

本日は Blender の技術調査です。
前回記事では Python モジュール向けの Blender2.8 をビルドすることができました。
今回は Python に組み込んだ Blender2.8 をテスト実行する手順を記事にします。
f:id:bluebirdofoz:20191003094432j:plain

前回記事の続きです。
bluebirdofoz.hatenablog.com

テストスクリプトの実行

初期画面のレンダリング画像を出力するスクリプトを作成してみます。
・RenderTest.py

# 不要なシステムパスの削除
import sys, os
pythonexedir=os.path.dirname(sys.executable)
del sys.path[5:]
sys.path.append(pythonexedir + '\\lib\\site-packages')
sys.path.append(pythonexedir + '\\lib\\site-packages\\blender')

# bpy インポート
import bpy

# レンダリングの実行と画像ファイルの出力
import bpy
bpy.context.scene.render.engine = 'CYCLES'
bpy.ops.render.render()
bpy.data.images['Render Result'].save_render(filepath='.\image.png')

システムパスの削除は前回エラーの対処としてスクリプトに追加しました。
レンダリングの際、レンダリングエンジンを 'CYCLES' に変更しているのは 'EEVEE' だとエラーが発生するためです。
以下のページを参考にしました。
qiita.com

RenderTest.py を保存したディレクトリを PowerShell で開き、以下のコマンドでスクリプトを実行します。
・(Pythonディレクトリ)\python.exe .\RenderTest.py
f:id:bluebirdofoz:20191003094513j:plain

以下の通り、レンダリング結果の画像が出力されれば成功です。
f:id:bluebirdofoz:20191003094542j:plain

アドオンの利用

更に Blender2.8 にアドオンを追加して利用する手順を試してみます。
今回は ifc ファイルを読み込んでレンダリングを行うスクリプトを作成します。
IfcOpenShell アドオンを利用します。アドオンについては以下の記事を参照ください。
bluebirdofoz.hatenablog.com

まずは利用する ifcBlender のアドオンをアドオン用ディレクトリ(Pythonディレクトリ/2.80/scripts/addons)にコピーします。
f:id:bluebirdofoz:20191003094553j:plain

次に ifc ファイルを読み込んでレンダリングを行うスクリプトを作成します。
組み込み Blender でアドオンを利用するには、起動時にユーザ設定でアドオンを有効にする必要があります。
・IFCRenderTest.py

# 不要なシステムパスの削除
import sys, os
pythonexedir=os.path.dirname(sys.executable)
del sys.path[5:]
sys.path.append(pythonexedir + '\\lib\\site-packages')
sys.path.append(pythonexedir + '\\lib\\site-packages\\blender')

# bpy インポート
import bpy

# ユーザ設定での IfcBlender アドオンの有効化
bpy.ops.preferences.addon_enable(module='io_import_scene_ifc')

# デフォルトの Cube を削除
bpy.data.objects.remove(bpy.data.objects['Cube'])

# ifcファイルの読み込み
bpy.ops.import_scene.ifc(filepath='.\CapTest2Grip.ifc')

# ifcファイルの大きさ調整
for item in bpy.data.objects:
  # 全メッシュオブジェクトを対象に処理を行う
  if item.type == 'MESH':
    # 大きさを15倍に設定する
    item.scale[0] = 15.0
    item.scale[1] = 15.0
    item.scale[2] = 15.0

# レンダリングの実行と画像ファイルの出力
bpy.context.scene.render.engine = 'CYCLES'
bpy.ops.render.render()
bpy.data.images['Render Result'].save_render(filepath='.\image.png')

RenderTest.py を保存したディレクトリを PowerShell で開き、以下のコマンドでスクリプトを実行します。
・(Pythonディレクトリ)\python.exe .\IFCRenderTest.py
f:id:bluebirdofoz:20191003094606j:plain

以下の通り、読み込まれた ifc ファイルのレンダリング結果の画像が出力されれば成功です。
f:id:bluebirdofoz:20191003094615j:plain

Blenderのビルド手順 その9(PythonモジュールへのBlender2.8の組み込み)

本日は Blender の技術調査です。
前回記事では Python モジュール向けの Blender2.8 をビルドすることができました。
今回は Blender を Ptyon のモジュールに組み込む手順を記事にします。
f:id:bluebirdofoz:20191002094004j:plain

前回記事の続きです。
bluebirdofoz.hatenablog.com

Pythonのインストール

blender 2.8 の場合、動作可能な Python のバージョンは Python 3.7 になります。
以下の公式ダウンロードページから 3.7.4 のバージョンを取得できます。
www.python.org
f:id:bluebirdofoz:20191002094032j:plain

OS指定などを行う場合は以下の各 OS 向けのダウンロードページを開き、任意のインストーラを選択します。
今回は Windows x86-64 executable installer を指定してダウンロードしました。
www.python.org
f:id:bluebirdofoz:20191002094052j:plain

ダウンロードした python-3.7.4-amd64.exe を実行してインストールを行います。
今回、Python のパスを通したくなかったので Customize installation を選択しました。
f:id:bluebirdofoz:20191002094101j:plain

ランチャー等も利用しないため[py launcher][for all users]のチェックを外して[Next]をクリックします。
f:id:bluebirdofoz:20191002094110j:plain

ショートカット、パスを利用しないので以下のチェックを外します。
・[Create shortcuts for installed applications]:OFF
・[Add Python to enviroment variables]:OFF
[Customize install location]に任意のディレクトリを指定して[Install]を実行します。
f:id:bluebirdofoz:20191002094121j:plain

これでまずは Python のインストールが完了しました。
f:id:bluebirdofoz:20191002094131j:plain

インストールディレクトリ上で PowerShell を起動し、[.\python.exe -V]を実行すると動作確認が行えます。
[Python 3.7.4]が表示されれば問題ありません。
f:id:bluebirdofoz:20191002094145j:plain

BlenderPythonへの組み込み

以下の手順でビルドした Blender バイナリ(bpyモジュール)を Python に組み込みます。

1.Python ディレクトリの Lib\site-packages 配下に blender ディレクトリを作成する。
f:id:bluebirdofoz:20191002094159j:plain

2.Lib\site-packages 配下に blender ディレクトリへのパスを記述する blender.pth ファイルを作成する。
f:id:bluebirdofoz:20191002094208j:plain

3.blender.pth ファイルに以下の通り、blender ディレクトリへのパスを記述する。

blender

f:id:bluebirdofoz:20191002094216j:plain

4.blender ディレクトリに bpy.pyd ファイルをコピーする。
f:id:bluebirdofoz:20191002094226j:plain

5.blender ディレクトリに pythonXX.dll 以外の *.dll ファイルをコピーする。
f:id:bluebirdofoz:20191002094236j:plain

6.バージョン番号(2.8)のディレクトリを Python ディレクトリの直下にコピーする。
f:id:bluebirdofoz:20191002094247j:plain

これで python への組み込みは完了です。

動作確認

Blender を組み込んだ Python ディレクトリの python.exe を起動し、以下のコマンドを実行してみます。

import bpy
print(bpy)

bpy.pyd の参照パスが表示されれば bpy のインポートに成功しています。

module 'bpy' from '(参照パス)\lib\site-packages\blender\bpy.pyd'

f:id:bluebirdofoz:20191002094301j:plain

エラー対処

筆者環境では幾つかのエラーが発生したのでそれぞれの対処方法を記録しておきます。

参照エラー

import bpy 実行時に以下のエラーが発生しました。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\OZ\AppData\Roaming\Python\Python37\site-packages\bpy\__init__.py", line 3, in <module>
    from . import types
  File "C:\Users\OZ\AppData\Roaming\Python\Python37\site-packages\bpy\types.py", line 39149
    def camera_model_matrix(self,
                           ^
SyntaxError: non-default argument follows default argument

f:id:bluebirdofoz:20191002094313j:plain

インストール済みの Python に優先的にパスが通っていることが原因です。
以下のコマンドを実行してデフォルトの sys.path を削除します。

import sys
print(sys.path)
sys.path.remove('デフォルトシステムパス')

f:id:bluebirdofoz:20191002094324j:plain

numpyインポートエラー

import bpy 実行時に以下のエラーが発生しました。

ImportError: numpy.core.multiarray failed to import
Unable to initialise audio
ImportError: numpy.core.multiarray failed to import

f:id:bluebirdofoz:20191002094333j:plain

import numpy を試してみると、numpy モジュールが見つからないことが原因と分かりました。
以下のコマンドを PowerShell 上で実行して Python に numpy をインストールします。

.\python.exe -m pip install -U numpy

f:id:bluebirdofoz:20191002094355j:plain

これで正常に bpy をインポートできました。
f:id:bluebirdofoz:20191002094410j:plain

次は組み込んだ Blender を試しに実行してみます。
bluebirdofoz.hatenablog.com

Blenderのビルド手順 その8(Pythonモジュール向けのBlender2.8のビルド)

本日は Blender の技術調査です。
前回記事ではバージョン 2.8 の Blender をビルドすることができました。
今回はビルド設定を変更し、BlenderPython のモジュールとしてビルドする手順を記事にします。
f:id:bluebirdofoz:20191001090839j:plain

前回記事の続きです。
bluebirdofoz.hatenablog.com

ビルド設定の変更

CMake にて[Configure]を実行するところまでの手順は同じです。前回記事を参照ください。
BlenderPython 用モジュールとしてビルドするには以下の設定を変更します。

WITH_OPENCOLLADA=OFF
WITH_PYTHON_INSTALL:OFF
WITH_PYTHON_MODULE:ON

この状態で[Generate]をクリックします。
f:id:bluebirdofoz:20191001090852j:plain

Generate が完了したら、[Generating done]が表示されます。
これでプロジェクトファイルの作成が完了しました。
f:id:bluebirdofoz:20191001090943j:plain

WITH_OPENCOLLADAの設定項目について

WITH_OPENCOLLADA の OFF について、2019/9/26現在、本項目が ON だとビルド時に以下のエラーが発生します。

6>xml.lib(threads.obj) : error LNK2005: DllMain は既に LIBCMT.lib(dll_dllmain_stub.obj) で定義されています。
6>   ライブラリ D:/WORK/BlenderBuild_Target2.8/buildforpython-2.80/lib/Release/bpy.lib とオブジェクト D:/WORK/BlenderBuild_Target2.8/buildforpython-2.80/lib/Release/bpy.exp を作成中
6>D:\WORK\BlenderBuild_Target2.8\buildforpython-2.80\bin\Release\bpy.pyd : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。

f:id:bluebirdofoz:20191001091001j:plain

Blenderのビルド

指定したバイナリの保存ディレクトリを開くと、sln ファイルが生成されています。
f:id:bluebirdofoz:20191001091021j:plain

sln ファイルを開き、プロジェクトの読み込みが完了するまで待ちます。
今回は Release ビルドを試してみます。[Debug]の欄を[Release]に変更します。
f:id:bluebirdofoz:20191001091030j:plain

メニューから ビルド -> ソリューションのビルド を実行します。
f:id:bluebirdofoz:20191001091041j:plain

ビルドが完了したら bin ディレクトリに bpy.pyd ファイルが出力されます。
f:id:bluebirdofoz:20191001091050j:plain

次に INSTALL をターゲットにビルドを実行します。
INSTALL は Blender.exe が利用する DLL などをコピーします。
SVN ライブラリを更新した際は必ずこの手順を行うようにします。
f:id:bluebirdofoz:20191001091101j:plain

bin ディレクトリに DLL がコピーされました。これでビルド成功です。
f:id:bluebirdofoz:20191001091110j:plain

次は作成した Blender のモジュール(bpy.pyd)を Python へ組み込んでみます。
bluebirdofoz.hatenablog.com

Blender2.8でifc形式のファイルを開く(Blender2.8向けIfcOpenShellアドオン)

本日は Blender2.8 の調査枠です。
Blender2.8 で ifc 形式のファイルを開く方法について記事にします。
f:id:bluebirdofoz:20190930091902j:plain

IfcOpenShellアドオン

今回は IfcOpenShell アドオンを利用します。
IfcOpenShell はオープンソースの ifc ツールキットで、Blender 向けの import アドオンが作成されています。
ifcopenshell.org
f:id:bluebirdofoz:20190930091918j:plain

上記のページには Blender2.78 向けまでのアドオンしか公開されていません。
Blender2.8 向けの IfcOpenShell アドオンを利用する場合は GitHub から最新のコードを取得する必要があります。
github.com

フォーラムにビルドをまとめたページがあったので今回はこちらを参照し、取得しました。
sourceforge.net
github.com
f:id:bluebirdofoz:20190930092003j:plain

アドオンのインストール

ダウンロードした ifcblender-python-37-v0.6.0-12e9f7b-win64.zip を展開します。
f:id:bluebirdofoz:20190930092014j:plain

解凍したディレクトリに含まれる io_import_scene_ifc ディレクトリがアドオンの本体になります。
これを Blender のアドオン用ディレクトリ(blender/2.80/scripts/addons)にコピーします。
f:id:bluebirdofoz:20190930092022j:plain

次にアドオンを有効化します。
Blender2.8 を起動し、[編集] -> [プリファレンス...]からBlenderプリファレンスダイアログを開きます。
f:id:bluebirdofoz:20190930092031j:plain

[アドオン]タブを開き、ifcBlender で検索すると[IfcBlender]のアドオンが表示されます。
f:id:bluebirdofoz:20190930092046j:plain

チェックボックスにチェックを入れて「ユーザー設定の保存」をクリックします。
これでアドオンが有効化されました。
f:id:bluebirdofoz:20190930092058j:plain

ifcファイルの読み込み

メニューから[ファイル] -> [インポート]を開き、[Industry Foundation Classes(.ifc)]を選択します。
f:id:bluebirdofoz:20190930092107j:plain

ファイル選択画面が開くので、ifc ファイルを指定して[import .ifc file]ボタンをクリックします。
f:id:bluebirdofoz:20190930092119j:plain

Blnder2.8 で ifc ファイルが読み込むことができました。
f:id:bluebirdofoz:20190930092129j:plain
大きなデータは読み込みに時間がかかります。

Blenderのビルド手順 その7(バージョン 2.8 のビルド)

本日は Blender の技術調査です。
Blender2.8 が正式公開されたので、バージョン 2.8 の Blenderソースコードからビルドする手順を記事にします。
今回は Blender2.8 のビルドについてです。
f:id:bluebirdofoz:20190929204049j:plain

前回記事の続きです。
bluebirdofoz.hatenablog.com

プロジェクトファイルの生成

CMake を起動します。
[Where is the source code:]に展開したソースコードディレクトリ(/blender-2.80)を指定します。
[Where to build the binaries:]にバイナリの保存ディレクトリを指定します。
この状態で[Configure]をクリックします。
f:id:bluebirdofoz:20190929204059j:plain

プロジェクト設定の選択画面が表示されます。
バージョン 2.8 のプロジェクトは Visual Studio 2017 Win64 を選択します。
Windows 64bit 環境での利用になるので platform に Win64 を指定しています。
(Win32 向けビルドを行う場合は 32bit 向けライブラリのダウンロードが必要です)
[Finish]をクリックします。
f:id:bluebirdofoz:20190929204108j:plain

Configure が完了したら、[Configureing done]が表示されます。
次に[Generate]をクリックします。
f:id:bluebirdofoz:20190929204120j:plain

Generate が完了したら、[Generating done]が表示されます。
これでプロジェクトファイルの作成が完了しました。
f:id:bluebirdofoz:20190929204130j:plain

Blenderのビルド

指定したバイナリの保存ディレクトリを開くと、sln ファイルが生成されています。
f:id:bluebirdofoz:20190929204139j:plain

sln ファイルを開き、プロジェクトの読み込みが完了するまで待ちます。
読込が完了したらメニューから ビルド -> ソリューションのビルド を実行します。
f:id:bluebirdofoz:20190929204150j:plain

ビルドが完了したら bin ディレクトリに exe ファイルが出力されます。
f:id:bluebirdofoz:20190929204231j:plain

次に INSTALL をターゲットにビルドを実行します。
INSTALL は Blender.exe が利用する DLL などをコピーします。
SVN ライブラリを更新した際は必ずこの手順を行うようにします。
f:id:bluebirdofoz:20190929204241j:plain

bin ディレクトリに DLL がコピーされました。
f:id:bluebirdofoz:20190929204253j:plain

blender.exe を実行して Blender が正常に起動すればビルドに成功しています。
f:id:bluebirdofoz:20190929204304j:plain

次は Blender2.8 を Python モジュールとしてビルドします。
bluebirdofoz.hatenablog.com

Blenderのビルド手順 その6(バージョン 2.8 のソースコード取得)

本日は Blender の技術調査です。
Blender2.8 が正式公開されたので、バージョン 2.8 の Blenderソースコードからビルドする手順を記事にします。
今回は Blender2.8 のソースコードを取得します。
f:id:bluebirdofoz:20190928193804j:plain

流れとしては以下の記事の続きになります。
bluebirdofoz.hatenablog.com

バージョン2.8のソースコードの取得

2019/9/26現在、公式のダウンロードページからバージョン 2.8 のソースコードをダウンロード可能です。
www.blender.org

[macOS, Linux, and other vesions]のプルダウンから[Source Code]をクリックします。
これでバージョン 2.8 で利用されているソースコードを取得できます。
f:id:bluebirdofoz:20190928193938j:plain

ダウンロードした tar.gz ファイルを解凍すると、blender-2.80 というディレクトリが展開されます。
これがソースコードディレクトリになります。
f:id:bluebirdofoz:20190928193947j:plain

GITからのバージョン2.8のソースコードの取得

上記のWebページからのダウンロードでビルドまで試したところ、欠損ファイルがあり、ビルド時に以下のエラーが発生しました。
f:id:bluebirdofoz:20190928193956j:plain

このため、今回は GIT からソースコードを取得することとしました。
GIT からソースコードを取得する方法は以下の記事を参照ください。
bluebirdofoz.hatenablog.com
f:id:bluebirdofoz:20190928194010j:plain

今回は切り替えで[v2.80-rc3]タグを選択してソースコードを取得しました。
f:id:bluebirdofoz:20190928194019j:plain

取得したソースコードblender-2.80 ディレクトリにコピーし直しました。
これがソースコードディレクトリになります。
f:id:bluebirdofoz:20190928194027j:plain

ライブラリの取得

ライブラリは SVN から取得する必要があります。
これでバージョン 2.79b のソースコードは 64bit 向けビルドの場合 lib\win64_vc14 のライブラリを参照します。
2019/9/26現在、lib\win64_vc14 のディレクトリは最新のリビジョンで取得できました。
筆者環境で利用したリビジョン番号は 62284 になります。
f:id:bluebirdofoz:20190928194036j:plain

最新リビジョンで取得できない場合は、チェックアウトで指定して取得します。
f:id:bluebirdofoz:20190928194045j:plain

ライブラリは CMake 実行時に[ソースコードディレクトリ/../lib/win64_vc14]の相対ディレクトリで参照されます。
このため、取得したライブラリはソースコードディレクトリと同階層に lib ディレクトリを作成し、その直下に配置します。
f:id:bluebirdofoz:20190928194056j:plain
f:id:bluebirdofoz:20190928194110j:plain

次は Blender2.8 のビルドを行います。
bluebirdofoz.hatenablog.com

Blender2.8のGUIからPythonの演算子やリファレンスを参照する

本日は Blender2.8 の調査枠です。
Blender2.8のGUIからPython演算子やリファレンスを参照するについて記事にします。
f:id:bluebirdofoz:20190927085325j:plain

Pythonツールチップを表示

Blender2.8 でマウスオーバーしたボタンの Python での演算子を確認するには[Pythonツールチップを表示]を有効にします。
メニューから 編集 -> プリファレンス を開きます。
f:id:bluebirdofoz:20190927085116j:plain

Blenderプリファレンスダイアログが開くので、[インターフェイス]タブを選択し、[表示]パネルを開きます。
[Pythonツールチップを表示]のチェックを入れます。
f:id:bluebirdofoz:20190927085126j:plain

これでマウスオーバーを行った際に Python での演算子が表示されるようになります。
f:id:bluebirdofoz:20190927085144j:plain

開発者用オプションを表示

Blender2.8 でボタンを右クリックした際に[PythonAPIリファレンス]への参照メニューなどを表示するには[開発者用オプション]を有効にします。
メニューから 編集 -> プリファレンス を開きます。
f:id:bluebirdofoz:20190927085154j:plain

Blenderプリファレンスダイアログが開くので、[インターフェイス]タブを選択し、[表示]パネルを開きます。
[開発者用オプション]のチェックを入れます。
f:id:bluebirdofoz:20190927085206j:plain

これでボタン上で右クリックを行った際に[Blender PythonAPI リファレンス]や[Pythonコマンドをコピー]が表示されるようになります。
f:id:bluebirdofoz:20190927085216j:plain

[Blender PythonAPI リファレンス]は引数なども確認できるため、ツールチップより詳しく調べたい場合に役立ちます。
f:id:bluebirdofoz:20190927085237j:plain