筆者環境
・Bifrost2.3.1.0
・Maya2020.2

今回は主にリギングやプロシージャルモデリングでの使用頻度の高いデータタイプを取り上げます。Mayaとは使用感の違うものもあるので注意してくださいね。
(当ブログで[]でくくっているものはBifrostGraphEditor内のノード名です)

Valueノード

[value]ではBifrostで扱える全てのデータタイプの値を新規作成できます。パラメータエディタで[…]ボタンを押すとデータタイプを指定するウィンドウが開きます。タブで以下のようにカテゴリ分けされています。

  • Simple : 単数やブール、文字列
  • Vector : 2,3,4次元のベクトル
  • Matrix : 2×2~4×4のマトリックス
  • Other : enumやカスタムデータタイプ


もう一つ[value]の重要な機能として、データのコンポーズ/デコンポーズが行えます。

Vector 2/3/4  (Math::float2/3/4)

Bifrostのベクトル型で指定できるのは数値の次元と精度だけです。例えばUV/Euler/Quaternion/Colorといった用途を特定したデータタイプは存在しません。Bifrostでは以下のようになります。

  • UV = Vector2
  • Position/Normal/Euler/Color(RGB) = Vector3
  • Quaternion /Color(RGBA) = Vector4

頂点位置も法線もカラーも全てVector3という共通のデータデータタイプなので取り回しは便利なのですが、一方でそれぞれに適切な初期値が設定されないという問題を抱えています。
例えばトランスフォームを扱うノードの場合、初期値はScale=1,1,1/Rotation=0,0,0/Translation=0,0,0が望ましいですよね。ですがscaleもtranslationもただのVector3なので初期値は0,0,0になっています。Rotation(Quaternion)もただのVector4ですから初期値は0,0,0,0です。
この初期値の問題については今後対応が予定されていますが、それまではscale=1,1,1/Rotation(Quaternion)=0,0,0,1と手動で設定する必要があります。

Matrix 4×4  (Math::float4x4)

リギングでよくお世話になる4×4のMatrixです。注意すべき点はBifrostのマトリックスはColメジャーということです。MayaのマトリックスはRowメジャーですので、掛け算はMayaとは逆順になります。

Matrix4x4もVector4を4つ持ったデータという扱いなので、初期値はゼロマトリックスとなっています。こちらも初期値の対応がされるまでは手動で単位マトリックスにする必要があります。ご注意ください。

FCurve

グラフ上でFカーブを作成し、カーブ上の値を取得することができます。プロシージャルモデリングでは重宝するデータタイプですね。一見RampタイプのアトリビュートとしてMayaへ公開できそうに思うのですが、残念ながらできません。今後に期待です。

GeometricObject::Strands

BifrostにはCurveタイプは存在しません。代わりに直線でカーブを構成するStrandsというデータ型が用意されています。

MayaのCurveからStrandsへの変換には頂点数や頂点位置を指定するオプションが用意されています。詳しくは#01 input-Curveをご覧ください。またStrandsのデータ仕様を詳しく知りたい方は、 Jeanmouginさんのプライベートブログを参照してください。
https://maximejeanmougin.com/2020/09/08/bifrost-strands/

Strandsの値の編集は次にGeometricObject::Meshで紹介するノード群を使用できます。

GeometricObject::Mesh

ポリゴンメッシュのデータタイプです。頂点、法線、UVといった基本のアトリビュートへのアクセスは専用のノードが準備されているので、値の取得や設定は簡単に行えます。

頂点位置

  • [get_point_position]
  • [set_point_position]

ポイント法線

  • [get_point_normal]
  • [set_point_normal]

UV

  • [get_mesh_UVs]
  • [set_mesh_UVs]

.

その他のプロパティー

これら以外のアトリビュート(プロパティー)は、[get_geo_propaty]でプロパティー名とデータタイプを指定して取得することができます。

例としてバーテックスカラーの取得方法を見てみましょう。
まず下図はバーテックスカラーを持ったメッシュデータを入力した状態です。(カラーセット名は”colorSetABC”, カラーチャンネルはRGBAです)
ウォッチポイントで見てみると同じ名前とデータタイプのプロパティーを持っていることが確認できます。

これを取得するには[get_geo_propaty]にメッシュを接続し、「property=”colorSetABC”、type=float4 array」をセットします。これで該当するプロパティーのデータをdataポートから取得できます。

 

MeshデータをMayaへ出力する方法は少し特殊です。
vectorやmatrixと同じように[output]に接続するとビューポート上にメッシュが表示されますが、これはコンポーネントの選択や編集ができないBifrostShapeという特殊なデータです。
これをMayaのMeshデータに変換したい場合はMayaのノードエディタ上でbifrostGeoToMayaノードを介する必要があります。

少々面倒ですが、これはデータ変換コストを抑えるための措置です。

.

terminal

[terminal]を用いるとBifrostGraph上のジオメトリデータをビューポート上に手軽に描画することができます。


入力には3つのグループが準備されていて、各グループの描画のON/OFFはノード下部のF/P/Dボタンで行えます。この3グループは
・最終レンダリング用のジオメトリ
・イメージ確認用の軽量ジオメトリ
・デバッグ用の簡易ジオメトリ
といった使い分けを想定したものです。
詳しくは公式ドキュメントをご覧ください。

最後に

今回は個人的に使用頻度の高いデータタイプを紹介しました。中でも注意が必要なのはMatrixの掛け算の順番についてですね。これまでMayaでリギングされてきた方には間違いやすい箇所かと思います。

次回「ポートのアイコンと特殊機能」ではBifrostのノードエディタの特徴の一つであるポート形状について見ていきます。
ではまた~。

高島 正規
テクニカルアーティスト

長年シネマティックアーティストとしてフェイスリグやフェイシャルモーションの制作を担当。現在は技術戦略グループに所属し、DCCツールのプラグイン開発のための内製C++ライブラリの構築と、Bifrostを用いたツール開発を行っている。