肩のポージングは難しい。
例えば、以下の順にポーズを変えたとする。
① 上腕を真横に伸ばした状態
② 正面から見た状態で上腕を45度、下に下げる。
③ 真横から見た状態で上腕を45度、前に上げる
④ 真横から見た状態で上腕をさらに45度、前に上げる
④のとき、わきの下が上腕の付け根で前方にねじれあがって
皺のようになってしまう。
この状態を直すためには、上腕の方向は変えないまま上腕をねじる必要がでてくる。
具体的には 腕のBone の rotation_quaternion の Y が 0 (※1)になるように調整する。
④の時、Y≠0では肩の付け根にある わきの下が広がったような縦方向の皺が、Y=0の時は消えている。( ④Y=0 は ① から上腕を前に曲げた結果と一致する。 )
と…ここまでは簡単そうに書いたが…
単純に Y≠0 のみを Y=0 に変えると、腕の方向が変わってしまう。
また仮に腕の方向を合わせることができても、今度は肘の曲がる方向も同時に変わるので別途調整する必要が出てくる。
これらを調整するのは結構難しい。
何か良い方法がないものかと模索中だが、方向を変えないで Y=0 にする方法は計算で出せそうだ。
今回も試行中の計算式で出した結果を使ったのだが、そのうちここで書くかも?^^;
※1 quaternion の Y=0 の意味について
quaternion の X,Y,Z は、回転軸のベクトルに比例している。
またBoneの座標系は、Boneの向きがY軸となっている。
よって Y=0 にすると Boneの回転軸は
Boneの方向に対して垂直な面に含まれることになる。
これによって回転によるねじれが防げる。
ちなみに Eurerだと Y=0にしても意味がない。
(必ずしもquaternionのYが0にならないので…)
例えば、以下の順にポーズを変えたとする。
① 上腕を真横に伸ばした状態
② 正面から見た状態で上腕を45度、下に下げる。
③ 真横から見た状態で上腕を45度、前に上げる
④ 真横から見た状態で上腕をさらに45度、前に上げる
④のとき、わきの下が上腕の付け根で前方にねじれあがって
皺のようになってしまう。
この状態を直すためには、上腕の方向は変えないまま上腕をねじる必要がでてくる。
具体的には 腕のBone の rotation_quaternion の Y が 0 (※1)になるように調整する。
④の時、Y≠0では肩の付け根にある わきの下が広がったような縦方向の皺が、Y=0の時は消えている。( ④Y=0 は ① から上腕を前に曲げた結果と一致する。 )
と…ここまでは簡単そうに書いたが…
単純に Y≠0 のみを Y=0 に変えると、腕の方向が変わってしまう。
また仮に腕の方向を合わせることができても、今度は肘の曲がる方向も同時に変わるので別途調整する必要が出てくる。
これらを調整するのは結構難しい。
何か良い方法がないものかと模索中だが、方向を変えないで Y=0 にする方法は計算で出せそうだ。
今回も試行中の計算式で出した結果を使ったのだが、そのうちここで書くかも?^^;
※1 quaternion の Y=0 の意味について
quaternion の X,Y,Z は、回転軸のベクトルに比例している。
またBoneの座標系は、Boneの向きがY軸となっている。
よって Y=0 にすると Boneの回転軸は
Boneの方向に対して垂直な面に含まれることになる。
これによって回転によるねじれが防げる。
ちなみに Eurerだと Y=0にしても意味がない。
(必ずしもquaternionのYが0にならないので…)