西暦 2018 年 07 月 11 日
素人が一人前のHoudiniマスターになるまでの記録 No.0032

ボーンの位置を調整したい時、
チュートリアルに従うならRiggingシェルフからBonesツールを起動して
マウスでドラッグしてボーンを移動するのだけれど・・・

プロシージャルモデリング的な観点から、
計算でボーンの位置を決めたい!


と、思い立ち試みる。


どうやら Bone をただ Translate するだけではダメそうなので少し調べてみた。

・・・
ここから長い闘いの末
・・・

できた!

 

自前で作ったNullノードのコントローラーで、ボーンの構造を調整できるようになった。
長かった。。。


----
以下、わかったことやハマったことの記録。

まずわかったこと。
・ボーンの構造は、どうやらボーンのPre-Transformの回転とBoneLengthパラメータで成り立っているらしい。
  -> つまりここに計算式を入れてやればよさそう。
・計算式ってxyz成分それぞれで書かないといけないの?しんどくない?相対角度計算とかどうするの?
    -> CHOPノードにObjectノードというものがあった。これで相対位置や角度や距離が計算できる。
・チャンネルパラメータへのアクセスはchop("~")。※ch("~")じゃない!。

  -> かなりの時間ハマった…。
・pre-Transformのrotに入れる値は、Objectノードの Compute モードを "Bearing" に指定すれば計算できそう。
  -> うまくいった!

だが・・・

・2本目以降のボーンの向きがなぜか合わない!

たぶんどこか回転軸の座標系が間違っている・・・

ここから長考…の末わかったこと。

・ボーンの向きは -Z 方向。(なぜか)
・BearingVectorパラメータに入れるベクトルはボーンのローカル座標系
・したがってBearingVectorパラメータには
 「親ボーンの座標系における-Z方向ベクトル(0,0,-1)」を
 「今操作したい子ボーンのローカル座標系に変換したベクトル」
 を入れるのが正しい。

 

その結果生まれたネットワークはこんな感じ。


はたしてこれで合っているのか?もっと効率のよい方法があるのではないか?
と、もやもやはするものの
自分の今の知識ではどうせ答えはでないので、いまのところはひとまずこれで。