Blenderのボーンコンストレイントで時計の機構を作る!

2021年1月10日

今回の記事では、Blenderのプロパティの1つであるボーンコンストレイントを使って、動く時計の機構を作ってみようと思います。

 

 

秒針、分針、時針を1つのコントローラで

時計の動きを作る場合であれば、ボーンコンストレイントのトランスフォーム変換を使えば、簡単に機構を作ることができます。

このように、1つのコントローラを動かすだけで時計の針を良い感じに回してしまうことができるのです。

 

関連記事:Blenderの配列モディファイアーを使って、簡単に時計盤を作ってみる!

 

 


それぞれのボーンを用意

動かしたいものには必ずボーンを用意します。

ボーンなくしては、ものを動かすことはできません。

今回は秒針、分針、時針が動くため、合計で3本のボーンを用意します。

真横から見て、こんな感じに。

 

 

それぞれのオブジェクトをボーンにウェイト設定

それぞれのボーンが、手前から秒針分針時針に対応しています。

秒針ボーンには秒針オブジェクトを、分針ボーンには分針オブジェクトを、時針ボーンには時針オブジェクトをウェイト設定します。

 

ウェイトの値はMAXの100で良いでしょう。

各種、真っ赤にしてください。

 

秒針 分針 時針

このような感じです。

 

ワイヤーフレームで見やすく!

ちなみに、今回のようにボーンが重なってしまって見づらくなった場合は、既にやっていますがボーンの表示を変えることで見やすさを取り戻すことができます。

今回は表示方法を「ワイヤーフレーム」にしました。

ワイヤーフレームにすることで、表示ボーンが細くなり線状になります。

 

 

接続、親子関係は解除

この3本のボーンですが、親子関係も接続も、解除しています。

これらを解除しておかないと、正しく回すことができなくなってしまうからです。


コンストレインを構築する

ここまでが下準備です。

ここからは実際にボーンコンストレインを使って、1つのコントローラで3本の針が動く機構を作っていきます。

 

 

コントローラを作る

コントローラを作りましょう。

今回は簡単な円形のボーンを利用することにしました。

 

「円形に回転する時計の針を動かすのだから、コントローラも円形でいいだろう」という発想です。

ボーンの形状を変更する方法は、別の記事で解説しています。

失念された方は、そちらをどうぞ。

 

 

回転制限コンストレイン

ただし、このままではせっかくの円形コントローラも、狙った通りに回転しなくなります。

XYZ軸の様々な方向に好き勝手に動かせてしまうため、これを制限します。

 

回転制限コンストレインを用いましょう。

これでオーナー空間をローカルに指定し、X軸とZ軸にチェックを入れて制限をかけます。

こうすることで、コントローラを綺麗に回転させる形で動かすことができるようになります。

 

まぁ、これでも実際に動かす場合はY軸で軸指定をしてあげたほうがきれいに動かせるわけなのですが・・・。

 

 

針の回転の差を生み出す

コントローラが完成したら、針の回転に差を付けましょう。

 

秒針は60秒で一周します。

そして分針は60分(=3600秒)で一周します。

そして時針は12時間(=720分、=43200秒)で一周します。

この差を演出しなければなりません。

 

 

トランスフォーム変換を利用

同じボーンの動きを別々の運動量に変えたい場合は、トランスフォーム変換を利用すると便利です。

トランスフォーム変換を用いることで、例えば「あるオブジェクト」が1回転する運動を、半回転だけ回す形で利用することができるようになります。

 

 

短い針から長い針へ伝播

トランスフォーム変換を利用して回転差を演出する場合は、運動量の小さいものから大きなものへ動きが伝わるようにした方が、動きを細かく調整することができます。

大きいものから小さくしていくと、割り切れない値が出てきてしまいます。

このため今回は「時針→分針→秒針」という構図で、動きを変換させていみます。

 

直接回転させるのはコントローラです。

時針には回転コピーを設定し、コントローラの動きをそのままコピーさせます。

これで時針がコントローラの動きと連動して動くようになります。

 

後は分針と秒針に、それぞれトランスフォーム変換を設定していきます。

ターゲットはそれぞれ一つ奥にある針。

分針には「秒針が1周(360度)回転する間に、12週(4320度)回転」するように設定。

秒針には「分針が1周(360度)回転する間に、60週(21600度)回転」するように設定します。

分針
秒針

ターゲットとオーナーは、それぞれローカル軸に指定します。

 

これでコントローラを回転させれば、このように1つのオブジェクトを回すだけで時計の針が回りだします!

 

 

注意点:180度以上は入力できない

しかし、この方法で時計を動かす場合は問題が生じてしまいます!

大した事ではないかもしれませんが・・・。

どういう点かと言うと、コントローラを180度回した時点で、分針と秒針がデフォルト位置に戻ってしまうということです。

 

 

最短角度として認識される

例えば、コントローラを回し、時針が「6」ところまで回れば、短い針は180度回転したことになります。

この流れで「7」のところまで回せば、短い針は210度回転することになりそうですね。

 

しかしBlenderではこのようなことは起こりません。

常に最短距離で処理されるため、「7」のところまで回転させた場合は-150度という角度で処理されてしまいます。

マイナスが頭についているため0度よりも小さい角度ということになってしまいます。

 

今回の作り方の場合は、針が反時計回りに動くことを想定して作っていません。

(時計回りに動くのが「時計」ですからね笑)

このため針が動ける最小の角度は0度ということになります。

時針が「6」を過ぎて「7」~「11」を経過し、「12」に戻るまでの間、常に分針と秒針は「12」を指し続けることになってしまいます。

 

 

作り込む場合はシェイプキーなどを使おう!

このため、実際に時計の針が「7」~「11」の間を動くようなモーションを作る場合には、シェイプキーなどのアニメーション系の処理を施す方が無難です。

「12」~「6」を動く分だけならば、十分にこの機構でも大丈夫です。

あとは実際に作りたい作品と向き合い、最良の手法を採用してみましょう。

 

ちなみにこの記事を書いた目的はボーンコンストレインのトランスフォーム変換の機能を説明するためです。

実用的かはさておき、僕は十分に目的を達成することができたと思っております!