Media & Entertainment Collection and Arnold キャンペーンMedia & Entertainment Collection and Arnold キャンペーン

チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第70回:Maya ASCIIとMaya Binaryの違い

2017.08.23

  • Maya
  • アニメ
  • ゲーム
  • チュートリアル
  • データ
  • 学生・初心者
  • 映画・TV
Maya ASCIIとMaya Binaryのどちらを使うか

プロジェクトを開始すると、色々と制作にまつわるルールを決める事になります。
そのルールの一つとして、かつ毎回派閥争いとなっているのがMaya ASCIIとMaya Binaryのどちらを使うかです。

一体どちらが優れているのか…。今回はその争いに終止符を打ちます!

…と言いたいところですが、両陣営の目がキラリとこちらを注視している雰囲気を感じますので、ここは一つ穏便にそれぞれの特徴を見ていき、どういう状況でどちらを選ぶべきかの判断材料をご紹介していきたいと思います。(超高速でハイパフォーマンスなアスキーファイルがあればそれで万事オッケーなのですが…)

世の中Mayaに限らず昔からデータのフォーマットとして「アスキー」と「バイナリ」があり、どちらも一長一短です。Mayaも類にもれず、どちらがより優れているということはないですが、状況によってどちらが使いやすいかというのはあります。

というわけで特徴と使い分けを見ていきましょう。

Maya Binary

Maya Binary

Maya2018をインストールしたので起動してみました。
シーンを保存しようとするとデフォルトのファイル種類が「Maya Binary」となっていました。Mayaの基本フォーマットは一応Maya Binaryといえます。

Maya Binaryは端的にいうと「パフォーマンスが良い」フォーマットです。

特徴については本当に色々ありますので、思いつくところで並べていくと次のような特徴があります。

・読み書きが高速
・ファイルサイズが小さい
・unknownノード(プラグインが読み込まれていない時のプラグイン専用ノード)があっても保存できる

一般的なソフトウェアではアスキーよりもバイナリファイルをサポートすることが多いように思いますので、やはりMayaのデフォルトファイルフォーマットと言えます。

バイナリと言っても開く時にはMayaのシーンを直接バイナリから復元するのではなく、Maya ASCIIと同様にコマンドを実行してシーンを再現します。
そのためノードの作成やコネクションなどMayaのコマンドがほとんどの場合は、Maya ASCIIとそれほど速度は変わらなくなります。

利点が最大限発揮されるのは、メッシュなど大量の数値を扱っているシーンです。アスキーよりも高速で、ファイルサイズも小さくなります。Mayaが扱っている数値データをそのまま書き出したり読み出したりする部分が多い程高速です。
メッシュやマテリアルを多く含む背景シーン、高ポリゴンのメッシュを持つキャラクタのシーンなどで有利です。

ただしバイナリはファイルがおかしくなったときに中身を見て直すことが難しいです。
また、シーン情報を得るのにバイナリファイルから取得することも難しいので、一度Mayaでファイルを開いて情報を取り出すことになります。(バイナリファイル内を直接解析する人もいるようですが。)

Maya ASCII

Maya ASCII

バイナリの特徴だけ見るとバイナリ派閥に軍配が上がりそうですが、アスキーは実際の運用でとても便利な利点があります。

Maya ASCIIは端的にいうと「出来ることが多い」フォーマットです。

こちらも特徴を並べてご紹介します。

・シーンの書き換えが可能
(必要な情報部分のみファイルからスクリプトエディタにコピペして実行すれば、メッシュデータやリグのデータ、アニメーションデータなどを復活出来る)
・Mayaを開かないでシーンの情報を抜き出せる
(テキストファイルなので中のテキストを検索すれば良い)
・ファイル同士を合成可能
(テキストをがっちゃんこする。ただし上手くやらないとエラーがでますが…)
・パスの置き換えが必要なときに便利
(ファイルリファレンスやテクスチャのパスをテキストで置き換えるだけ)
・unknownノードがあると保存できない
(この場合はFile > Optimize Scene SizeからUnknownノードを削除してから保存。でも二度とそのプラグインのデータは戻ってきません)

中身がテキストなので開いて内容を読めますし、書き換え可能なので問題が起きたときに直接修正できるところがもっとも大きな特徴です。

プロジェクトを進める上では問題が起きたときに「素早い対処」「原因の究明」をいかに早く確実に行うかが重要です。
アスキーファイルは問題箇所を見つけやすく、書き換えればすぐに修正できますのでプロジェクト運営にとても役立ちます。

数値の書き換えはもちろんのこと、createNodeコマンドを追記してノードの追加もできれば、逆にcreateNodeコマンドを削除してノードを作らないように出来ます。setAttrやconnectAttr部分を削除すれば、その部分の編集がなかったことに出来ます。

ファイル内にprintを埋め込むことでシーンを開いている途中の情報を出力したり、適宜printすることでどこまで読み込んだかを確認したり出来ますのでデバッグにも使用できます。

場合によっては大量のシーンファイルの値を変更するのにも向いています。
バイナリだとシーンをMayaで開いて修正していく必要がありますが、アスキーなら単に文字の置き換えで済みます。テキストエディタなどの文字の置き換え機能を利用するだけで良いので、ツールもすぐに手に入りますし、何より高速です。

バイナリでもアスキーでもMayaにシーンを開いたあとのメモリ消費量はともに同じです。シーンを開いた後の大きな違いは無いので、バイナリとアスキーの違いでキーとなるのは読み書きの速度です。

Maya ASCIIの読み書きの速度

Maya ASCIIの読み書きの速度

Maya ASCIIはMaya Binaryと比べてファイルサイズが大きくなります。読み書きもバイナリのほうが高速です。

Maya Binaryのところでも触れましたが、ファイル内にノードの作成などのコマンドが多く含まれている場合はバイナリでもアスキーでも大差はありません。ファイルを解析してMayaに司令を送るだけですので、ロード時間はMayaのコマンド実行時間が大きく関わります。

アスキーは数値などのパース(解析)で時間がかかるので、大量コンポーネント、メッシュがある場合は時間がかかりがちです。これはファイルを開くときに影響が出ます。

ファイルサイズが大きくなることで、特にネットワーク越しにファイルを読み書きすると時間がかかりがちです。最近のバージョンでは対処が行なわれており、以前よりも高速化しています。

シーンを開く回数も考慮すると良いです。
シーンを開くのに時間がかかっても、頻繁に開かないならアスキーでも大丈夫かもしれません。データが壊れた時の復旧を考えると、日に数回の待ち時間はよしとするという考えです。

逆にシーンを開くのがそこそこ早くても、かなりの回数開く場合はバイナリのほうが良いかもしれません。
たとえばゲームのファイルをエクスポートするのに、バッチ処理で必ずMayaのシーンファイルを開いて加工しないといけないとします。この場合はファイルが数千ファイルあるとすれば、バイナリを使ったほうが圧倒的に処理時間を軽減できます。

一方で、もし数千のファイル内でとある名前のロケーターの位置を知りたいというだけでしたら、アスキーで保存して中身の文字を検索する方がMayaバッチを起動するよりも速いので、アスキーを使った方が良いかもしれません。

Maya ASCII + Maya Binary + ファイルリファレンス

アスキーで読み書きが重くなるのは、シーン内に複雑なデータや大量のメッシュ、キーフレームがある時です。それらを頻繁に編集しないなら、いっその事ファイルリファレンスとしてMaya Binaryに書き出しておくと良いです。

大きなデータを別ファイルとして保存してファイルリファレンスにすれば、シーンを保存するときはリファレンスの情報だけ保存すれば良いので、重いデータを保存しないで良くなります。しかもシーンを開くときはバイナリファイルをリファレンスとして読み込むので、読み込みも速くなります。

次の図のように、読み込み時間に影響がある巨大な背景データはMBで保存、それ以外はMAで保存してファイルリファレンスとして読み込めば、アスキーとバイナリのいいとこ取りが出来きます。

アスキーとバイナリのいいとこ取り

上記の背景データの様に巨大な一つのシーンを扱う時はバイナリが有利です。
親となるシーンはファイルリファレンスを沢山読み込み、パスの扱いが重要になるのでアスキーがベターです。

もう一つMayaの重要な仕組みがあります。
同じファイルをリファレンスとして複数回読み込んでいたとしても、ファイルから読み込むのは一つ目だけで、二つ目以降はメモリからコピーされるようになっています。同じファイルをリファレンスするときは数が増えても二倍三倍と時間がかかるわけではありません。

そのため大きなデータをファイルリファレンスとしてとして複数回読み込むのなら、アスキーでも問題ない場合があります。建物や木のデータが多少大きくても、複数回リファレンスするならアスキーとバイナリであまり時間が変わらない可能性があります。

まとめ

というわけでそれぞれのファイル形式の特徴がなんとなくつかめてもらえたと思います。

パフォーマンスに関しては色々と回避策がありますので、まずはMaya ASCIIを使ってみるのがおすすめです。もし読み書きの時間などで問題が起きたらMaya Binaryにする、という運用で良いと思います。実際の所ファイルが壊れるということはそうそう無いので、プロジェクト全体のパフォーマンスを考えて、全てバイナリにしておくというのも一つの戦略です。

いずれにせよプロジェクトの特徴に合わせて、何を目的としてファイルフォーマットを選ぶか明確にすれば上手く運用出来ますので、ぜひ参考にしてみてください!

著者

築島 智之

築島 智之

オートデスク株式会社
オートデスクコンサルティング
ソフトウェアエンジニア