技術だけでは作れない。けれど、集中して作る為の術は技に有ると思います。
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ユーティリティ関数はこれでようやく半分かぁ。
相変わらず地味で眠気を誘うような記事ばかりです。
(ホントに自分得でしかないような気が・・・。)
「Morph Link」と「Muscle Bone」を学んでいきます。
今回はモチモチとした記事になりそうです。
【Morph Link】
mapRangeと同じじゃないですかーっ!
mapRange([Null.Position.Y],0.000,1.000,0.000,1.000)
※アイテムの最小値。
※アイテムの最大値。
※モーフの最小値。
※モーフの最大値。
Morph Linkという名の「mapRange(値の再割り当て)」ですw
これはもう説明することが無いですね。
ただそれだけの機能です。
【Muscle Bone (Primary)】:基本
今までマッスルボーンを作る時はスケールをIK制御でおこなっていました。
IKは多用するとシーンに負荷をかける原因になるので避けていたんですけど、このExpressionはどうなんでしょうねぇ?
実際に作成するとこのような数式になりました。
Expressionを適用して制御した結果・・・
mapRange( ( vmag( Null.wpos(Time)- CTRL.wpos(Time)) ), 0, 1.000, 0, 1 )
※:ボーンの親元のオブジェクトアイテム。
※:Z軸ボーンの終端をくっ付けさせる為のNull。(スケール位置の目標アイテム。)
※:ボーンの固定長の最小値。
※:ボーンの固定長の最大値。(ボーンの長さ入力)
※:最小値、最大値の倍数。
あぁ、これ良いですね。
一本のボーンと2つのオブジェクトアイテムでこの動きが可能になっています。
Nullを動かしてみるとIK制御した時と同じような結果が得られましたが、このボーンにはゴールアイテムを設定する為の子ボーンを必要としないのでボーンの本数を削減出来ます。
(このボーンにはスケールのXYZにこのExpressionを適用しています。)
ジョイントの場合は、子ジョイントを追加してジョイントボーンを作り親のジョイントにExpressionを適用します。
そして、子ジョイントの位置が固定長になるのでその値を入力すればジョイントのマッスルボーンの出来上がりです。
一応ジョイントボーンでも使える事が分かりましたけど、ボーンアイコンのスケールの変化が極端ですね。
そこがちょっと難点です。
【Muscle Bone (Optional A)】:オプションA
これは上の「Muscle Bone (Primary)」のExpressionと組み合わせて使うオプション制御です。
マッスルボーンは一軸方向(Z軸)の伸縮のみ有効でXY軸はスケール1.0のままでした。
Z軸のチャンネルを入力値に対してXY軸のスケールを伸縮する数式を入力していきます。
1 / sqrt([ct_01.Bone (1).Scale.Z])
※:デフォルトのボーンのスケール。
※:平方根。
※:「Muscle Bone (Primary)」を適用したボーンのZ軸。(入力値)
お?まだ使った事の無い数学関数の「sqrt」(平方根)が出てきましたね。
早速この関数の意味を知っていきましょう。
平方根は累乗の逆バージョンです。
累乗では二乗した数を求めていたことを、平方根では二乗する前の数を求めるようになります。
と言ってもピンと来ないので例を挙げていきましょう。
黄色のBoxのNullを4mの位置に移動してボーンのZ軸のスケールを4.0にしたとします。
このNullの移動した値が累乗の答えを意味していて、二乗にして4になる数は2と-2になります。
【累乗】
2の2乗=2×2=4 、 -2の2乗=-2×-2=4
さて、ここから平方根で表します。
累乗の逆だけあって、累乗の答えから解いていきます。
4の平方根の答えは
【平方根】
4=±2 (+2と-2)
と、こんな感じで簡単に答えが出ました。
累乗は2乗すると答えは必ず正の数になりますから、平方根は同じ数の正の数と負の数があります。
LWの場合はこの正の数の値を表していて以下のように計算されることになります。
1 / sqrt([ct_01.Bone (1).Scale.Z])
1/ +2
0.5
黄色のBoxのNullを4mの位置に移動してボーンのZ軸のスケールを4.0にするとXY軸のスケールは0.5になるということですね。
じゃあ、黄色のBoxのNullを500mmの位置に移動してボーンのZ軸のスケールを0.5にするとどうなるかな?
上のGIFを見ると、Z軸のスケールが1.0以上になれば細くなり、1.0以下になれば太くなります。
二乗にして0.5になる数は・・・えーっとどうなるんでしょう?
あ、こういう時の為に根号(√:ルート)が存在するんですよね。
0.5を分数にすると1/2になります。
そして、平方根は±√1/√2かな?
(まぁ、√1って1なんですけどね。)
で、今回は正の数を求めたいので+√1/√2の値はどのくらいのものなのか?
それもLWが自動で答えを出してくれているんですけど理解する為に自力で答えを出してみます。
まずは0.5×0.5はどうでしょう?
答えは0.25・・・値が小さすぎますね。
0.6×0.6=0.36<0.5
0.7×0.7=0.49<0.5
0.8×0.8=0.64>0.5
う~ん、ざっと計算してみると二乗にして0.5になる数は0.7が近いですね。
そこから細かく計算してみると0.707....と、値を近付ける事ができます。
正確な数字が出せれませんがLWは0.001以下の数値は省略されるので答えは0.707とします。
Expressionの値に戻り、この値を数式に入れていきます。
1 / sqrt([ct_01.Bone (1).Scale.Z])
1/ +0.707
1.414427157....
と、割り切れない数が出ました。
先ほども言ったとおり、LWは0.001以下の数値は省略されるのでExpressionの出力値は1.414になります。
なので、ボーンのZ軸スケールが0.5の時、XY軸のスケールは1.414になりボーンが太くなる・・・ってことですね。
これでこの数式の仕組みがどのようになっているか分かりました。
ってこれ、「Muscle Bone (Optional A)」の説明と言うよりも数学関数の「sqrt」の説明になってしまいましたねw
まぁ、一応自分の中ですっきりと理解出来たので良しとします。
【Muscle Bone (Optional B)】:オプションB
「Muscle Bone (Optional A)」の伸縮に別のアイテムのスケールの値をかけて伸縮の強さを制御します。
1 / ( sqrt([ct_01.Bone (1).Scale.Z]) *[CT3.Scale.Z])
※:伸縮調整用。
この伸縮の強さを制御するのはスケールのチャンネルと数値(Number)のみです。
位置のチャンネルも入力値として使えると良いのにな・・・PositionのチャンネルだとExpressionが適用されないです。
でも、数式を編集すれば出来るようになるかもしれませんね。
こんな感じで残り11個。
ここ1ヶ月ちょっとはこんな地味で眠たくなるような記事ばかりですね。
まだまだ続くんですよ・・・この記事をお読みになっているみなさんを道連れにしながら。
まったくいい迷惑な話ですよね。
次はOscillator。
モーションモディファイヤにあるOscillatorと同じものかな?
ゆらゆらさせるExpressionだと予想して今日はこれで終わりにします。
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |