❏ はじめに
この記事では、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” を使わないときは、パラメーターが隠れるようにしています。
これにより、ノードの情報量を減らしミスを抑制できます。
❐ 処理の全体像
【処理の全体像】
- 中心位置を原点に移動
- 「up_vector」方向に回転
- デフォーム(Tapper, Twist) 処理
- 回転の回転を初期状態に戻す
- 中心位置を初期状態に戻す
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 | 値 / 配列番号 | 回転角度 |
---|---|---|
X | 0 | ( 0, 0, 90 ) |
Y | 1 | ( 0, 0, 0 ) |
Z | 2 | ( 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 をカスタマイズし、ユーザビリティを向上できる
今回解説した内容はあくまでデフォーム処理の最小構成です。
使いやすいように拡張し、自分オリジナルの「デフォーム」ノードを開発してみましょう!