【Bifrost:Maya】オリジナルのデフォーム(Taper, Twist) 作成方法

❏ はじめに

この記事では、Bifrost でデフォーム(Taper, Twist)を作成する方法を解説します。

対象読者

・エフェクトデザイナー
・テクニカルアーティスト
・Bifrost に興味があるデザイナー

筆者環境

・Maya 2024
・Bifrost 2.11.0.0

❐ 目次

  1. メリット
  2. サンプルデータ
  3. ノードの UI 設定
  4. 処理の全体像
  5. 中心位置を原点に移動
  6. 「up_vector」方向に頂点位置を回転
  7. デフォーム
  8. 頂点位置の回転と中心位置を初期状態に戻す
  9. まとめ

❐ メリット

パラメーター削減、簡素化

Bifrost を使用し不要なパラメーターを削除した機能を作ることができます。
これにより、作業効率を向上させることができます。

視覚的な操作

「ファンクションカーブ」でグラフィカルに操作できます。

❐ サンプルデータ

以下の手順でサンプルデータを確認できます。
Bifrost はノードの情報を「テキスト」としてコピー&ペーストできます。
つまり、データのダウンロードをせずにデータのやり取りが可能です。

以下ボタンをクリック

「ノード情報のテキスト」がクリップボードに保存されます。

コピーボタン

②Bifrost 2.11.0.0 をダウンロード

Bifrost は Maya とは別に独自にバージョンがあります。
完了したら、Bifrost 2.11.0.0 をダウンロードしたバージョンの Maya を起動

③Bifrost Graph Editer にペースト

[Window > Bifrost Graph Editer]を開き、「Create Graph」をクリック

    [Ctrl + V]でペースト

      ❐ ノードの UI 設定

      Bifrost はノードの UI をカスタマイズでき、今回は以下のようにしています。
      記事の主題と異なる内容のため「なぜこの UI にしたのか」のみ解説し、「UI の作成方法」は解説しません。
      ※ 詳しくは Autdesk 公式ページの【コンパウンドの入力をカスタマイズする】をご確認ください。

      プルダウン形式

      up_vector” を簡単に選べるようにしています。
      ベクトルで軸を入力することもできますが、利便性を重視し軸を選択する形式にしています。

      使わない処理を隠す

      “taper” や “twist” を使わないときは、パラメーターが隠れるようにしています。
      これにより、ノードの情報量を減らしミスを抑制できます。

      ❐ 処理の全体像

      【処理の全体像】

      1. 中心位置を原点に移動
      2. 「up_vector」方向に回転
      3. デフォーム(Tapper, Twist) 処理
      4. 回転の回転を初期状態に戻す
      5. 中心位置を初期状態に戻す

      1, 4 によりメイン処理を変更せずに複数軸の処理が行えます。
      上記は最小構成のデフォーム処理であり、原点にメッシュがあることを前提としています。

      ❐ 中心位置を原点に移動

      【move_center の中身】

      まず、『array_bounds』で位置配列のバウンズを取得できます。
      左のようなバウンズボックスを取得しているイメージです。

      次にバウンズの中心を求めます。
      [バウンズの中心 = 頂点位置の平均] なので以下で求めることができます。

      [位置配列 – バウンズの中心]により、頂点の中心を “ワールド座標の原点” にすることができます。
      後半の処理で位置配列の中心を初期状態に戻す際必要があります。
      そのため、バウンズの中心を『Output』ノードにつなぎ「move_amount」として出力します。

      ❐ 「up_vector」方向に回転

      【make_quaternion の中身】

      ① 軸ごとに回転を設定

      「up_vector」 の UI は左のように設定しています。
      例えば、「X を選択した際は、値としては “0” 」を入力しています。

      値を配列番号として使用し、
      『build_array』で設定した回転角度の配列を『get_from_array』で取得します。

      Up Vector値 / 配列番号回転角度
      X0( 0, 0, 90 )
      Y1( 0, 0, 0 )
      Z2( 270, 0, 0 )
      ② 回転ベクター

      ①を『degrees_to_radians』でラジアンに変換し、『rotation_vector_to_quaternion』に入力。
      このノードに限らず Bifrost の回転系ノードは「ラジアン」で入力する必要があります。

      度(degree)とラジアン(radian)は、角度を表す単位です。
      1回転はそれぞれ、「degree = 360度」 / 「radian = 2π」

      ③頂点位置を回転

      ②の Quaternion で頂点位置を回転。
      Bifrost で回転処理を行う際は『rotate_by_quaternion』を使うことが多いです。

      ❐ デフォーム

      【make_quaternion の中身】

      [ノードの UI 設定 ]で解説したように、今回は使わない処理を隠しています。
      それに伴い「use_taper = False」のときは “taper” の処理を行いません。”twist” も同様です。

      頻出する処理

      『taper_geo』『twist_geo』の両方に『normalize_array』というノードを使用しています。
      このノードでは配列の正規化を行っています。
      以下の構成は “数学の公式” のように暗記していただきますと役立つ場面があるかと思います。

      【normalize_array の中身】

      taper

      【taper_geo の中身】

      今回のデフォーム処理は Y 軸を初期の「up_vector」として扱います。
      そのため、まずは位置配列の Y 座標を『normalize_array』で正規化。
      それを『evaluate_fcurve』に入力することで、ファンクションカーブで太さの形状を操作しています。

      太さの計算においては、X, Z 座標で vector 2 を作成し同時に処理。
      また、インプットの「taper」で太さに強度をかけられるようにしています。

      twist

      【twist_geo の中身】

      一言でいうと、『Y 座標が 低~高 になるにつれてより多く回転する』処理をしています。
      まずは『taper_geo』同様、位置配列の Y 座標を正規化し、ファンクションカーブでリマップ。
      その値を『input』ノードの「twist」と乗算することで Y 座標をもとにしたバイアスがかかります。

      Y 軸で回転させたいので『axis_angle_to_quaternion』を使用。
      「ラジアン」で入力する必要があるため、『degrees_to_radians』で変換。
      あとは『rotate_by_quaternion』で位置配列を回転させているだけです。

      ❏ 回転と中心位置を初期状態に戻す

      回転を初期状態に戻す

      現状だと「up_vector」方向にメッシュが回転しており、それをもとに戻します。
      単純に “A 度” 回転したのを “- A度” 回転させます。
      オイラー角で表現すると[(0, 0, 90)+(0, 0, -90)]の計算です。

      今回はクォータニオンで計算しているので『quaternion_invert』で “- A度” を作っています。
      その後は、これまで同様『rotate_by_quaternion』で位置配列を回転。

      中心位置を初期状態に戻す

      『move_center』で出力した「move_amount」を位置配列に加算するだけです。

      ❏ まとめ

      ・Bifrost は Maya の処理を使いやすくしたノードを作れる
      ・Bifrost ノードの UI をカスタマイズし、ユーザビリティを向上できる

      今回解説した内容はあくまでデフォーム処理の最小構成です。
      使いやすいように拡張し、自分オリジナルの「デフォーム」ノードを開発してみましょう!

      VFX_Haku

      3Dエフェクトデザイナー。たまに社内向け勉強会やってます。
      興味がある分野は業務効率化やワークフロー整備、シェーダー開発。Python学習中!

      投稿者記事

      1. READ MORE

        【Bifrost:Maya】スパイラルカーブ(ストランド)作成方法

        2024-11-14

      2. READ MORE

        【Bifrost:Maya】プロシージャルに頂点アルファを設定|業務効率化

        2024-10-17

      3. READ MORE

        【Bifrost:Maya】カーブにメッシュを添わせる(Curve_Warp)|業務効率化

        2024-09-10

      4. READ MORE

        【Bifrost:Maya】プロシージャルなUV制御|業務効率化

        2024-08-02

      関連記事

      1. READ MORE

        【Bifrost:Maya】スパイラルカーブ(ストランド)作成方法

        2024-11-14

      2. READ MORE

        【Bifrost:Maya】エフェクト用メッシュ作成事例|業務効率化

        2024-06-13

      3. READ MORE

        ピザで斬撃エフェクトは作れるのか?!

        2024-09-13

      4. READ MORE

        【Bifrost:Maya】プロシージャルなUV制御|業務効率化

        2024-08-02

      ページ上部へ戻る