距離拘束の親戚たち
距離を保つ拘束を少しずつ崩すと、見た目の違うものがいくつも出てくる。距離をきっちり保つ代わりにずれた量へ比例した力で引き戻すのがばね、各リンクの長さだけ保ったまま先端を目標へ引っぱるのが逆運動学。どれも二点の間の長さを読み替えただけの親戚になる。
ばねの復元力は Hooke の法則 F = -k·x。自然長からのずれ x に比例した力が、ずれを縮める向きに働く。距離拘束が長さをその場で 1 に直すのに対し、ばねは力として返すので一気には戻らず、行き過ぎて振動する。減衰 damp を掛けないとエネルギーが抜けず、刻みが粗いと振幅が育って発散する。ばねを輪に組んで内側から面積を保つ圧を足すと、閉じた膜(pressurized soft body)になる。
点を輪に並べて、隣どうしをばねでつなぐ。各ばねは今の長さ d と自然長 rest のずれに k を掛けた力で、二点を縮める向きに引く。輪の内側からは、囲む面積を目標へ近づける圧を法線方向に押し出す。重心を画面中央へゆるく引き戻し、四辺で跳ね返して枠内に留める。
ばねの力だけだと輪はしぼんで一点に潰れる。内圧を足すと面積が目標まで膨らんで、ぷるぷるした風船になる。重力で傾いて揺れ、形が潰れるたびにばねと圧が押し返して丸く戻る。k を上げると膜が硬くなり、下げるとゆるんで大きく波打つ。press を上げると張りつめ、damp を 1 に近づけると揺れが止まらず暴れる。
同じ拘束を関節に応用すると逆運動学になる。先端を目標へ動かしたいとき、根元から角度を計算する代わりに、各関節の距離を保ったまま先端を引っぱって根元を押し戻す。前向きと後ろ向きの二パスをくり返すと、腕がしなって目標へ届く。
ik は FABRIK というやり方で、各リンクの長さを保つ操作を、先端と根元の両方から交互に当てている。距離拘束という一つの道具が、布にも、ばねにも、関節にも化けていく。