ハッチが開くとシートが動く — エンプティ、ドライバー、コンストレイントで作る「仕組み」【タチコマで学ぶBlender #6】
Ember 編集部 ・ 2026-09-05 ・ 約11分 ・ 3dcg
このモデルには hatch open という たった1つの数値 があります。0 なら閉、1 なら開。この数値を動かすと、上部ハッチが後ろに 143° 跳ね上がり、後部ドアが 93° 開き、サドルが前へ 25 cm・上へ 18 cm せり出し、ハッチを支えるガスダンパーが伸びます。4つの部品が、1つの数値で連動する。 「動く仕組み」を作る作業を リギング と呼びます。今回はこのモデルのリグを、部品の親子関係・エンプティ・ドライバー・コンストレイントの4つの道具に分解します。ここは Astra が 人間とまったく同じ道具 を使っている回で、翻訳がいちばん素直です。
1. 親子関係: 脚を回すと、膝も足首も付いてくる 第2回で、脚は「付け根・膝・足首」の3点で決まると書きました。Astra はその3点に エンプティ (形のない点)を置き、部品をぶら下げています。 こうすると、 付け根のエンプティを回転させると、上腿も膝も下腿も足首もタイヤも一緒に回る 。膝のエンプティを回すと、下腿から先だけが曲がる。これが親子関係(ペアレント)で、リグの一番の基礎です。 人間の手順は、 1. Shift+A → エンプティ → 円。付け根の座標 (0.91, 0.89, 1.55) に置く 2. 上腿の部品をすべて選び、最後にエンプティを選んで Ctrl+P → オブジェクト 。これで「子」になる 3. 膝にもエンプティを置き、付け根のエンプティの子にする。下腿の部品を膝の子にする 4. 足首も同様 大事なのは、エンプティの位置が そのまま回転の中心 になることです。第2回で「関節の位置を先に決めて、装甲は後から着せる」と書いたのはこのためで、 hip knee ankle の座標は、装甲の寸法よりも先に決めるべき数字でした。 Astra は finish() という関数の中で、作った部品を自動的に現在の PARENT の子にしています。人間の Ctrl+P を、部品を作るたびに自動でやっているわけです。 2行目は「親にした瞬間に部品が動いてしまう」という初心者の定番トラブルを防ぐおまじないで、人間の Ctrl+P → オブジェクトが内部でやっていることと同じです。 2. ボーンではなくエンプティ、という選択 人間が「関節のあるもの」をリギングするときは、普通 アーマチュア (ボーン=骨)を使います。ボーンには IK(逆運動学: 足先を置くと膝が自動で曲がる)や、ウェイト(1つのメッシュを複数の骨で滑らかに曲げる)といった機能があります。 Astra はアーマチュアを使わず、 エンプティの階層 で済ませました。理由は README に書いてあります。「このリグは展示・ポージング用の階層リグです。歩行 IK、物理衝突、自動干渉回避は設定していません」。つまり、 部品は硬い(変形しない)ので、ウェイトは不要 ポーズを取らせるだけなら、エンプティを回せば足りる IK は「歩かせる」ときに欲しくなるが、今回の要件は展示 人間のプロも、機械の展示用モデルなら同じ判断をします。 要件に対して道具を軽く選ぶ のは正しい判断で、逆に言えば「このタチコマを歩かせたい」となったら、人間が(あるいはAIに頼んで)アーマチュアを追加することになります。実際、第1回で触れたレースゲームでは、このモデルの脚をゲーム側で改めて別の方法で動かしています。 3. ドライバー: 1つの数値で4つを動かす ここからが今回の本題です。 hatch open は、根元のエンプティ ROOT に付けた カスタムプロパティ です。 人間なら、オブジェクトプロパティ → カスタムプロパティ → 新規、名前を hatch open 、範囲 0〜1。 そして、この数値で他の部品を動かすのが ドライバー です。 読み方: 「ハッチのヒンジの X 回転は、 open の 2.50 倍」「ドアの Z 回転は 1.62 倍」「サドルの Y 位置は 1.56 から 0.25×open を引く」。式は小学校の一次関数です。 人間の手順は、 1. ハッチのヒンジ用エンプティを、資料どおりポッドの 後ろ上端 (0, 2.505, 2.57) に置く。ここが回転軸になる 2. ハッチの殻をそのエンプティの子にする 3. エンプティの X 回転の欄で右クリック → ドライバーを追加 4. ドライバーエディタで、変数 open を「単一プロパティ」、対象を ROOT の ["hatch open"] に 5. 式の欄に 2.50 open これを4か所(ハッチ・ドア・サドルY・サドルZ)。慣れた人で20分。 「回転軸をどこに置くか」 (手順1)が唯一の設計判断で、資料の「後方に跳ね上がる」からヒンジは後ろ上端、と Astra も人間も同じ結論に至ります。 ポイントは、 ハッチの殻そのものは1ミリも動かしていない ことです。動くのはエンプティで、殻はその子だから付いてくる。第4回で「ハッチは別の殻として切り分けた」のは、この瞬間のためでした。 4. コンストレイント: ガスダンパーが「勝手に」伸びる ドライバーで動かせないものが1つあります。ハッチを支える ガスダンパー (シリンダーとピストン)です。下端はポッドに固定、上端はハッチに固定。ハッチが開くと、上端が動くので、ダンパーは 向きを変えながら伸びる 必要があります。 これを式で書くのは面倒です(角度と長さを毎回三角関数で出す)。Astra は代わりに コンストレイント を使いました。 ダンプトラック は「このオブジェクトの Z 軸を、常に目標の方向へ向けろ」というコンストレイントです。上端の目印はハッチの子なので、ハッチが開けば勝手に移動する。下端はそれを追いかけて向きを変える。シリンダーの向きが自動で決まりました。 長さは、もうひとつのドライバーです。 ピストン(長さ1の円柱)の Z スケールを「2点間の距離」に 、位置をその半分に。距離が伸びれば伸び、縮めば縮む。 LOC DIFF は Blender のドライバーが標準で持っている「距離」変数で、人間もドライバーエディタで変数の種類を「距離」にすれば同じものが使えます。 人間の手順は、コンストレイントプロパティ(鎖のアイコン)→ ダンプトラック → 対象を選ぶ、で3分。距離ドライバーは10分。 「ハッチが開くとダンパーが伸びる」という現象を、式で書かずに、部品同士の関係として置く ——これがリギングの考え方で、Astra はこの点で人間の手順を忠実になぞっています。 5. キーフレーム: 数値を時間に置く 最後に、 hatch open を時間に沿って変えるのが アニメーション です。 1フレーム目で 0、25 まで 0、65 で 1(開き切る)、100 まで開いたまま、140 で 0(閉じ切る)。人間なら、タイムラインで該当フレームに移動し、カスタムプロパティの値を変えて、欄の上で I キー (キーフレーム挿入)。6回で2分。 動くのは hatch open だけで、ハッチもドアもサドルもダンパーも、 キーフレームを1つも持っていません 。全部ドライバーとコンストレイント経由で付いてくる。これが「1つの数値で4つを動かす」の意味で、あとから「ドアの開き角を 93° から 110° に変えたい」と思ったら、式の 1.62 を 1.92 に変えるだけです。人間が4部品に別々にキーを打っていたら、4部品分を打ち直すことになります。 6. 今回の工数 作業 人間 Astra 脚4本の親子付け(エンプティ3×4、Ctrl+P 12回) 40分 finish() が自動 カメラアイ3、指6本×2関節、腕2の親子付け 40分 同上 hatch open プロパティとドライバー4本 30分 関数1つ+4行 ガスダンパーのトラック+距離ドライバー×2 30分 約15行 キーフレーム 5分 ループ1つ 合計 約2.5時間 約60行 リグは「動かしてみないと正しいか分からない」作業で、人間の2.5時間には確認とやり直しが含まれます。Astra も同じで、検証スクリプト( validate tachikoma.py )を別に書いて、フレーム1・70・150でドライバーが壊れていないか、寸法が想定内かを機械的に確かめています。 作ったら検証する 、という手順まで人間と同じです。 今回の道具箱 ① 親子関係(Ctrl+P) — 親を動かすと子が付いてくる。関節の位置にエンプティを置き、部品をぶら下げる。 ② エンプティ — 形のない点。回転の中心、目印、プロパティの置き場。 ③ カスタムプロパティ+ドライバー — 1つの数値で複数の部品を式で動かす。式は一次関数で足りる。 ④ コンストレイント(ダンプトラック) — 「常にあれを向け」のような関係を、式を書かずに置く。 ⑤ キーフレーム(I キー) — 数値を時間に置く。動かすのは根元の数値1つだけにする。 次回は最終回。照明5灯、カメラ7台、レンダーの設定を見たうえで、 人間の総工数を見積もり、AIが何を肩代わりして、何をしていないのか を書きます。