Search Unity

Unity ArtEngineと他のソフトウェアをつないでみよう

  • ArtEngine

<このページで学べる内容>

Unity ArtEngineのExternal Executionノードを用いて外部のソフトウェアと連携し、ArtEngineの可能性を拡げる方法をご紹介します。

Unity ArtEngineはマテリアル・テクスチャオーサリングソフトです。 サンプルベースのワークフローのアイデアにもとづいて、入力した画像からエディター上でノードをつなぎ合わせることで目的のアセットを制作します。

ArtEngineのAI機能を用いて、1枚のテクスチャから複数の成分を持つPBR用マテリアルを生成したり、自動で画像のシームや余分な成分を取り除いて自然なリピートテクスチャを作ったり、入力画像とはまったく別のテクスチャを作ることができます。

一方で、ArtEngineは画像に対する小回りの効く作業が得意ではありません。たとえば、画像の特定のカラーチャンネルを編集することができません。また、ArtEngineは仕様で決められたフォーマットの画像しか入力できないため、DNG形式のようなRAW画像をそのままArtEngineのワークフローに乗せることはできません。

そのような要求を実現するため、ArtEngineにはExternal Executionノードが用意されています。このノードを使うことで、ArtEngineに不足している機能を外部ソフトウェアの力に頼ることで補うことができます。

External Executionノード

ノード設定

External Executionノードは、Unity ArtEngineの外でプログラムを実行し、その出力結果をビットマップとして他ノードのInputへ接続できます。 Windowsのコマンドプロンプトで実行可能なプログラムであれば、どんなコマンドでも実行できます。

本記事執筆時点(2021.13.1)では、本ノードが入出力で扱えるファイルフォーマットはPNG形式のみとなります。(他のフォーマットにも今後対応予定)

Command String任意のカスタムコマンドを記入できます。
Input Connections入力ビットマップのプロパティをスライダーで0~10の範囲で指定します。プロパティ名はInput1, Input2, Input3, ...、という具合に固定となります。
Output Connections出力ビットマップのプロパティをスライダーで0~10の範囲で指定します。プロパティ名は任意の名前にできます。
Max execution time limitノードを実行した際のタイムアウト時間を指定します。
Display Command Terminalノードを実行した際にターミナルを表示します。カスタムコマンドの標準出力・エラーを確認できます。
Pause on Completionカスタムコマンドをの処理が終了した際にターミナルを閉じないようにします。カスタムコマンドをのデバッグに便利です。

トークン

Command Stringフィールドでは、$シンボルを使って任意のパラメーターのほか、Input/Outputプロパティ名や作業用一時ディレクトリをトークンとして表現でき、変数のように扱うことができます。

Command Stringフィールドに$fooと入力すると、そのトークン名と対応する値の入力フィールドが表示されます。トークンは何個でも追加できます。

Outputプロパティ名は、たとえば$Output1といった具合にそのままトークンとしてCommand Stringの中で使用できます。

一方、予約字句のため利用に注意が必要なトークンあります。たとえば、Inputプロパティ名を表すトークン($Input1, $Input2,...)は自動で作られるため、同じ名前のトークンを使うことができません。

$Dirも同じく予約トークンで、External Executionノードの作業ディレクトリ(%TEMP%\.artomatix)を表します。本ノードと作業ディレクトリは次の関係になっています。

  • Inputプロパティに接続されたファイルは、このディレクトリに一時的に保存されます
  • Outputプロパティは、このディレクトリに存在し、かつプロパティ名と一致した名前(拡張子除く)を持つファイルを参照します

次からは、具体的なユースケースに基づいてExternal Executionノードの活用方法を解説します。

カラーチャンネルを編集する

テクスチャのアルファチャンネルに情報を格納しなければならない場面は数多くあります。たとえばアルファチャンネルに格納されたマスクを利用し、不透明度や陰影、自己発光の処理をシェーダーで行うケースです。

Unity ArtEngineにはテクスチャのカラーチャンネルを編集する機能はありませんが、External Executionノードを使ってImageMagickのような画像編集ツールと連携し、これを実現できます。

今回は、とある場所で撮影した地面の画像(RGB)から、落ち葉部分のマスクを作り、それを元の画像のアルファチャンネルへ格納した画像(RGBA)を作ることを目指します。また、事前にImageMagickのインストールが必要です。

ArtEngineで画像から特定の部分を自動で選択してマスクを作るには、Feature Selectorノードを使います。詳しくはマニュアルをご覧ください。

元画像をExternal ExecutionノードのInput1へ、マスク画像(Segmentation2)をExternal ExecutionノードのInput2へ、それぞれ接続します。そして、ImageMagickの操作コマンドをCommand Stringに記述し、それに伴ってトークンにも必要な値を入力します。

ImageMagickのオプションに関する詳細はドキュメントをご覧ください。

Command String$Convert $Input1 $Input2 $Options $Output1
$ConvertImageMagickの"convert.exe"の絶対パス
$Options-alpha Off -compose copy-opacity -composite

これで準備が整いました。トークンを使えば、冗長になりがちなコマンドもシンプルにまとめることができます。

この状態でExternal Executionノードを実行すれば、外部のImageMagickが実行され、元画像のAチャンネルにマスク画像の格納されたテクスチャが生成されます。

なお、結果をビットマップとしてディスクに保存するには、External ExecutionノードのOutput1をOutputノードに接続し、そのノードからエクスポートします。

RAW現像ワークフローと統合する

本記事執筆時点(2021.13.1)では、Unity ArtEngineはRAW画像の直接読み込みは対応していません。そのため画像を一度別のフォーマットに現像する必要があります。

一般的に、被写体の撮影時に情報量の多いRAW形式で保存し、後から現像ソフトでホワイトバランスや露光を調整することが行われます。このRAW現像のワークフローをArtEngineに統合できれば、現像とArtEngineへの取り込みを自動化でき、画像編集のイテレーションを加速させることができます。

今回は、OSSのRAW現像ソフトRawTherapeeを用いてRAW画像の種類の1つであるDNG形式の画像編集ワークフローと、ArtEngineの統合を目指します。別途RawTherapeeのインストールが必要です。

まずRawTherapeeでDNG画像を編集します。RawTherapeeはサイドカーファイル(*.pp3)と呼ばれる処理プロファイルを、開いているファイルと同じパスに作成します。

次にArtEngineでExternal Executionノードを作り、Input Connectionsを0にします。カスタムコマンドから直接ファイルを入力することになるので、本ノードがある意味でInputの役割になるためです。Output Connectionsは1とし、これをExportノードに接続します。

下記の通りカスタムコマンドを記述します。RawTherapeeにはCLI用のプログラム(rawtherapee-cli.exe)が用意されているのでそちらを利用します。RawTherapeeのCLIオプションはこちらから確認してください。

Command String$Rawtherapee -o $Output1 $Options -c $Raw
$RawtherapeeRawtherapeeの"rawtherapee-cli.exe"の絶対パス
$Options-s -n -Y
$RawDNGファイルの絶対パス

External Executionノードを実行すると、DNG形式の画像がRawtherapeeによって8ビット/チャンネルのPNG形式の画像に変換され、ArtEngineに読み込まれます。またRawtherapeeに戻って作業しても、再びExternal Executionノードを実行すればRawtherapeeとArtEngine側とで常に最新の状態のビットマップで作業できます。

Unity ArtEngineで無限に広がる可能性

Unity ArtEngineのExternal Executionノードは、CLIで呼び出せるあらゆるプログラムを実行できます。

今回ご紹介した以外にも、MinGW・WSL・コンテナー上のプログラムも実行できます。また、ArtEngine Pro以上でお使いになれるバッチ機能、ArtEngine Studioでお使いになられるCLI機能を組み合わせれば、大量のファイルも一括で自動処理ができます。詳しくはプランの比較をご覧ください。

強力なテクスチャ・マテリアル制作ツールのArtEngineと外部のプログラムを組み合わせ、創造性を無限に広げましょう。

Unity ArtEngineはこちらから無料でトライアルができます。

この記事はいかがでしたか?