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

❏ はじめに

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

対象読者

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

筆者環境

・Maya 2024
・Bifrost 2.11.0.0

❐ メリット

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

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】エフェクトメッシュ作成ツール紹介

    2025-02-06

  2. READ MORE

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

    2024-11-14

  3. READ MORE

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

    2024-10-17

  4. READ MORE

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

    2024-09-10

関連記事

  1. READ MORE

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

    2024-08-02

  2. READ MORE

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

    2024-10-17

  3. READ MORE

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

    2024-09-13

  4. READ MORE

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

    2024-06-13

ページ上部へ戻る