3Dソフトと Photoshop等と連携してより効率的に作業するためのメモ
同じようなやり方でMacOSXでもできますが 今回はWindows環境での話
3Dソフトのレンダリング結果をPhotoshopの画像処理に利用したり
UVテクスチャを作画したりしていると、よりシームレスに作業できればと感じることが多々あります。
PhotoshopはJavaScript等を使って色々な処理を追加できるので、
Blenderの自動処理言語でもあるPythonを使った連携を考えます
どうやってjavascriptを実行するのか?
Pythonではsubprocessモジュールを使えば
コマンドプロンプトで実行するように他のプログラムを実行させたりできます
これでjavascriptをBlenderから直接実行できればいいのですが 色々と問題がありうまくいきません
そこで、一旦VBScriptの中継ソフトを介してしてJavaScriptを実行することにします
今回作成するのは実行したいJavaScriptのファイルパスをPhotoshopに受け渡すだけのシンプルなものです
この中継ソフトをVB_Hubと名づけることにします。
(実はPhotoshopはVBScriptでも操作ができるのですが、JavaScriptの方が情報が多かったり扱いやすいです)
そこで、一旦VBScriptの中継ソフトを介してしてJavaScriptを実行することにします
今回作成するのは実行したいJavaScriptのファイルパスをPhotoshopに受け渡すだけのシンプルなものです
この中継ソフトをVB_Hubと名づけることにします。
(実はPhotoshopはVBScriptでも操作ができるのですが、JavaScriptの方が情報が多かったり扱いやすいです)
今回はデスクトップに 中継ソフトの VB_Hub.vbs テスト用のJavaScriptのtest.jsx を置いて
それを実行してみます
デスクトップにVB_Hub.vbsとtest.jsxという名前でテキストファイルを作成して下記のコードをそれぞれに保存し
Photoshopを起動して空白の書類を開いておいてください
VB_Hub.vbs
Option Explicit
'コマンドライン引数の取得
Dim oParam
Set oParam = WScript.Arguments
'実行するアプリケーションとしてPhotoshopを指定
Dim objApp
Set objApp = CreateObject("Photoshop.Application")
''スクリプトの実行
objApp.DoJavaScriptFile oParam(0)
var active_doc = activeDocument //レイヤの作成 active_doc.artLayers.add()
JavaScriptはPhotoshopで開いている書類に新しいレイヤを作る簡単なものです
最後にBlenderのテキストエディッタに下記コードをコピペしてスクリプト実行をします
import subprocess
import os
#デスクトップフォルダのパス
desktop_path = os.getenv("HOMEDRIVE") + os.getenv("HOMEPATH") + "\\Desktop"
#実行するjavascriptのファイル名
js_name = "test.jsx"
#ファイルパスを実行するOSの形式で取得
js_path = os.path.normcase( os.path.join(desktop_path,js_name) )
VB_Hub = os.path.normcase( os.path.join(desktop_path,"VB_Hub.vbs") )
#VBScript経由でjavascriptを実行
subprocess.call([ "CScript",VB_Hub, js_path, "//nologo" ])
うまく新しいレイヤが作成されたでしょうか
今回は単純にJavaScriptを実行しただけですが
BlenderのPyhtonから情報を引数で受け渡して処理をかえることもできます
それは今後の記事で書いていきたいと思います

windows7の環境だとVB_Hub.vbsをvb_hub.vbsと小文字にしないと動作しませんでした。それでうまくいきました!
返信削除