PlasticSCM(Unity Version Control)管理の3DモデルをMaya上で手軽に差分比較する
はじめに
株式会社QualiArtsでTA(テクニカルアーティスト)をしている見原です。
本稿はQualiArts Advent Calendar 2022の21日目の記事です。
以前「PlasticSCMでUnityアセットをバージョン管理する」と題して弊社のPlasticSCM(UnityVCS)の利用方法を紹介しましたが、今回はここで紹介しきれなかった活用方法についてご紹介します。
PlasticSCMにおける過去バージョンとの比較
前回の記事でも紹介したGluonには標準で差分の比較機能がついており、簡単にバージョンごとの比較ができます。 とりわけ画像の比較は優秀で、以下のようにさまざまな方法で比較できます。
しかし、こと3DとなるとやはりDCCツールやゲームエンジン上での比較が必要になってきます。 モデルに関して言えば、MayaシーンやFBXだけではなく、そこに付随するテクスチャもセットで状態確認をしたくなります。 そこで、Maya上で簡単にモデルとテクスチャをセットでバージョンごとの比較ができるツールを作成しました。
Mayaツールの紹介
まずはMayaシーンを指定し、比較したいバージョンをダウンロードします。
GUIで対象の変更セットをチェックするだけで簡単にMayaシーンと関連するテクスチャがダウンロードされる形になっています。
次に比較したいバージョンを選択して実行すると、各バージョンのモデルが読み込まれ、スライダー操作で簡単に表示の切替が行われます。
こちらはサンプルですが、モデルとテクスチャが切り替わっている様子がわかるかと思います。
ツール実装
PlasticSCMにはREST APIも存在しますが、今回は単純にsubprocessでcmコマンドを叩く形としました。
まずは以下のようにワークスペースを作成し、分散モードでブランチを指定します。
cm workspace create $workspace_name $workspace_path --repository="$repository"
cm partial switch br:$branch
次にダウンロード対象を必要なところだけに絞ります。 今回のケースでは対象のMayaシーンとテクスチャが格納されたディレクトリのみに絞ってダウンロードを実行します。
cm partial configure $rule
$rule
は +mdl/test -mdl/test/sourceimages/psd
のような形式で指定します。
このようにすると mdl/test
以下がダウンロードされますが、その中にある mdl/test/sourceimages/psd
は除外されます。
ただし、このとき mdl/test/sourceimages/psd
が存在しない場合はエラーとなってしまいます。
以下のように ls
コマンドを使用すれば特定の変更セットにおけるディレクトリ状態を取得できるので、除外対象が存在するときだけ指定する形にすると安全です。
cm ls $path --tree=$changeset@$repository
これで指定した変更セットのモデルとテクスチャをローカルにダウンロードすることができました。 このままだとMayaシーンは最新のテクスチャパスを参照し続けてしまうので、ダウンロードしたシーンを自動で開いてテクスチャパスを対象の変更セットのものに差し替えます。
ひとまずこれで複数バージョンのモデルがローカルにある状態を作れましたが、同じモデルの別のバージョンをダウンロードしたいとなったとき、同じワークスペースを利用するとワークスペース自体の変更セットが切り替わってしまいますし、別のワークスペースを作ると無限にワークスペースが増え続け、Gluon自体の使い勝手が損なわれてしまいそうです。
ツールの設計上このように作成したワークスペースに対して再度コマンドを発行することは二度とないので、ダウンロード先は一時的なディレクトリとした上で、別途このツールで管理するための専用のディレクトリを用意し、そこに変更セットごとのディレクトリを作成して必要なものだけ移動してしまいます。
移動が完了したらワークスペースである一時的なディレクトリを削除して完了です。
ツールは画像でいうところのアーカイブ用ディレクトリを参照し、この {変更セット}
のディレクトリを比較対象の選択肢として表示する形になります。
ちなみにそもそもの比較対象の変更セットリストの取得ですが、Gluon上ではファイル単位でしか確認できないと前回の記事でも書きました。 今回はシーンだけでなくテクスチャの差分もセットで比較したいので、ディレクトリ単位で変更セットをリストアップしないとちょっと不便です。
さてどうしよう、1ファイルずつ変更セットを取得するか…となってしまいそうですが、実はコマンドではディレクトリ単位での変更セットが取得できます。(GUIでの実装お待ちしています!)
ディレクトリに対して以下を実行するだけです。らくちんですね。
cm hist $path
実際には参照してないpsdへのチェックインもあるかもしれないので若干無駄な変更セットも返ってきてしまう可能性はありますが、チェックインメッセージも出しているのでそこまで問題にはなってないかなと思います。
おわりに
前回の記事にも書いた通り標準機能でもさまざまな恩恵が得られたのですが、どうしても足りない部分は出てきてしまうので、そういった部分は今回紹介したようにツール開発などによって解決しています。 他にもPlasticSCMをより活用するためのさまざまな取り組みを行っているので、また別の機会にご紹介できればと思います。