【Maya】コントローラーをフォーカスし易くする話

はじめまして!

日々成長する赤子に奮闘しつつ可愛さに喜びが止まらない、狸塚です。
いくつか言葉で意思を示せるようになり、「自分でやりたい」という欲求が爆発している我が子によって、
食後のテーブルは文字通り爆発している我が家です。
成長には失敗が付き物ですね!(白目)

さて、今回は、Mayaでリグのコントローラーを丁度良くフォーカスする為の、 シェイプに関する小話を書きたいと思います。
………地味です。
が、アニメーション作業する際のストレスを軽減できたり、
部位の確認がし易くなることもあると思いますので、
最後までお付き合い頂ければ幸いです。

フォーカスのし易さとは?

まずは、フォーカスがし易い/しにくい、がどういうことか見てみたいと思います。

上記は、例として首のコントローラーをこのような形状にした場合のフォーカスの違いです。
←は、首自体にフォーカスできており、操作しやすいフォーカスだと考えております。
→は、コントローラー自体にフォーカスしてしまい、見たいモデルから離れてフォーカスしてしまう為、操作し辛いフォーカスと考えております。

要は、
「操作するモデルの対象部位をフォーカスする」方が操作しやすく、
「コントローラーをフォーカスする(ことで、モデルと違う場所をフォーカスしてしまう)」と操作し辛い、のではないかと考えました。

トランスフォームとシェイプの関係

まずは前提をさっと確認していきます。

Mayaの階層を持てるノード(DAGノード)は、
移動/回転/スケールなどのトランスフォームを持つノード(トランスフォーム系ノード)と、
見た目を表現するノード(シェイプ系ノード)があります。

位置などを表すトランスフォームノードに、
見た目などを表すシェイプノードがぶら下がっている構成です。

シェイプの表示



シェイプノードを直接選択したい場面が少ないため、
アウトライナ上では、普段は表示されておらず、
ディスプレイ > シェイプ のチェックボックスをONにした場合に表示されます。

ビューポートでの選択


ビューポート上で、オブジェクトを選択すると、
触っているのはシェイプノードですが、選択されるのはトランスフォームノードになります。

色々なシェイプ


色々とあるノードも、
みんなトランスフォームにシェイプとしてぶら下がっています。
ただ、ジョイントノードだけは、シェイプがぶらさがっていません。
ジョイントは、トランスフォームノードの親戚で、同様に移動/回転/スケールなどを表すノードです。
見た目がありますがシェイプノードはぶら下がっていません。
ちょっと特別なんですね。

シェイプの移動


アウトライナで、
シェイプを他のトランスフォームに移動しようとしても、移動できません。
トランスフォームごと移動してしまいます。

ただ、スクリプトでは移動ができます。

  1. 移動させたいシェイプを選択し(複数選択可)、最後に移動先のトランスフォームを選択します。
  2. 下記pythonスクリプトを実行します。
from maya import cmds
cmds.parent(*cmds.ls(sl=True), shape=True, relative=True)

 


シェイプを選択するのが面倒だな~という場合は、 下記のような感じでスクリプトを書き換えると、 選択したトランスフォームノードにぶらさがっているシェイプを全て移動できます。

from maya import cmds
sl = cmds.ls(sl=True)
srcs = sl[0:-1]
dst = sl[-1]
src_shapes = []
for transform in srcs:
    shapes = cmds.listRelatives(transform, shapes=True, fullPath=True) or []
    src_shapes.extend(shapes)
cmds.parent(*src_shapes, dst, shape=True, relative=True)

ジョイントにもシェイプを付けることができる

ジョイントノードにも、シェイプをぶら下げることができます。

 

シェイプに関するフォーカスの挙動を確認

以上が、「トランスフォーム」と「シェイプ」の関係の確認でした!
さて、ここから地味な内容を確認していきます。

異なるシェイプを持つトランスフォームのアイコン表示

先程の色々なシェイプノードを含むトランスフォームの場合、
アウトライナのシェイプ表示をOFFにしたら、どのシェイプアイコンが表示されるでしょうか?

一番上のシェイプが代表して、トランスフォームのアイコンに採用されるようです。

複数シェイプを持つトランスフォームをフォーカスする

次に、複数のシェイプを持っているトランスフォームをフォーカスする場合を見てみます。

フォーカスすると、「1」のシェイプがフォーカスされました!
一番上のシェイプです。
やはり、複数のシェイプを所持していても、代表として扱われるのは一番上のシェイプのようです。

シェイプを非表示にした際のフォーカス

次に、シェイプを非表示にした場合のフォーカスを見てみます。
シェイプの表示/非表示を切り替えフォーカスします。
非表示にするとカメラの動きが分からなくなってしまうので、比較用にジョイントを置いています。
 
とても地味で分かりにくいのですが…!
左は、キーボードの A と F を交互に押し、全体⇔フォーカスを繰り返しています。
全体(小さく映ってる)⇔フォーカス(大きく映ってる)
全体の時、フォーカスの時、の見た目をお伝えする為のgif画像です。

「オブジェクトディスプレイ」の「可視性」

真ん中は、「オブジェクトディスプレイ」の「可視性」をON/OFFし、Fでフォーカスのみ行っています。
シェイプが表示されている(可視性ON)の際は、フォーカスされています。
シェイプが表示されていない(可視性OFF)の際は、なぜか全体へフォーカスされてしまいます。

「描画オーバーライド」の「可視性」

右は、「描画オーバーライド」の「可視性」をON/OFFし、Fでフォーカスのみ行っています。
シェイプが表示されている/いない(可視性ON/OFF)どちらでもフォーカスされています。

このことからシェイプを非表示にする際は、
「描画オーバーライド」の「可視性」を使用すれば、問題なくフォーカスできることが分かりました。

フォーカスに関するシェイプの特徴

上記で確認したのは、下記2点です。

  • フォーカスに使用されるのは、1番上のシェイプ形状
  • シェイプを非表示にする際は、描画オーバーライドの可視性をOFFにすれば問題なくフォーカスされる

冒頭のフォーカスの違い

冒頭のフォーカスの違いは、1番上のシェイプ形状の違いでした。


←は、非表示にしたボックス形状のシェイプが一番上にあり、
こちらがフォーカス用のバウンディングボックスの役割を果たしておりました。
どのようなフォーカス具合にするかは、このシェイプ形状を修正すればよいという訳です。

→は、サークルが一番上のシェイプになっている為、サークルにフォーカスされています。

以上が、コントローラーを丁度良くフォーカスする小話でした!
シェイプ形状にこだわった際に、上下前後左右が対称距離ではないが故に、注視点がズレてしまうことはよくあると思います。
その際は、このような方法で、フォーカス用のシェイプを用意することで、
フォーカスにもこだわったコントローラーを作成することができると思います。

とても地味でちょっとした話ですが、どなたかのお役に立てておりましたら幸いです。
最後までご覧頂き、ありがとうございました!

mamizukaakihiro

自称リガー/アニメーションツール系担当。カートゥーン的な自由で柔らかいデフォームが好き!

関連記事

  1. 【Maya】MELの「More than one object matches name」の回避

    2019-08-20

  2. 【Maya】日本語optionVarはTAを恐怖のドン底に叩き込んだ!

    2019-10-15

  3. 【Character】ジョイントの回転軸の向き、どう決める?

    2025-09-02

  4. 【Maya】意外と違う!?
    キャラと背景でのデータ作法の違い!!
    第1回

    2024-07-02

スキルレーダーチャート

テクニカルアーティスト専用
スキルレーダーチャート
どなたでも無料でご利用いただけます。

ABOUT

TECH COYOTE​

テクニカルアーティストのためのまとめサイトです。​
本サイトでは、ツール開発、業務効率化等について情報発信をしていきます。

COYOTE 3DCG STUDIO

C&R Creative Studios

難易度別

RECENT TWEET

ページ上部へ戻る