日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2012年2月27日月曜日

パーティクル101 その2:アスキーファイルの分析

前回「パーティクル101 その1:パーティクルの作成」では、
コマンドでパーティクルを作成、追加する方法を試しましたが、今回は
実際にはMayaのファイルでどのような形になっているのかを調べてみました。
これにより、各コマンドがどのようなことを行っているのかが、わかると思います。

前回やったのは以下の通りです。
1)「particle」コマンドでパーティクルをparticleShapeに作成
2)「emit」コマンドparticleShapeにパーティクルを後から追加
3)「saveInitialState」コマンドで追加したパーティクルを維持


パーティクルの作成にはステップ1、既存のparticleShapeに追加するにはステップ2と3を行う必要があります。


<「particle」コマンドで何が実行されているのか?>
まず「particle」コマンドで何が行われているのかを確認してみます。
以上のステップで何が行われているのかをアスキーファイルで確認します。
1)新規ファイルを.ma(アスキー形式)で保存(例:empty.ma)
2)新規ファイルにparticleコマンドを実行して.ma形式で保存

(particle; だけで-posフラグはつかいません)

これをテキスト・エディタで開いて内容を比較します。(例:particle.ma)
※ windowだと右クリックにて編集をックリックすれば「ワードパッド」で開けます。
「メモ帳」だと改行されないので見づらくなります。
ワードパッドである必要はありませんが改行をサポートしたテキストエディタが便利でしょう。


<最初のファイル:何も作成しない空のファイル>
まず最初のファイルを
最初にfileinfoなどが並び後に
「createNode」コマンド、「setAttr」コマンドが並んでいます。

たとえば最初のcreateNodeはこのようになっています。
createNode transform -s -n "persp";
これは「persp」カメラのtransformノードを作成するものです。
ためしに「persp」を「persp1」に変えて実行し
outlinerでDisplay > Shapesをonにして確認すれば
createNode transform -s -n "persp1";
「persp1」というtransformノードが作成されるのがわかると思います。
(※カメラは作成されません)
(※ちなみに「persp」のままで上記コマンドを実行すると前の「persp」ノードが上書きされるようです)


このcreateNodeの後にはsetAttrコマンドがいくつか続き、このtransformノードのアトリビュートを設定しています。

さて次のcreateNodeコマンドを見てみます。
createNode camera -s -n "perspShape" -p "persp";
これにより「perspShape」というカメラが「persp」trasnformノード内に作成されます。
今回は二つのコマンドを実行してみます。
まず「persp」を「persp1」にして実行
createNode camera -s -n "perspShape" -p "persp1";
これで「persp1」内に「perspShape」というカメラShapeノードが作成されることがわかります。

次に「perspShape」を「perspShape1」に変えて実行
createNode camera -s -n "perspShape1" -p "persp1";
これで「persp1」内に「perspShape1」というカメラShapeノードが追加されます。

続く「setAttr」コマンドはこのShapeノードのアトリビュート設定です。



以上から通常何かを作成する(Create)コマンドを実行すると
●transformノードの作成
●そのtransformノード内にShapeノードを作成

という順に二つのcreateNodeコマンドが実行されてることがわかると思います。
(例外もあるかもしれませんが、パーティクルやロケータ-などでは少なくともそのようです)

継続してファイルを見ていくと以下、top、 front、 sideとカメラの作成が続いています。
mayaがファイルを開く度にこれらのコマンドが順次実行されてそれらのカメラが作成されているのです。



<2つ目のファイル:Particleコマンドを実行しただけのファイル>
さて2つ目のファイルを開き1つ目のファイルとの違いを確認します。
とりあえず目につくのは
createNode transform -n "particle1";
createNode particle -n "particleShape1" -p "particle1";

の二行で、以下はparticleShape1のアトリビュートを設定する「setAttr」が続く事がわかります。

「particle」コマンドを実行すると言うことは、
この二つの「createNode」コマンドと、一連の「setAttr」が実行されることであると言うことがわかります。



<Emitコマンドで何が実行されているのか?>
ではシーンにEmitコマンドで、1つだけパーティクルを追加したときにアスキーファイルがどう変化するのかしらべてみます。
まず新規にシーンを作成し以下を実行します
particle;
emit -o particle1 -pos 0 0 0;


これで原点に一つのパーティクルが作成されます。
Initial Stateを実行せずに、このままアスキー形式で3つ目のファイルとして保存します。

.maファイルをテキストエディタで開き、「setAttr」の部分を比較してみます。
先ほどの2つ目のファイルとまったく変わらないことがわかります。
これをMayaで開き直すと、表示されるパーティクルは無い事がわかります。

これが意味するところはEmitコマンドでは、シーン内にパーティクルは追加されるものの、
保存時には初期状態、すなわちパーティクルゼロの状態のままで保存していることがわかります。

おそらくMayaはファイル保存するときに初期状態を保存するということだと思われます。


なのでEmitコマンドでパーティクルを追加しても初期状態として保存しなければ、
その実行結果は残らないと言うことです。



<「saveInitialState」コマンドで何が実行されているのか?>
では新規シーンで以下を実行し、アスキー形式で4つ目のファイルとして保存します。
particle;
emit -o particle1 -pos 0 0 0;
saveInitialState particle1 ;


これにより、「setAttr」の部分が変わったことがわかると思います。
「saveInitialState」コマンドはこの「setAttr」の値を変えていると言い替えることも出来ると思います。
このファイルをMayaで開き直すと最初からパーティクルは1つだけ表示されます。


<結論>
以上の事からファイルには、以下のことが保存されていることがわかります。
●パーティクルのトランスフォームとシェイプ・ノード の作成
●各アトリビュートの設定
そして、
emitとsaveInitialStateは特に新たなコマンドとして、ファイルに保存されるのではなく、
●その結果だけがアトリビュートの設定として保存される。
ということがわかります。

追記:
最終的にファイルに保存されるコマンドとそうではないものがあるので、その辺りを使い分けるといろいろ便利かも知れない。

0 件のコメント:

コメントを投稿