ここでは pin コンストレインを使用して鎖を作ってみましょう。
コンストレインを使用して鎖を作ると、
物理的に正確な動きにはなりませんが、
リジッドボディのコリジョンだけを使用した場合に比べて計算が軽くなるし、
リジッドボディ同士が貫入するというトラブルを避けることができます。
上の作り方を参考にして、以下のように鎖を作るスクリプトを作ってみましょう。
global proc makeChain1()
{
int $i;
string $tname[];
string $ptname;
string $gname[] = `gravity`;
for($i = 1; $i <= 10; $i++)
{
$tname = `torus -hr 0.2`;
scale 2 3 2;
rotate 0 ($i % 2 * 90) 90;
move ($i * 4) 0 0;
if($i == 1)
{
constrain -nail -p 0 5 0 $tname[0];
}
else
{
constrain -pin $ptname $tname[0];
}
connectDynamic -f $gname[0] $tname[0];
$ptname = $tname[0];
}
}
global proc makeChain1()
int $i;
string $tname[];
string $ptname;
string $gname[] = `gravity`;
for($i = 1; $i <= 10; $i++)
$tname = `torus -hr 0.2`;
scale 2 3 2;
rotate 0 ($i % 2 * 90) 90;
move ($i * 4) 0 0;
if($i == 1)
constrain -nail -p 0 5 0 $tname[0];
else
constrain -pin $ptname $tname[0];
connectDynamic -f $gname[0] $tname[0];
$ptname = $tname[0];
トーラスにおける全体の半径と、輪の半径との関係は以下のようになっています。
鎖の個数が多くなった場合には、
ベイク処理をしてアニメーションをキーフレームに変換しておくと、
アニメーションの表示が軽くなります。
GUI のメニューでは Edit → Keys → Bake Simulation □ 、
MEL では bakeResults コマンドを使用します。
以下のコマンドは、nurbsTorus1 〜 nurbsTorus10 に対して
1 フレームから 300 フレームまで
アトリビュートの tx, ty, tz, rx, ry, rz をベイク処理するコマンドです。
bakeResults -simulation true -t "1:300" -sampleBy 1 -at "tx" -at "ty" -at "tz" -at "rx" -at "ry" -at "rz" nurbsTorus1 nurbsTorus2 nurbsTorus3 nurbsTorus4 nurbsTorus5 nurbsTorus6 nurbsTorus7 nurbsTorus8 nurbsTorus9 nurbsTorus10;
ダイナミクスのベイク処理をする場合には、上のように -simulation true が必要です。
課題ボタンは授業2時間目の開始時に表示される。
授業終了30分後に課題ボタンの表示が消えるので注意すること。
授業時間後に課題を提出したい者は、他の全クラスの授業が終了するまで待って、ボタンが表示されてから提出すること。
(全クラスの授業が終了するまでボタンは表示されない。)