プロジェクト設定の自動化ノウハウ

## はじめに
この記事は[Maya Adovent Calender2022](https://qiita.com/advent-calendar/2022/maya)の7日目の記事です。

突然ですが先日こんなツイートを見かけました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">&quot;MAYAのプロジェクト設定してますか？&quot;<br><br>プレビズ作業の効率化のために自作のファイルマネージャーツールを作成しているのですが、<br><br>専門学校の頃から必ずプロジェクト設定は行うように教育を受けたのですが、<br>ゲームやアニメの現場では正直設定してない気がする... <a href="https://t.co/zVnvEPJB7s">pic.twitter.com/zVnvEPJB7s</a></p>&mdash; スマートアニメーション【CG監督】 (@smartanimation1) <a href="https://twitter.com/smartanimation1/status/1599583982332481536?ref_src=twsrc%5Etfw">December 5, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


たしかに。

実際問題として、Mayaは何かしら拡張をしないと自動でプロジェクト設定はしてくれず作業者が意識的に操作をする必要があるため、
恣意的か否かはさておいてプロジェクト設定をしない人が現れてもおかしくありません。

せめて所属している組織内でプロジェクト設定を必ずするというルールでもあれば話は多少変わると思うのですが、
それでも自動化されていない以上は人間なのでうっかり忘れもあり得ます。

そこで、今回は簡単にですがプロジェクト設定の自動化ノウハウを紹介したいと思います。

## そもそもプロジェクト設定すると何がいいの？
そもそもの話、なぜプロジェクト設定をしなければいけないのでしょうか？

なんとなくしたほうがいいというのは分かるけど・・・
お作法？マナー？？儀式？？？

といった具合に、プロジェクト設定を忘れるということはプロジェクト設定自体に意味を感じていない・知らないというケースも考えられます。
なので、まずはメリットを知る/現場に共有することで意識から変えていくようなアプローチも必要だと思います。

自動化さえされていればそもそも意識する必要もないしメリットなんか知る必要ないじゃん！と思う方も居るかもしれませんが、
現場ではいつまでも面倒を見てもらえるということはまずありえないと思うので万が一のことを想定するならば知識武装はいくらしたって損はありません。

というわけで[公式のプロジェクト設定の説明ページ](https://knowledge.autodesk.com/ja/support/maya/learn-explore/caas/CloudHelp/cloudhelp/2020/JPN/Maya-ManagingScenes/files/GUID-D5CA162A-0956-49C6-9FAC-2F73DCF03409-htm.html)を見てみましょう。

説明の中にはこうあります。

> プロジェクトを設定すると、シーンに関連付けられたフォルダのディレクトリ構造が作成されます。
これらのフォルダの一部は、シーン、テンプレート、レンダー データ、ソース イメージのフォルダです。ルート プロジェクト フォルダ内には複数のサブフォルダがある場合があります。以下の「プロジェクト サブフォルダ」を参照してください。
注: workspace.mel ファイルも作成され、プロジェクトに追加されます。「Workspace.mel ファイル」を参照してください。

つまるところ、 **「.ma/.mbなどのsceneファイルやテクスチャなどのデータが格納された複数のディレクトリをひとまとまりのパッケージとして定義する」** ような意味だと自分は解釈しています。

(逆にわかりづらいかもしれませんが)Mayaのノードの親子関係で例えるならば、何の親にも属していないグローバルなノードを、
workspace.melをルートにして纏めたグループにするようなイメージです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212052/22d1f9d0-9cb4-13f5-b2f9-e8a79c647623.png)  ⇒ ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212052/ff8814f2-20fd-166a-7802-37cd0006d008.png)


こうしておくことで、Mayaは
**Scene内でのパスの解決方法としてworkspace.melのあるディレクトリを起点とした相対パスを優先するようになります。** 
これがエンドユーザーにとっての一番のメリットになります。

どういうことかというと、
具体例としてテクスチャファイルを参照したときの場合、

プロジェクト設定なしの場合は
**ルートドライブから始まるフルパスで参照を解決**しているのが確認できると思います。
これが **「絶対パス」** です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212052/c9d4ebf5-d2e2-a32f-dd09-8ee437e50082.png)

これがプロジェクト設定ありの場合になると、
**プロジェクトとして指定したフォルダまでのパスが隠れ、sourceimagesから始まる相対的なパスで参照を解決**するようになります。
これが **「相対パス」**　です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212052/bdd9aae0-44c1-771d-eebb-aefa907fc006.png)


これが何を意味するかというと、
プロジェクトフォルダの場所が変わってもテクスチャファイルへの参照が切れない、
**所謂「パス切れ」が起きなくなります。**

よく他人から受け取ったプロジェクト内のsceneファイルを開くとテクスチャが剥がれているという現象に出くわすことがありませんか？
**そうなる原因の大半がこれです。**

こういった事態を防ぐためにプロジェクト設定は必要ということなのです。

:::note warn
注意点
一度絶対パスでテクスチャを参照した状態で後からプロジェクト設定しても自動的には相対パスに変換されません。
もし後から相対パスにしたい場合は改めてテクスチャを参照しなおすか、パスを直接編集して相対パスにする必要があります。
こういった手間を防ぐ意味でも最初にプロジェクト設定をしておくことが重要なんですね！
:::

## プロジェクト設定を自動化する
さて、プロジェクト設定のメリットについて理解が深まったうえでようやく本題に入ります。

最初にも述べた通りMayaのプロジェクト設定は標準では自動化されておらず忘れやすいし手間です。
この手間を解決するために各社なにかしらの対策[^1]を立てているわけですが、
今回は個人でも比較的導入しやすい方法をいくつか紹介します。

### 1. CG自習部屋 Mayaの時間さんの恩恵を受ける
Mayaの便利ツールといえばもはや定番のCG自習部屋のAriさんツールを使うのが最も簡単な方法の一つです。
以下のツール経由でシーンファイルを開くと、そのシーンが属しているプロジェクトを自動で設定してくれます。

詳しくはリンクを参照してみてください。

http://cgjishu.net/blog-entry-16.html

### 2. AREA JAPANさんの恩恵を受ける
AREA JAPANさんはMayaのみならずAutodesk製品の様々なノウハウを共有してくれており、
プロジェクト設定の自動化についても紹介してくれています。

こちらは殆どコピペでよいとはいえコードを書いたり環境を整えたりする必要があるため、
説明書通りに操作をするのが得意な人におすすめです。

https://area.autodesk.jp/column/tutorial/maya_atoz/set_project_1/

https://area.autodesk.jp/column/tutorial/maya_atoz/set_project_2/

私もこちらの記事を参考に自動プロジェクト設定ツールを導入しました。


## おわりに
もうちょっと書けることがあるかなと思いましたが急に思い立って枠を埋めたため本題よりも前置きのほうが長いという何とも言えない記事に仕上がりました・・・

とはいえ、実は本当に伝えたかったのはどちらかというと前置きのほうでして、
SNS上でも話題になった通りプロジェクト設定は重要な操作であるにも関わらずMayaの仕様も相まって環境が整っていなければ非常に忘れられやすい要素の一つです。

それがゆえに各社で対策していることが多いため、人によってはプロジェクト設定されるのが当たり前になってしまいそのまま存在を忘れてしまうこともあるかもしれません。
そして、その環境に甘え続けてしまうと万が一環境が変わった時にプロジェクト設定が自動化されておらず、他人に渡したときにパスが切れてしまうデータを作ってしまう人材になってしまう可能性もあり得ます。

そうならないためにも、普段何気なく行っている操作の本当の意味を理解して綺麗なデータづくりをしていきたいですね！(ごまかし成功)

明日の記事は@9bozさんの「mayaがエラー吐く時の原因と対処の何か」です。お楽しみに！

[^1]:冒頭で紹介したスマートアニメーション【CG監督】([@smartanimation1](https://twitter.com/smartanimation1))さんのファイルマネージャーのようなものを各社用意していることが多い