Substance Painterのレイヤー付きPSDエクスポートを、Photoshop無しでやる方法
2024/05/03 追記
takecccc氏作のpythonプラグインを追記しました。
kritaもPhotoshopも不要なうえ、Macでも動くのでオススメです。
1. はじめに
Substance Painter(以下、SPと記述)には、レイヤー付きのPSDをエクスポートする機能が標準で付いていますが、Photoshopが必要です。
調べたところ、Happyrobot33氏、takecccc氏作がそれぞれPhotoshopを介せずレイヤー付きPDFをエクスポートできるプラグインを公開してくれていました。
それぞれについて、導入した際の備忘録を残します。
2. Kritaでエクスポートする方法
(Happyrobot33氏)
※Mac派には、後述するtakecccc氏のプラグインがオススメです
【環境】
Windows 11 pro 64bit
Substance Painter 2023 9.1.2 (steam edition)
krita-x64-5.2.2
Happyrobot33氏のサイトから、 zipファイルをダウンロードする。
(緑色の code → Download Zip)
https://github.com/Happyrobot33/painter-plugin-KRITA-tools
SPを起動し、javascript → Plugin Folder をクリック。
開かれたフォルダ内にダウンロードしたzipを解凍する。
C:\Users\tomato\Documents\Adobe\Adobe Substance 3D Painter\plugins
SPを再起動してスクリプトを読み込む。
javascript → painter-plugin-KRITA-tools-master → configure から設定画面を開く。kritarunnner.exeのパスを指定して、saveをクリックする。
C:\Program Files\Krita (x64)\bin\runner.exe
SPを再起動し、テクスチャをエクスポートしたいsppファイルを開く。
左側のアイコンから「Export to Krita」をクリック。
エクスポートしたいテクスチャを選択して、OKをクリック。
すると、「runnner.pyが書き込めない」旨のエラーが表示され、止まってしまう。
これは、kritarunnerフォルダが存在しないことが原因なので、手動でkritarunnerフォルダを作成する。
C:/Users/tomato/AppData/Roaming/kritarunner/
再度Export to Kritaを動かすと、kritarunnerフォルダ内にrunner.pyが生成され、sppと同じフォルダに各レイヤーのPNGがエクスポートされる。
一方、レイヤー構造を保持したファイルはエクスポートされていない。
これは、runner.pyがkrita内で正常に動作していないことが原因だった。
(krita側の問題なので、SP側ではエラーメッセージは生じない。)
Kritaを起動して、ツール → スクリプト → スクリプターをクリックし、runner.pyを動かしてみる。
すると、PILというモジュールが見つらないことがわかる。
(PIL;Pythonの画像処理ライブラリであるPillowのこと。)
通常、pillowはpipコマンドでインストールできるが、Krita内のPythonでは単純にインストールすることはできない。
下記サイトによると、「Windows上のpythonでpillowをインストールした後、ファイルをKrita内部のpythonにコピペすればよい」とのことだった。
https://krita-artists.org/t/how-to-import-numpy-package-into-my-plugin/53119
Windowsには、Kritaと同じバージョンのpythonをインストールする必要があるので、printコマンドでKrita内のpythonのバージョンを調べる。
Krita 5.2.2は、python 3.10.7を使っていることがわかった。
pythonの公式サイトから、python-3.10.7-amd64.exeをダウンロードし、「Add python 3.10 to PATH」にチェックを入れてインストール。
https://www.python.org/downloads/windows/
コマンドプロンプトを起動し、pillowをインストール。
python -m pip install pillow
Windowsのpythonにインストールしたpillowを、krita内のpythonにコピーする。
【コピー元】
C:\Users\tomato\AppData\Local\Programs\Python\Python310\Lib\site-packages
【コピー先】
C:\Program Files\Krita (x64)\share\krita\pykrita
再度SPを開き、Export Kritaを動かすと、sppと同じフォルダ内にレイヤーを保持したkraファイル(=kritaの独自形式)がエクスポートされる。
このkraファイルをKritaで開き直して、PSD形式で保存し直せばOK!
以上。
3. SPのみでエクスポートする方法
(takecccc氏)
takecccc氏が、レイヤー付きのPSDを直接エクスポートできるpythonプラグインを公開してくれています。こちらはkritaもPhotoshopも不要な上、Macでも動作しました。
このプラグインには、導入用にsetup.batが準備されています。しかし、SPのバージョンが古くパスの修正が必要なこと、Macだとbatファイルを動かせないことから、今回はsetup.batは用いず、手動で導入しました。
その備忘録を残します。
【環境】
Windows 11 pro 64bit
Substance Painter 2023 9.1.2 (steam edition)
Macbook Air M1 8GB
MacOS sonoma
Substance Painter 2023 9.1.2 (steam edition)
※説明はWindows用に記述します。適宜Mac用に読み替えてください。
takeccc氏のサイトから、zipファイルをダウンロードする。
(緑色の code → Download Zip)
https://github.com/takecccc/export-multilayer-psd
Substance Painter(以下、SPと記述)を起動し、python → Plugin Folder をクリック。
「module」「plugins」「startup」と3つフォルダがあるので、更にpluginsフォルダを開き、その中にダウンロードしたzipを解凍する。
C:\Users\tomato\Documents\Adobe\Adobe Substance 3D Painter\python\plugins
zipファイル内のsetup.batを確認したところ、requirement.txtに列挙されたライブラリが必要なことがわかる。
通常、これらはpipコマンドでインストールできるが、SP内のpythonでpipを使う方法がわからなかったので、Kritaの時と同様、Windowsのpythonでインストールしたライブラリを、SPにコピペすることにした。
まずは、SP内のpythonのバージョンを確認する。
SPを起動し、Window → Views → python consoleをクリック。
下記のコマンドを入力したところ、python 3.9.9を使っていることがわかった。
import sys
print(sys.version)
//SP内のpythonのバージョンが表示される。
3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50) [MSC v.1929 64 bit (AMD64)]
次に、Windowsのpythonで、必要なライブラリをインストールする。
今後、pythonのバージョンを使い分ける可能性があると考え、次のサイトを参考にpyenvをインストールした。
https://note.com/bhrtaym/n/nc8ea8b14216e
コマンドプロンプトを起動し、pyenvを使ってpython3.9.9をインストールした後、requirement.txtに記載されたライブラリをインストールした。
//pyenvに3.9.9をインストールする。
pyenv install 3.9.9
//3.9.9を有効にする。
pyenv global 3.9.9
//requirement.txtに記載された5つのソフトをインストールする。※
//このときにnumpyもインストールされる。
python -m pip install pillow
python -m pip install wheel
python -m pip install Cython
python -m pip install six
python -m pip install pytoshop
//※windowsでは、pytoshopのインストール時に、
//「Microsoft Visual C++ 14.0以上のビルドツールが必要」というエラーが出た。
//このエラーは次のサイトを参考に対処した。
//https://mebee.info/2020/07/18/post-13597/
インストールしたライブラリの保存場所を、次のコマンドで確認した。
//インストール先を確認する。
python -c "import site;print(site.getsitepackages())"
['C:\\Users\\tomato\\.pyenv\\pyenv-win\\versions\\3.9.9', 'C:\\Users\\tomato\\.pyenv\\pyenv-win\\versions\\3.9.9\\lib\\site-packages']
WindowsのPythonにインストールしたファイルを、SP内のpythonのプラグインフォルダにコピペした。
【コピペ元】
C:\Users\tomato.pyenv\pyenv-win\versions\3.9.9\Lib\site-packages
【コピペ先】
C:\Users\tomato\Documents\Adobe\Adobe Substance 3D Painter\python\plugins
SPを再起動した後、python → export-multilayer-psd-mainをクリックしてプラグインを有効にする。
File → export as multilayer psd をクリックし、出力したいテクスチャを選択し、padding設定等を適宜修正してエクスポートすると、レイヤー付きのPSDが出力される。
(注)エクスポートされたPSDは、kritaだとマスクを正常に読み込めない場合があった。その場合は、クリスタやgimpで保存し直すと、kritaでも正常に開けるようになった。
以上。
4. 感想
導入は大変ですが、レイヤー構造を保ったPSDをエクスポートできるのは役立ちそうです。SPで荒塗りして、クリスタでディティールを書き込むワークフローなら便利かなーと思います。
なによりPhotoshop不要なので、アマチュアの財布に優しい。。。
作者であるHappyrobot33氏、takecccc氏に感謝すると共に、このメモが誰かの役に立てばいいなと思います。
5. その他補足
標準のPhotoshopを用いたPSDエクスポートでは、Happyrobot33氏のプラグインと同様に、png出力→psd結合というフローを取っているようです。(移植版だから当然か?)
レイヤーの合成モードや色空間の関係で、エクスポートしたPSDがSPと同じ見た目にならない場合があるようです。これは、Photoshopを用いて出力する場合でも生じるようです。
https://summering26.com/substancepainter-export-to-photoshop/
6. メモ
Happyrobot33氏のプラグイン(=Krita Export)は、MacだとKritaとの連携ができず、動かせませんでした。
メモだけ残します。(2024年5月2日)
main.qml及びKrita.jsの、kritarunnerFolderのパスを適宜修正した
main.qml 27行目
//check if kritarunner folder exists
var appdata = StandardPaths.standardLocations(StandardPaths.HomeLocation)[0];
//remove file:///
appdata = appdata.substring(8);
var kritarunnerFolder = appdata + "/kritarunner";
if (!alg.fileIO.exists(kritarunnerFolder)) {
alg.log.info("Running Kritarunner for the first time");
alg.subprocess.startDetached(["\"" + alg.settings.value("kritaPath") + "\"", "-s", "runner"]);
}
}
krita.js 425行目
try{
var appdata = StandardPaths.standardLocations(StandardPaths.HomeLocation)[0];
//remove file:///
appdata = appdata.substring(8);
var kritarunnerFolder = appdata + "/kritarunner";
var scriptFile = alg.fileIO.open(kritarunnerFolder + "/runner.py", 'w');
scriptFile.write(this.kritaScript);
scriptFile.close();
} catch (error) {
alg.log.error(error.message);
return;
}
pyenvでkritaと同じpython 3.10.7を導入し、pillowをインストール。
site-packagesの場所を確認し、pillowの保存先を確認する。
pyenv install 3.10.7
pyenv global 3.10.7
python -m pip install pillow
python -c "import site;print(site.getsitepackages())"
['/Users/tomato/.pyenv/versions/3.10.7/lib/python3.10/site-packages']
MacOSのpythonにインストールしたpillowを、krita内のpythonにコピーする。
【コピー元】
/Users/tomato/.pyenv/versions/3.10.7/lib/python3.10/site-packages
【コピー先】
/Applications/krita.app/Contents/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages
SPを起動し、javascript → painter-plugin-KRITA-tools-master → configure から設定画面を開き、kritarunnerのpathを指定したいが、krita.app内にあり指定できない。そのため、setting.iniを直接修正した。
[General]
KritaPath=/Applications/krita.app/Contents/MacOS/kritarunner
krita to Exportを動かしてみると、runner.pyと各レイヤーのpngは生成されるが、kritarunnerにrunner.pyが受け渡せていない。
kritaのスクリプターから直接runner.pyを動かしても、1つ目のPSDを出力した後、kritaが落ちてしまう症状が発生した。(≒複数のテクスチャを同時に出力することができない。)
これ以上は修正できそうになかったので、諦めた。
この記事が気に入ったらサポートをしてみませんか?