2016年11月10日木曜日

BlenderからPhotoshopを制御1-Blender-PyhtonとPhotoshop-JavaScriptについて


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の方が情報が多かったり扱いやすいです)




今回はデスクトップに 中継ソフトの 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から情報を引数で受け渡して処理をかえることもできます
それは今後の記事で書いていきたいと思います

1 件のコメント:

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

    返信削除