前回はBifrostで簡単なグラフを組んで、指定したシェイプの頂点位置を別のシェイプに適用してみました。
tm8r.hateblo.jp
今回はもうちょっと現場で使えそうなものを組んでみます。
Mayaのブレンドシェイプはターゲットシェイプの頂点の移動のみをViewPort上で反映してくれます。
ただUnity2018.3からブレンドシェイプの法線も使えるようになったようなので、Mayaでもある程度確認ができると便利そうです。
これはもしや、Bifrostで解決できるのでは…?
頂点位置の移動をブレンドする
というわけでBifrostを使ってやってみましょう。
なにはともあれまずは頂点移動をブレンドするところから。
シーンの構成はこんな感じです。
- ベースシェイプ(geo_base)
- ターゲットシェイプ(geo_target)
- Bifrostの結果を適用するシェイプ(geo_result)
geo_baseをコピーしてgeo_targetとgeo_resultを作成し、geo_targetをよしなに変形しておきます。
そしてBifrostグラフエディタを開いて以下のようなグラフを組みます。
前回の記事ではinputは1つのgeometryを取る形になっていましたが、今回はgeometryが2つ、さらにweightという値を取るようになっています。
ちなみにPortの名前は右クリックで「Rename Port」から変えられるので、わかりやすい名前をつけておきましょう。
ノードの名前は名前をダブルクリックすることで変更できます。
valueノード
weightはvalueノードです。
valueノードは名前の通り変数の定義ができるノードです。
ノードを選択して「…」を選択することで型を変更することができます。
今回はSimpleのfloatで作成しました。
lerpノード
math系のライブラリを使ったことあるやグラフエディタの扱いに慣れている方にはお馴染みのやつです。
base_geometryとtarget_geometryの頂点位置をとる2つのget_point_positionがそれぞれlerpノードのfirstとsecondに繋がっています。
さらに上で説明したweightがfractionに繋がっています。
こいつが何をしてくれるかといと、fractionの値が0のときfirstの値を、1のときsecondの値を、0.5のときfirstとsecondの間の値を出力してくれます。
まさにブレンドシェイプにもってこいですね!
あとはこの出力結果を前回も使ったset_point_positionに繋いでやればおっけーです。
頂点移動の動作確認をしてみる
グラフがここまで組めたら、前回同様にノードエディタでよしなに接続してあげます。
グラフのノードを選択するとinputのPort「weight」がアトリビュートエディタに表示されてます。
これを0-1の間で移動してみましょう。
やったーできたよー!
おわり
というわけでブレンドシェイプっぽいものがBifrostで作成できました。
次はここに法線情報も適用するものを作ってみます!