チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第19回:インスタンスとは何者?
- Maya
- ゲーム
- コラム
- チュートリアル
- モデリング
- 中級者
- 学生・初心者
- 教育
- 映画・TV
Mayaの正体暴きも佳境に入ってきました。今回はインスタンスについて、そしてさらに実践的なノード操作テクニックを紹介していきます。
Mayaでインスタンスがどのように作られているか理解すれば、Mayaがいっそう面白く思えてくることでしょう。ちょっと難解ですががんばっていきましょう。
どれか一つの形状を編集すれば、ほかの場所の形状も変わります。
インスタンス、便利だけれどもなんとなく謎めいた機能ですね。でもここまで読んだ皆さんなら、仕組みを理解することができます。
まずインスタンスを作ってみましょう。
1)Create > Polygon Primitives > Cubeでキューブを作ります。
2)Edit > Duplicate Special□でオプションウインドウを開きます。
3)以下のオプション設定にして実行してください。Geometry typeがInstanceになってればインスタンスが作られます。
一つのオブジェクトのコンポーネントを選択して、もう一方のオブジェクトのコンポーネントも選択されれば無事インスタンスされています。

さて、Window > Hypergraph: Hierarchyでハイパーグラフを開きましょう。
オブジェクトが二つ表示されています。特に変なところはありません。
ハイパーグラフのメニューでOptions > Display > Shape Nodesのチェックを入れてみてください。下図の様に表示が変わります。

紫色に表示されているノードはインスタンスであることを示しています。さっきは二つオブジェクトが表示されていたのに、meshノードは一つしか表示されていません。つまりインスタンスとは
「複数のtransformノードの位置に、一つのmeshノードを表示している」
という状態なのです。(NURBSでも同様のことが起きています。)
よって他の3DCGソフトにあるようなインスタンスのオリジナルもしくはマスターみたいなものは存在せず、ただ一つmeshノードがあって表示する際に再利用されているだけなのです。これならデータは少なくなります。
ちなみにさっきハイパーグラフでShape Nodesというメニューがありました。meshノードやらNURBS、カーブなど、形状に関するノードはすべてシェープノードと呼ばれます。transformはこれらシェープノードと連携してオブジェクトを表示します。

例えば上図のシェーダーでは、最終的な結果に反射が入っているので地の色が見難いですね。なのでカラーだけを別のlambertに接続して色を見やすくしています。
実はモデリングしているメッシュでも同じことができます。
実際にやってみましょう。
1)Create > Polygon Primitives > Cubeでキューブを作ります。
2)Edit Mesh > Bevelを実行して面取りします。
3)Mesh > Smoothでスムースします。

こういうオブジェクトではヒストリでベベルを調整しても、そのあとのスムースのせいでどのぐらいベベルが効いているかわかりません。
スムースのNode StateをHasNoEffectにすればベベルの効きはわかりますが、スムースされた結果がわからないので困ります。というわけでヒストリをプレビューできるようにしましょう。
4)キューブを選択し、Edit > Duplicateで複製します。(単純な複製を行い、ヒストリを削除しておきます。)
5)プレビューしやすいように、複製したキューブ(おそらくpCube2)をちょっと横に移動しておきましょう。
6)二つのキューブを選択し、Window > Hypergraph: Connectionsでハイパーグラフを開きます。
7)pCube2(transfrom)を選択して、下矢印キーを押します。するとpCube2のmeshノードが選択されます。

pCube2のmeshノードはpCubeShape2であることがわかります。
(transformノードを選択して下矢印キーを押すとシェープノードを選択できます。逆にシェープノードを選択して上矢印キーを押すと、transformノードを選択できます)
8)べベルのヒストリはpolyBevel1です。このノードのアイコンの上で中マウスボタンを押して、ドラッグしてpCubeShape2の上に持っていき、ドロップします。
メニューが表示されるのでOther...を選択します。Other...を選択するとコネクションエディタが開きます。
9)左側(polyBevel1)はOutputを選択し、右側(pCubeShape2)はIn Meshを選択します。
OutputとIn Meshが接続されます。
これでベベル処理されたメッシュデータがプレビュー用メッシュに流し込まれるようになりました。
さて、モデリングビューを見てみましょう。
先ほどまでスムースされた時の形状だったはずなのに、ベベルされたモデルが表示されていることでしょう。
どちらのオブジェクトを選択しても、ヒストリには共通のpolyBevel1というベベルのヒストリが表示されます。片方のアトリビュートを変えればもう一方も変わります。
これもインスタンスの一種みたいなものですね。
こうして自前で上手くヒストリを構築することで、ひとつの編集を行えば様々なオブジェクトが更新されるシーンを作ることもできます。Maya上級者ですねー。
モデルをプレビューするこの方法は、ブレンドシェープを何重にも行っている場合に途中の結果を見てみたり、効率アップするために時々使える方法です。いつもいつも使うわけではありませんが強力なテクニックです。
Mayaで複雑な問題が起きた時、こうしてノードをたどれば大抵問題は判明します。
Mayaはノードの組み合わせで機能しています。個々のノードがバグっていなければ、全体としてもバグらないわけです。問題が起きればノードの一つ一つを調べれば問題が必ず判明します。こういった堅牢性が大規模開発を支えているわけですね。
次回はノードに関連した話をいくつかしていきたいと思います。
Mayaでインスタンスがどのように作られているか理解すれば、Mayaがいっそう面白く思えてくることでしょう。ちょっと難解ですががんばっていきましょう。
インスタンスとはナニやつ?
皆さんはインスタンスを使われているでしょうか?同一のメッシュ、NURBSオブジェクトを別々の場所にコピーするアレです。
どれか一つの形状を編集すれば、ほかの場所の形状も変わります。

インスタンス、便利だけれどもなんとなく謎めいた機能ですね。でもここまで読んだ皆さんなら、仕組みを理解することができます。
まずインスタンスを作ってみましょう。
1)Create > Polygon Primitives > Cubeでキューブを作ります。
2)Edit > Duplicate Special□でオプションウインドウを開きます。
3)以下のオプション設定にして実行してください。Geometry typeがInstanceになってればインスタンスが作られます。

一つのオブジェクトのコンポーネントを選択して、もう一方のオブジェクトのコンポーネントも選択されれば無事インスタンスされています。

さて、Window > Hypergraph: Hierarchyでハイパーグラフを開きましょう。

オブジェクトが二つ表示されています。特に変なところはありません。
ハイパーグラフのメニューでOptions > Display > Shape Nodesのチェックを入れてみてください。下図の様に表示が変わります。

紫色に表示されているノードはインスタンスであることを示しています。さっきは二つオブジェクトが表示されていたのに、meshノードは一つしか表示されていません。つまりインスタンスとは
「複数のtransformノードの位置に、一つのmeshノードを表示している」
という状態なのです。(NURBSでも同様のことが起きています。)
よって他の3DCGソフトにあるようなインスタンスのオリジナルもしくはマスターみたいなものは存在せず、ただ一つmeshノードがあって表示する際に再利用されているだけなのです。これならデータは少なくなります。
ちなみにさっきハイパーグラフでShape Nodesというメニューがありました。meshノードやらNURBS、カーブなど、形状に関するノードはすべてシェープノードと呼ばれます。transformはこれらシェープノードと連携してオブジェクトを表示します。
ヒストリのプレビュー
シェーダーを作る時、シェーダーネットワークの途中でどのような結果になっているか見るためにlambertやらをつなげて結果を見ることがあります。
例えば上図のシェーダーでは、最終的な結果に反射が入っているので地の色が見難いですね。なのでカラーだけを別のlambertに接続して色を見やすくしています。
実はモデリングしているメッシュでも同じことができます。
実際にやってみましょう。
1)Create > Polygon Primitives > Cubeでキューブを作ります。

2)Edit Mesh > Bevelを実行して面取りします。

3)Mesh > Smoothでスムースします。

こういうオブジェクトではヒストリでベベルを調整しても、そのあとのスムースのせいでどのぐらいベベルが効いているかわかりません。
スムースのNode StateをHasNoEffectにすればベベルの効きはわかりますが、スムースされた結果がわからないので困ります。というわけでヒストリをプレビューできるようにしましょう。
4)キューブを選択し、Edit > Duplicateで複製します。(単純な複製を行い、ヒストリを削除しておきます。)
5)プレビューしやすいように、複製したキューブ(おそらくpCube2)をちょっと横に移動しておきましょう。

6)二つのキューブを選択し、Window > Hypergraph: Connectionsでハイパーグラフを開きます。

7)pCube2(transfrom)を選択して、下矢印キーを押します。するとpCube2のmeshノードが選択されます。

pCube2のmeshノードはpCubeShape2であることがわかります。
(transformノードを選択して下矢印キーを押すとシェープノードを選択できます。逆にシェープノードを選択して上矢印キーを押すと、transformノードを選択できます)
8)べベルのヒストリはpolyBevel1です。このノードのアイコンの上で中マウスボタンを押して、ドラッグしてpCubeShape2の上に持っていき、ドロップします。

メニューが表示されるのでOther...を選択します。Other...を選択するとコネクションエディタが開きます。
9)左側(polyBevel1)はOutputを選択し、右側(pCubeShape2)はIn Meshを選択します。

OutputとIn Meshが接続されます。
これでベベル処理されたメッシュデータがプレビュー用メッシュに流し込まれるようになりました。
さて、モデリングビューを見てみましょう。

先ほどまでスムースされた時の形状だったはずなのに、ベベルされたモデルが表示されていることでしょう。
どちらのオブジェクトを選択しても、ヒストリには共通のpolyBevel1というベベルのヒストリが表示されます。片方のアトリビュートを変えればもう一方も変わります。
これもインスタンスの一種みたいなものですね。
こうして自前で上手くヒストリを構築することで、ひとつの編集を行えば様々なオブジェクトが更新されるシーンを作ることもできます。Maya上級者ですねー。

モデルをプレビューするこの方法は、ブレンドシェープを何重にも行っている場合に途中の結果を見てみたり、効率アップするために時々使える方法です。いつもいつも使うわけではありませんが強力なテクニックです。
まとめ
今回はインスタンスの構造を見てみました。さらにノードの編集も行ってみました。モデルのプレビューを行えばヒストリのどの時点で問題が起きているか調べることもできますし、壊れてしまったオブジェクトがあったとしてもヒストリの途中からモデルを抽出することもできます。Mayaで複雑な問題が起きた時、こうしてノードをたどれば大抵問題は判明します。
Mayaはノードの組み合わせで機能しています。個々のノードがバグっていなければ、全体としてもバグらないわけです。問題が起きればノードの一つ一つを調べれば問題が必ず判明します。こういった堅牢性が大規模開発を支えているわけですね。
次回はノードに関連した話をいくつかしていきたいと思います。