「歯車を作る」の今までの集大成として、複数の歯車を使った作例として
機械仕掛けの形状をモデリング、アニメーションさせます。
また、今までは歯車のモデリングだけで表面材質やレンダリングにはタッチしてきませんでした。
ここも含めて、最終的な作品を仕上げていくことにしました。
長くなりますので、複数回に分けて書いていきます。
モデリングする題材
鳩時計のように扉が開いて中から板に乗った物体が出てくる、というカラクリ仕掛けをモデリング~アニメーションしてみることにしました。
ただし、実際の鳩時計とは異なり物理的に動くかどうか、はここでは度外視しました。
歯車の寸法をあわせてそれぞれが「かみ合っているように見える」ようにアニメーションレンダリングする、ということを最終目標としています。
駆動させるためのモーターを1つ使い、モーターの回転をつながっている歯車で伝えていくものとします。
モーターをモデリング
まずは、モーターをモデリングします。
自由曲面と掃引体を使ってモーターらしく造形しました。
ここではレンダリングで指定の形状で抜く「ブーリアン」を使用しています。
レンダリングすると以下のようになります。
レンダリングブーリアンとして、形状名に「*」を付けることで
レンダリング時にモーター本体を「*」の形状で削ることができます。
このモーターを1つのshdファイルとして保存しておきます。
後々、このモーターを機械仕掛けのモデリングのシーンに呼び出すことになります。
歯車の連動を構成
まず、単純な形状を配置して全体像を決めていきます。
大きく分けて、「扉を開く」と「物体が出てくる」の2つの動作を考えます。
扉を開く連動の流れ
扉の動きは、左右で互いに逆回転すると開く動作はできそうですね。
モーターの回転で、以下のように歯車を構成して扉を開くようにしました。
この段階ではラフで仮形状を置いています。
正面側から見たものになります。
上画像で黄色のモーターが回転すると歯車が連動し、扉が開きます。
扉から出てくる連動の流れ
以下は、背面側の下から見上げたものになります。
扉の回転で使用した歯車の軸からローラーチェーンを伝って歯車を経由し、
3つの歯車を挟んでラックの直線移動にもっていってます。
それっぽくなるように無駄に歯車を追加していますが、
歯車がどちらの向きに回転して最終的に動きとして整合性がとれていそうか、
というのを考えながら配置しました。
では、実際に歯車に入れ替えていきましょう。
歯車を配置していく
歯車は以下の種類を使いました。
モーターと歯車を配置
「モーターをモデリング」で作成した形状をシーンにインポートし、
歯車をスクリプトを使って「半径 20mm、歯数18」で作成/配置しました。
かみ合わさる歯車のサイズを計算して配置
となりの少し大きめの歯車は、半径30mmとしています。
歯車の1つの歯の長さをすべて同じにしています。
このときの、歯車の半径と歯数は比例関係になります。
なお、歯数は整数値である点に注意してください。
モーター側の歯車は「半径 20mm、歯数18」であるので、
半径 30mmの場合の歯数は、
歯数 = float(18) * (float(30)/float(20)) = 27
と計算できます(floatは、整数値を小数値に変換するものです)。
これを元に歯車のベースをスクリプトで計算し、以下のようになりました。
なお、上記の画像は「選択形状のみシェーディング表示」でブラウザで選択した形状だけをシェーディングするようにしています。
1つの歯の長さは、Pythonスクリプト記述から抜粋して以下で計算できます。
import math
R = 20.0 # 歯車の半径.
gCount = 18 # 歯の数.
angle = 360.0 / gCount # 円上の、1つの歯の角度.
# 円周上の、歯1つ分の長さを計算.
D = (R * math.sin((angle / 2.0) * math.pi / 180.0)) * 2
print "D="+str(D)
結果は、歯1つ分は「D=6.94592710668」となりました。
これらの情報を使って、連鎖する各種歯車を作成していきます。
ほぼスクリプトでの計算に頼ることになります。
以下のようになりました。
まだ回転ジョイントなどのモーションのための形状は入れていません。
すごく複雑そうに見えますので(実際、複雑ですが、、)、モーターから開始した歯車のサイズなど順番に追ってみます。
歯車の連鎖の流れ
まずモーターからの回転で「半径20mm/歯数18」の歯車を回しています。
分かりやすいように、各歯車の名前に半径や歯数を入れるようにしています。
この情報は、のちにモーションを与える際に大事になってきます。
下画像では、黄色のワイヤーフレームのモーターから回転が与えられ、
歯車A「半径20mm/歯数18」から、歯車B「半径30mm/歯数27」につながります。
歯車Bは、回転の軸に対して
ローラーチェーンをつなぐスプロケット(歯車C「半径20mm/歯数18」)を挟んで左右対称に配置されています。
このときのB/C/B’の3つの歯車は同じ軸で回転します。
歯車Bの回転により、冠歯車D「半径20mm/歯数18」につながり、回転軸は垂直になります。
同じ軸上の歯車E「半径20mm/歯数18」から、歯車F「半径14.44mm/歯数13」につながります。
この歯車Fの回転により、扉が開く動作となります。
反対側の扉も同じ構成になっています。
歯車B’の回転 → 冠歯車D’「半径20mm/歯数18」 → 歯車E’「半径20mm/歯数18」 → 歯車F’「半径14.44mm/歯数13」とつながり、
扉を開く動作となります。
以上で、扉が開くことになります。
Cのスプロケットと奥にあるC’のスプロケットを、ローラーチェーンでつないでいます。
このローラーチェーンにより、歯車の回転を後方に渡すようにしてます。
後ろから見た歯車は以下のようになっています。
C’のスプロケットの歯車での回転は、水平の軸上にある歯車G「半径31.11mm/歯数28」も回転させます。
歯車Gは冠歯車H「半径22.22mm/歯数20」とつながり、
冠歯車Hの回転は、垂直の軸上にある歯車I「半径16.66mm/歯数15」も回転させます。
最後に、歯車Iの回転によりラックとしての直線移動が行われます。
複雑ですが1つのモーターから、扉を開く動き+物体の直線移動を
この複数の歯車を使って表現しました。
少し長くなりましたのでここで一呼吸置きましょう。
今回は複数の歯車を動かすための「流れ」を考えてみました。
次回、回転ジョイントなどを配置してモーションを与えていくようにします。