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

導入したプラグインの設定画面を開く
kritarunnner.exeを指定する(krita.exeと同じフォルダにある)


 SPを再起動し、テクスチャをエクスポートしたいsppファイルを開く。
左側のアイコンから「Export to Krita」をクリック。
 エクスポートしたいテクスチャを選択して、OKをクリック。
 すると、「runnner.pyが書き込めない」旨のエラーが表示され、止まってしまう。

左側のアイコンからExport to Kritaをクリック
エクスポートしたいテクスチャを選んで、OKをクリック
runnner.pyを書き込めない旨表示される。


 これは、kritarunnerフォルダが存在しないことが原因なので、手動でkritarunnerフォルダを作成する。

C:/Users/tomato/AppData/Roaming/kritarunner/

指定された場所に、kritarunnerフォルダを作成する。


 再度Export to Kritaを動かすと、kritarunnerフォルダ内にrunner.pyが生成され、sppと同じフォルダに各レイヤーのPNGがエクスポートされる。
 一方、レイヤー構造を保持したファイルはエクスポートされていない。

 これは、runner.pyがkrita内で正常に動作していないことが原因だった。
(krita側の問題なので、SP側ではエラーメッセージは生じない。)

runner.pyは出力できている。
各レイヤーのPNGは出力されるが、Kritaが動いていないので、まとめられていない。
SPのログウィンドウには、エラーが表示されていない。
(※残りの2プログレスはKrita側の処理)

 

 Kritaを起動して、ツール → スクリプト → スクリプターをクリックし、runner.pyを動かしてみる。
 すると、PILというモジュールが見つらないことがわかる。
(PIL;Pythonの画像処理ライブラリであるPillowのこと。)

スクリプターを起動して、runner.pyを読み込む
エラー:ModuleNotFoundError: No module named 'PIL'


 通常、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を使っていることがわかった。

print(sys.version)で調べられる

 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
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

PILとpillow-10.3.0.dist-infoをコピぺした


 再度SPを開き、Export Kritaを動かすと、sppと同じフォルダ内にレイヤーを保持したkraファイル(=kritaの独自形式)がエクスポートされる。
 このkraファイルをKritaで開き直して、PSD形式で保存し直せばOK!

Export Kritaを動かすと、SPから各レイヤーのPNGがエクスポートされ…
その後、runnner.pyに基づいてKritaが走り、結合される。
エクスポートされたKraファイル
Kraファイルを開くと、レイヤー構造が保持されていることがわかる(左側)
作者いわく、合成モードやフィルターは、可能な限り最適なものが選ばれるらしい
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

SPのpythonプラグインフォルダを開く
更にpluginsフォルダを開き、zipファイルの中身を解凍する。

 zipファイル内のsetup.batを確認したところ、requirement.txtに列挙されたライブラリが必要なことがわかる。
 通常、これらはpipコマンドでインストールできるが、SP内のpythonでpipを使う方法がわからなかったので、Kritaの時と同様、Windowsのpythonでインストールしたライブラリを、SPにコピペすることにした。

 まずは、SP内のpythonのバージョンを確認する。
 SPを起動し、Window → Views → python consoleをクリック。

Pythin 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でも正常に開けるようになった。

クリスタで開いた場合(正常)
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が落ちてしまう症状が発生した。(≒複数のテクスチャを同時に出力することができない。)
 これ以上は修正できそうになかったので、諦めた。


この記事が気に入ったらサポートをしてみませんか?