今回はキャラクターリグでよく見かけるスライダーコントローラーの作り方を書いてみます。
作り方は簡単で前回の記事で紹介した Channel Relationship と Clamp ノードを使用します。アセンブリプリセットとして保存したとき便利なように、いくつか追加のステップがあります。
作成手順です。
- スライダーバーと、スライダーノブを準備します。スライダーバーとスライダーノブは移動しやすいように親子関係を設定しています。
スライダーはアイテム位置を取得できれば基本的にどんなアイテムを使用しても問題ありません。今回はロケータのカスタム シェイプを使用してスライダーバーとスライダーノブにしました。
スライダーバーには平面の「サイズY」は1mです。サイズは好きに設定して問題ありません。 - スライダーノブの「位置X」「位置Z」チャンネルをロックします。
プロパティで「位置X」「位置Z」チャンネルを選択して、右クリックメニューから「ロック/ロック解除」を設定します。これでノブが左右に移動することはありません。 - スライダーノブの「位置Y」をスケマティックに追加します。
- Clamp ノードを追加し、「入力」と「出力」を「位置Y」にリンクします。
Clamp のプロパティで「最小」を-0.5、「最大」を0.5に設定します。位置チャンネルでは 0.5=500mm としてあつかわれます。スライダーバーの高さは1mに設定しているので、ノブの移動範囲を-500mm~500mmに制限したことになります。 - スライダーバーアイテムに「ユーザーチャンネル」を追加します。
好きな名前をチャンネルを追加します。チャンネルタイプは「浮動小数点」を使用しましたが、数値をあつかえればどのタイプでも大丈夫だと思います。「ユーザーチャンネル」を追加するアイテムも好みで選んで問題ないです。 - Channel Relationship ノードを追加し、「入力」を「位置Y」とリンクします。「出力」を作成した「ユーザーチャンネル」にリンクします。
なぜ Channel Relationshipを「ユーザーチャンネル」にリンクしたかというと、スライダーを「アセンブリプリセット」として再利用するためです。
ノードのチャンネルを直接「アセンブリ出力」にリンクした場合、アセンブリのロードで出力チャンネルが消えてしまうことがあります。消える理由は謎ですが、「ユーザーチャンネル」を経由させることでアセンブリの保存と読み込みが正常にできるようになります。 - Channel Relationship と Clampノードをアイテムにペアレントします。
アイテムツリーで Channel Relationship 、 Clamp 、スライダーバーアイテムの順番選択して、コマンド行に「item.parent」を入力してEnter。チャンネル モディファイヤノードの親子関係を設定します。こうすることでアセンブリプリセットとして他のシーンにアイテムを読み込んだ場合に便利になります。modoのチャンネル モディファイヤはデフォルトでシーンアイテム(カチンコ)以下にノードを生成します。チャンネルモディファイヤをアイテムにペアレントしておくことで、スライダーバーアイテムを削除したとき同時にチャンネルモディファイヤも削除されるためシーンに未使用ノードを残さずに済みます。
ノードが組み上がったら「スケマティックアセンブリ」を新規に追加して、スケマティックのマウス右クリックメニューから「ノードの移動先」を使ってアセンブリ内にノードを移動します。
上の画像にはグループロケータが含まれています。個人的な好みですが、アイテムツリーではスケルトンもロケータも同じアイコンで見づらいので、アセンブリを保存するときはアイテムをグループロケータにまとめています。グループロケータはアセンブリ内に入れておくことで、親子関係を維持したままアセンブリを読み込むことができます。
アセンブリに「サムネイルを置換」でサムネイルを追加して、「アセンブリプリセットの保存」すると、いつでもシーンにスライダーを読み込んで再利用することができます。
最後に指をスライダーで制御するデモです。
スライダーバーの高さを1mで作りましたが、スケールを使ってシーンで見やすいようにサイズを調整できます。なかなか便利なんじゃないかと思います。
次回は引き続きボックス型のスライダー?トラックパッド コントローラの作り方について書いてみたいと思います。