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