【Maya】Bifrostで法線も適用するオレオレブレンドシェイプをつくる(前編)

前回はBifrostで簡単なグラフを組んで、指定したシェイプの頂点位置を別のシェイプに適用してみました。
tm8r.hateblo.jp

今回はもうちょっと現場で使えそうなものを組んでみます。

Mayaのブレンドシェイプはターゲットシェイプの頂点の移動のみをViewPort上で反映してくれます。
ただUnity2018.3からブレンドシェイプの法線も使えるようになったようなので、Mayaでもある程度確認ができると便利そうです。
これはもしや、Bifrostで解決できるのでは…?

頂点位置の移動をブレンドする

というわけでBifrostを使ってやってみましょう。
なにはともあれまずは頂点移動をブレンドするところから。
f:id:tm8r:20190823123613p:plain
シーンの構成はこんな感じです。

  • ベースシェイプ(geo_base)
  • ターゲットシェイプ(geo_target)
  • Bifrostの結果を適用するシェイプ(geo_result)

geo_baseをコピーしてgeo_targetとgeo_resultを作成し、geo_targetをよしなに変形しておきます。

そしてBifrostグラフエディタを開いて以下のようなグラフを組みます。
f:id:tm8r:20190823124610p:plain
前回の記事ではinputは1つのgeometryを取る形になっていましたが、今回はgeometryが2つ、さらにweightという値を取るようになっています。

f:id:tm8r:20190823124858p:plain
ちなみにPortの名前は右クリックで「Rename Port」から変えられるので、わかりやすい名前をつけておきましょう。

f:id:tm8r:20190823125010p:plain
ノードの名前は名前をダブルクリックすることで変更できます。

valueノード

weightはvalueノードです。
valueノードは名前の通り変数の定義ができるノードです。

f:id:tm8r:20190823125401p:plain
ノードを選択して「…」を選択することで型を変更することができます。
今回は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に繋いでやればおっけーです。

頂点移動の動作確認をしてみる

グラフがここまで組めたら、前回同様にノードエディタでよしなに接続してあげます。
f:id:tm8r:20190823130409p:plain

f:id:tm8r:20190823130353p:plain
グラフのノードを選択するとinputのPort「weight」がアトリビュートエディタに表示されてます。
これを0-1の間で移動してみましょう。

f:id:tm8r:20190822095242g:plain
やったーできたよー!

おわり

というわけでブレンドシェイプっぽいものがBifrostで作成できました。
次はここに法線情報も適用するものを作ってみます!

スポンサーリンク