【Cygames Tech Conference フォローアップ】『プリンセスコネクト!Re:Dive』アニメ撮影におけるテクニカルアーティストの役割~最高のアニメRPGを作るための自動化制作事例~


こんにちは。デザイナー部テクニカルアーティストチームの横山です。
2021年11月13日~14日のCygames Tech Conferenceにおいて、「『プリンセスコネクト!Re:Dive』アニメ撮影におけるテクニカルアーティストの役割~最高のアニメRPGを作るための自動化制作事例~」と題して講演を行いました。
ご視聴・コメントして頂いた皆様、本当にありがとうございました。アーカイブを講演ごとに配信しているほか、スライドをSpeakerDeckで公開していますので、ぜひご覧ください。

アーカイブ配信はこちらになります。

講演スライドはこちらになります。

本稿では講演でお伝えし切れなかったことや、講演で紹介したことをもう少し詳細に紹介します。

セルへの画像処理のメリットについて

セルアニメーションのセルは2値化されているので、とても画像処理を行いやすい画像になっています。
しかしながら、セルの画像に対して画像処理を行っているところは少ない印象です。

理由としては、

  • 完全にデジタル移行しているところは仕上げや撮影のため、セル画像単体に対する意識がない。
  • セルはパーツとして来ることもあるため、一画像としては処理がしづらい。
  • 実際にどのような自動化を行えるか、イメージができていない。

などが挙げられます。

撮影では色ごとにマスク分けを行いますが、ひと手間画像処理のプログラムを通すだけで、その手順がとても楽になります。
講演でも紹介した通り、カラーモデルなど色の情報を取得することができれば、あらかじめ特定の色のマスクを作成するという手順を大幅に短縮することができます。
講演ではピンポイントのRGB値を取得していましたが、色トレスなど少ないながら予測できる色についても、画像処理で推測するといったことや、線だけを取得といったことも可能です。

ただ、線の取得などは作画のルールによっても影響を受けるので、作品ごとに異なることがあるのが難しいところです。
1~2ピクセル幅のどこまでを線として捉えるか、該当の色がキャラ処理の処理対象になっているかなど、なかなか汎用的なツールにはできなさそうです。

例えば、プリコネRの撮影ではAfter Effectsの画面で範囲を指定し、その範囲の色を取得するツールを使用しています。
これはカラーモデルが存在しないモブのキャラクターや料理などの小物の色を取得するために使用しています。

ExtendScript(Photoshop、After Effects)と画像処理の連携について

PhotoshopもAfter Effectsも、映像と静止画という違いはあるものの、共に画像を加工するためのソフトウェアです。
しかし共に多機能・高機能ではありますが、純粋な色の取得や切り取りといった加工だけなら別プログラムで書いて処理を渡したほうが高速にできます。
ExtendScriptは実行速度が遅いため、画像を書き出す場合も時間がかかります。
気を付けないと処理が追いつかず、次の処理が行われないこともよくあります。

プリコネRの画像処理にはDCCツールのスクリプトで採用が多いPythonを使用しています。
Pythonは画像処理のモジュールが充実していて、より踏み込んだ処理を行える利点があります。

After EffectsではExtendScriptから画像処理のプログラムを呼び出し、その返り値に色情報を持たせるなどを行っています。

var colorValues = system.callSystem(args);

返り値は文字列でしか取得できないので、渡す前後でエラーのないように加工する必要があります。
配列を文字列として返し、ExtendScript側で変換を行っています。

system.callSystem()は実行中にAfter Effectsの操作ができないため、処理時間が遅いとツールを使用するか迷ってしまうかもしれません。
system.callSystem()を使用しない場合は、別ファイルに保存するのも有効でしょう。

講演で紹介したPhotoshopの差分切り取りツールはPythonを実行するためにbatファイルを作成しています。

Photoshopで範囲を選択すると、その範囲座標情報を取得できるので、その差分チェック座標をbatファイルに書き出しています。
一時的に別ファイルにデータを書き出し、その情報をもとに次の処理を行うという2段階に分かれているパターンです。

var batFile = new File(batFileName);
batFile.open("w");
batFile.writeln(PYTHON_FILE_PATH + ' "' + folderPath + '" ' + cropPosition.join(" ") + " 0 " + skipFrame + " " + margin);
batFile.close();
batFile.execute();

Pythonで画像を加工した後、その画像を読み込むExtendScriptファイルも同時に出力し、ボタンをクリックすることでそのExtendScriptを実行し読み込みを行っています。

手順としては以下の通りです。

  1. 指定した範囲をExtendScriptツールで取得し、「差分切り取りを行うPythonツールに渡すbatファイル」を生成
  2. Pythonツールで差分を切り取り、次の手順で実行する「差分読み込みExtendScriptファイル」と差分画像を別に保存
  3. 元のExtendScriptツールから、前手順で書き出した「差分読み込みExtendScriptファイル」を実行

ところで、この差分切り取りツールですが、実はただ単に差分をチェックするだけだとノイズによって、うまく差分を取得することができませんでした。
というのも、アニメの手法として空気中のチリやホコリ・大気を表現するために、薄くノイズを入れることがあるためです。
このツールの場合は一度ブラーをかけてノイズを減らすようにしています。その後、作品のノイズに合わせて閾値を設定して差分のチェックをしています。

このように、PhotoshopやAfter Effectsのツールでスクリプト単体では不可能な処理をbatファイルと組み合わせることで実現できます。
これらのツール以外にも、社内では多数のPhotoshopやAfter Effectsのツールを作成して、少しでも作業の手順を少なくできるようにしています。

カラーボックスの取得について

スライド55ページの使用カラーボックス一覧で、他のパターンについて紹介します。


0_3_0の画像は1_3_0のハイライト部分がないものです。

この画像もハイライト部分の小さなボックスの左端があるかどうかの判別に1ピクセル拡張しています。

1_3_1の画像は画像サイズ的には1_3_0と同じですが影中ハイライトのボックスで判断を行っています。

0_1_1や1_3_1、1_4_2のボックスが途切れているボックスに関しては、ボックスから伸びる線がテンプレートマッチングの際に誤検知しないようにわざと右端を見切れているようにしています。

下記の画像のような場合、右についている小さいボックスの下から線が出ています。

小さいボックスのはみ出た部分まで検出するようにしていると、この下の線が出ているときに完全一致にならないことになります。
そのため、上記の3つのボックスでは、右端をカットしたテンプレートを使用しています。
2値の画像になっているため、画像処理はしやすいですが、このように完全一致で判定しているので、線が出るところに注意しなければなりません。
カラーボックスについては作品によって異なると思いますので、調整する際はカラーボックスに合わせたテンプレートを用意する必要があるでしょう。

おわりに

今回の講演ではAfter Effects関係のツールが多かったですが、Photoshopのツールや画像処理単体のツールも多く作成しています。
サイマガではテクニカルアーティストの仕事についての記事もありますので、ぜひこちらもご覧ください。

テクニカルアーティストの仕事とは?開発陣のクリエイティビティーを最大化する環境づくりに必要なこと【サイゲームス仕事百科】

ゲーム制作では大量の画像を素早く一括で処理を行う必要があるため、専用のコマンドラインツールの方が小回りも聞いて便利なことがあります。
アニメ制作でも、今回紹介したセルに対しての処理に加え、背景やコンテなどの制作に画像処理を導入し効率化を図れる部分が数多くあると思います。
今回の講演やこのフォローアップ記事が、参考になると幸いです。