チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第16回:Mayaの正体に迫る!すべてはノードでできている
- Maya
- ゲーム
- コラム
- チュートリアル
- 中級者
- 学生・初心者
- 教育
- 映画・TV
前回、前々回はヒストリの使い方というか、いじり方を通してヒストリの挙動を見ました。3ds Maxを使ったことがあればモディファイアと似た印象を受けることでしょう。
ところでこのヒストリ、一体何者なのでしょうか?目に見えるものではないですがオブジェクトの一種?それともデータ?ツール?なんとなく謎の物体ですよね。今回はこの謎を解き明かしていきたいと思います。
視覚的に説明する方がわかりやすいのでハイパーグラフを使ってみましょう。
1)Create > Polygon Primitives > Sphereで球を作ります。
2)Window > Hypergraph: Connectionsを選択して、ハイパーグラフウインドウを立ち上げます。
(Hypergraph: Hierarchyではないのに注意!)
ハイパーグラフは表示のオプションがいろいろありますので、図と見た目が異なる場合もあります。
気にしないで進めてみてください。
さて上図のようにpSphere1という四角いものが表示されます。これが「ノード」です。pSphere1の他にも四角いものが表示されていますね。これらも「ノード」です。ノードとはポリゴンを生成したり切ったり削除したりという操作が物として登録されている感じです。それ以外にもMaya内で扱われるデータも物として扱われています。では一つ一つ見てみましょう。
ノードの間に紫の線があり、中間に矢印が書かれています。
この線を「コネクション」と呼びます。紫の矢印がデータの流れを表しています。ここではメッシュの情報が流れています。
通常左側が上流となり、右へデータが流れていくので左から見ていきましょう。
一番左のpolySphere1というのはどこかでよく見かけませんか?
球を作った時にできる、球の分割数を決めたりするヒストリです。これもノードなんですね。このノードで球形ポリゴンデータを生成しています。
左から二番目のpSphereShape1というのはmeshノードと呼ばれるものです。
ポリゴンで出来ているオブジェクトはすべてこのmeshノードで出来ています。polySphere1ノードで作られた球形ポリゴンデータをこのmeshノードが受け取り、保持します。

次にあるinitialShadingGroupというのはshadingEngineノードと呼ばれるシェーダーにかかわるノードです。
このノードは上流にあるmeshノードがこのシェーダーに割り当てられているという情報を保持します。

右に残ったpSphere1には紫の線が見当たりません。
このノードはデータを受け取りません。これはtransformノードと呼ばれ、三次元上の位置情報を持っています。後で詳しく説明します。
と、なんだかなにがなんだかよくわからない感じだと思います。
イラストにするとこんな感じですかね…。
余計にわからないような気もしますが、そのうちわかってくると思います…。
ハイパーシェードやアウトライナに表示されている物、アトリビュートエディタのタブ、チャンネルボックス、すべてこの「ノード」を別の見た目で表示したものなのです。そしてポリゴンデータも頂点削除もエッジ追加もスムースもすべてこういった「ノード」のつながりでできています。
私がこの「ノード」についてきちんと勉強したのは、Mayaを触り始めて1年以上経った頃でした。ヘルプを読んでもさっぱりチンプンカンプンだったのをよく覚えています。一番いいのは、とりあえず触ってみて、挙動を確かめてみて、これがなんなのか実感することです!というわけで、いくつか実験してみましょう。
実際にやってみても何が起きているかいまいち実感できないと思いますが、繰り返しているうちにある日「そういうことか!」とわかるものなので、それほど気負いせずに試してみてください。わかった時はMayaを理解した時です!そして優れたプログラムのアーキテクチャーを理解した時になることでしょう。
1)Create > Locatorでロケーターを作ります。
2)ロケーターを選択して、アトリビュートエディタを開きます。
3)ノード名が表示されているところの左側に書いてあるのが、ノードのタイプです。
この場合locatorというタイプだということになります。まあ、ロケーターですしね…。
その中で若干特殊な扱いになっているものとして「中間オブジェクト」があります。IntermediateObjectといわれるこれはジオメトリデータのキャッシュを行っています。ノードのタイプはmeshノードなど形状のデータですが、特殊なアトリビュートがオンになっていることで中間オブジェクトとして扱われています。
例えばヒストリの無いキューブがあるとします。

Cut Face Toolで切れ目を入れれば、polyCutというヒストリ、つまりノードができます。

しかしこのpolyCutというのは「与えられたメッシュに切れ目を入れる」という機能なので、何かしらメッシュを”与え”られなければなりません。そこでMayaは中間オブジェクトを作り、Cut Face Tool する前のメッシュデータをキャッシュします。
では図で説明しましょう。
Cut Face Toolを実行すると、Mayaはまずメッシュをコピーし、中間オブジェクトとして設定します。

コピーした中間オブジェクトをpolyCutに接続してヒストリを構築します。

灰色文字で表示されているノードが中間オブジェクトです。

これは通常モデリングビューで見ることができません。アトリビュートエディターのObject Display > Intermediate Objectのチェックがオンになっているのでビューで見えないのです。

これをオフにすると下図のようにメッシュが可視化されます。

緑色で表示されているのが中間オブジェクトです。なるほど、切れ目を入れていない状態のメッシュ形状ですね。
この切れ目の入っていないメッシュがpolyCutで切れ目を入れられ、加工されたデータとして画面に表示されるというのをヒストリは繰り返します。
さらに中間オブジェクトという状態のデータも見てみました。なぜこれを紹介するかというと、データのサルベージで結構役に立つことが多いので、ノードを知るならぜひ知っておいていただきたい物なのです。
次回はその中間オブジェクトを詳しく見ていきたいと思います。
ところでこのヒストリ、一体何者なのでしょうか?目に見えるものではないですがオブジェクトの一種?それともデータ?ツール?なんとなく謎の物体ですよね。今回はこの謎を解き明かしていきたいと思います。
すべてノードでできている
Mayaの内部設計はとてもシンプルなものです。「ノード」というものがある、それだけです。ヒストリの一つ一つがこの「ノード」なのです。なので、ここからは正式名称の「ノード」という呼び名を使っていきます。視覚的に説明する方がわかりやすいのでハイパーグラフを使ってみましょう。
1)Create > Polygon Primitives > Sphereで球を作ります。

2)Window > Hypergraph: Connectionsを選択して、ハイパーグラフウインドウを立ち上げます。
(Hypergraph: Hierarchyではないのに注意!)

ハイパーグラフは表示のオプションがいろいろありますので、図と見た目が異なる場合もあります。
気にしないで進めてみてください。
さて上図のようにpSphere1という四角いものが表示されます。これが「ノード」です。pSphere1の他にも四角いものが表示されていますね。これらも「ノード」です。ノードとはポリゴンを生成したり切ったり削除したりという操作が物として登録されている感じです。それ以外にもMaya内で扱われるデータも物として扱われています。では一つ一つ見てみましょう。
ノードの間に紫の線があり、中間に矢印が書かれています。

この線を「コネクション」と呼びます。紫の矢印がデータの流れを表しています。ここではメッシュの情報が流れています。
通常左側が上流となり、右へデータが流れていくので左から見ていきましょう。
ノードコネクションをたどる

一番左のpolySphere1というのはどこかでよく見かけませんか?
球を作った時にできる、球の分割数を決めたりするヒストリです。これもノードなんですね。このノードで球形ポリゴンデータを生成しています。

左から二番目のpSphereShape1というのはmeshノードと呼ばれるものです。
ポリゴンで出来ているオブジェクトはすべてこのmeshノードで出来ています。polySphere1ノードで作られた球形ポリゴンデータをこのmeshノードが受け取り、保持します。

次にあるinitialShadingGroupというのはshadingEngineノードと呼ばれるシェーダーにかかわるノードです。
このノードは上流にあるmeshノードがこのシェーダーに割り当てられているという情報を保持します。

右に残ったpSphere1には紫の線が見当たりません。
このノードはデータを受け取りません。これはtransformノードと呼ばれ、三次元上の位置情報を持っています。後で詳しく説明します。
と、なんだかなにがなんだかよくわからない感じだと思います。
イラストにするとこんな感じですかね…。

余計にわからないような気もしますが、そのうちわかってくると思います…。
ハイパーシェードやアウトライナに表示されている物、アトリビュートエディタのタブ、チャンネルボックス、すべてこの「ノード」を別の見た目で表示したものなのです。そしてポリゴンデータも頂点削除もエッジ追加もスムースもすべてこういった「ノード」のつながりでできています。
私がこの「ノード」についてきちんと勉強したのは、Mayaを触り始めて1年以上経った頃でした。ヘルプを読んでもさっぱりチンプンカンプンだったのをよく覚えています。一番いいのは、とりあえず触ってみて、挙動を確かめてみて、これがなんなのか実感することです!というわけで、いくつか実験してみましょう。
実際にやってみても何が起きているかいまいち実感できないと思いますが、繰り返しているうちにある日「そういうことか!」とわかるものなので、それほど気負いせずに試してみてください。わかった時はMayaを理解した時です!そして優れたプログラムのアーキテクチャーを理解した時になることでしょう。
ノードのタイプ
ノードには様々なタイプがあります。mesh、shadingEngine、transformなどなど。選択しているノードのタイプはアトリビュートエディタで確認できます。1)Create > Locatorでロケーターを作ります。
2)ロケーターを選択して、アトリビュートエディタを開きます。
3)ノード名が表示されているところの左側に書いてあるのが、ノードのタイプです。
この場合locatorというタイプだということになります。まあ、ロケーターですしね…。

中間オブジェクト
ノードにはいろいろな機能があります。ポリゴンデータを作るもの(polySphereなど)、ポリゴンデータの表示位置を決めるもの(transform)、データを加工するもの(polyCutなど)。その中で若干特殊な扱いになっているものとして「中間オブジェクト」があります。IntermediateObjectといわれるこれはジオメトリデータのキャッシュを行っています。ノードのタイプはmeshノードなど形状のデータですが、特殊なアトリビュートがオンになっていることで中間オブジェクトとして扱われています。
例えばヒストリの無いキューブがあるとします。

Cut Face Toolで切れ目を入れれば、polyCutというヒストリ、つまりノードができます。

しかしこのpolyCutというのは「与えられたメッシュに切れ目を入れる」という機能なので、何かしらメッシュを”与え”られなければなりません。そこでMayaは中間オブジェクトを作り、Cut Face Tool する前のメッシュデータをキャッシュします。
では図で説明しましょう。
Cut Face Toolを実行すると、Mayaはまずメッシュをコピーし、中間オブジェクトとして設定します。

コピーした中間オブジェクトをpolyCutに接続してヒストリを構築します。

灰色文字で表示されているノードが中間オブジェクトです。

これは通常モデリングビューで見ることができません。アトリビュートエディターのObject Display > Intermediate Objectのチェックがオンになっているのでビューで見えないのです。

これをオフにすると下図のようにメッシュが可視化されます。

緑色で表示されているのが中間オブジェクトです。なるほど、切れ目を入れていない状態のメッシュ形状ですね。
この切れ目の入っていないメッシュがpolyCutで切れ目を入れられ、加工されたデータとして画面に表示されるというのをヒストリは繰り返します。
まとめ
今回はヒストリを「ノード」という視点から見ていきました。かなりややこしいですね。概念的な部分が多いのでとても難しいと思います。さらに中間オブジェクトという状態のデータも見てみました。なぜこれを紹介するかというと、データのサルベージで結構役に立つことが多いので、ノードを知るならぜひ知っておいていただきたい物なのです。
次回はその中間オブジェクトを詳しく見ていきたいと思います。