
2026/11/07 4:41
Show HN: エージェントがソースからレゴ機構を推論し、その後それらをアニメーション化する
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
本プロジェクトは人工知能(AI)を活用し、静的な LDraw レゴ®デジタルモデルを Blender 内で複雑なアニメーションに自動的に変換します。これにより、手作業によるリグ付けやフレームごとにアニメーションを作成する必要を排除します。AI エージェントは、基礎となる .mpd 構築コードと注釈を分析して機械的な相互作用を逆エンジニアリングし、コンポーネントの挙動を計画し、対応する 3D ノード上で直接リグを作成して動作を実行するための Python スクリプトを生成します。このプロセスでは、モデルをサブモデルに分割し、メカニズムを個別に理解し、注釈付き glTF ノードを通じてソースデータと 3D ジオメトリを関連付けることを含みます。
インストールには Python 3.12 以上とローカル依存パッケージ(macOS/Linux では git-lfs を含む)が必要で、ホスト OS に汚染を加えずに実行できますが、Windows でのサポートは現在 WSL2 (Ubuntu) に限られています。セットアップ後、ユーザーはシェルプロファイル内に特定の環境変数(例:LDRAW_DIR, BLENDER_BIN)を設定し、ターミナルまたは VS Code を再起動する必要があります。本システムは、コミュニティから提供されたモデルを使用して新たにアセットを生成するのではなく、サンプルとしてのアニメーション化を通じて能力を実証しており、その例にはメルセデス・ベンツのトラッククレーン、飛行機のフライトサイクル、ミニフィギュアの動作カタログが含まれています。
ツールは未だ初期段階であり、柔軟なパーツ(ホースなど)の扱い、現実世界の物理シミュレーション(重力や力の不足)、非常に大規模または複雑なメカニズムにおいてエージェントが追跡を失うなどの制限に直面しています。また、レゴグループから公式に承認されていない非公式ソフトウェアであるため、カスタムシーン作成のための計画自動化および機械学習ワークフローの強力な能力 notwithstanding に、互換性と依存関係の管理はユーザー自身が行う必要があります。
本文
LDraw から Blender アニメーションへ:AI エージェントによるプロジェクト
LDraw の LEGO® モデルを AI エージェントに提供し、Blender でアニメーション化されたバージョンを取得します。
エージェントの役割とタスク
このエージェントは以下のタスクを実行します:
ソースファイルから LDraw モデルの機構を**リバースエンジニアリング(推論)**します 🤓.mpd- 発見した機構の詳細を研究します
- 異なる機械部品間の相互作用を計画します
- 最後に、それらの計画を Blender 向けの Python コードに変換し、以下の動作を実現させます:
- 各機構の制御に必要な**ライグ(ボーン構造)**を作成する
- 計画通りにアニメーションを実行します!🤯
インストール手順
注意: インストールプロセスでは、ホスト OS を汚染しないよう、すべての必要なツールと依存関係をこのプロジェクトリポジトリのローカルにインストールします。ただし、
.bashrc や .zshrc などの rc ファイルにいくつかのエクスポート変数を設定する必要があります。Blender などの依存パッケージはデフォルトで .gitignore 対象となります。
必須条件: Python 3.12 以上が必要です。
システム要件
| プラットフォーム | 詳細 |
|---|---|
| macOS | ( でインストール) |
| Linux, x86_64 (開発中・未テスト) | 、Blender、LeoCAD、およびグラフィックス関連ライブラリが必要です |
| Windows (開発中・未テスト) | WSL2 (Ubuntu) 内で実行してください |
セットアップ手順
リポジトリをクローンし、OS に適したセットアップスクリプトを実行してください:
git clone https://github.com/anteloc/ldraw-mecha.git cd ldraw-mecha ./setup-macos.sh # または ./setup-linux.sh, ./setup-win-wsl.sh
セットアップ時にインストールされる項目
| アイテム | バージョン |
|---|---|
| uv | 0.9.3 |
| bun | 1.4.4 |
| ldraw-annotator | 0.5.0 |
| ldraw-xray | 0.5.0 |
| jev-rerank | 0.5.0 |
| mpd2glb | 0.9.1 |
| Blender | 5.2.3 |
| LeoCAD | 26.09 |
| LDraw パーツライブラリ | 最新版 |
エクスポート変数
セットアップの最後には、シェルプロファイル(
.bashrc、.zshrc など)に追加するエクスポート変数のスニペットが提供されます。例如下記のような形式です:
# >>> ldraw-mecha (from setup-macos.sh) >>> export LDRAW_DIR="/Users/me/ldraw-mecha/data/ldraw" export LDRAWDIR="$LDRAW_DIR" export BLENDER_BIN="/Users/me/ldraw-mecha/bin/Blender.app/Contents/MacOS/Blender" export LEOCAD="/Users/me/ldraw-mecha/bin/LeoCAD.app/Contents/MacOS/LeoCAD" export LDRAW_XRAY_CACHE="/Users/me/ldraw-mecha/.cache/ldraw-xray" export LDRAW_ANNOTATOR_DB="/Users/me/ldraw-mecha/data/ldraw-info.db" # export TYPESAFE_API_KEY=... # オプション:jev-rerank を使用するための Jev セマンティック検索 # 他のエクスポート変数... # <<< ldraw-mecha <<<
VS Code やターミナルを使用している場合は、新しく追加された環境変数を反映させるために再起動を行ってください。
使用方法
アニメーション化したい事前注釈付きのモデルを検索・選択するには、以下のコマンドを実行してモデルセレクターを開いてください:
python3 model-selector/serve.py
その後、「プロセスガイド」を参照し、段階的な使用例をご覧ください。
サンプル動画
注意: その他のサンプルは「ギャラリー」にてご覧いただけます。
掲載のアニメーションは、AI が生成したモデルからではなく、オリジナルのモデルから作成されています。
以下は、異なるエージェントによって生成されたアニメーションの一部です。詳細については各サマリーをご覧ください。
42043 メルセデス・ベンツ Arocs フラットベッドトラック
- エージェント: Claude Sonnet 5.5
- オリジナルモデル:
42043-1_Flatbed-Trailer.mpd - コンテキスト: モデルが大きすぎて複雑で、全体的なアニメーションは難しかったため、クレーン部分だけをアニメーションするというソネットの提案を受け入れました。
▶ 動画 · サマリー
3625 ファブラン ドイツ機:離陸・飛行・着陸
- エージェント: Claude Sonnet 5.5
- オリジナルモデル:
3625-1.mpd - コンテキスト: 機体が移動しないよう、インプレース(配置固定)のアニメーションを依頼しました。
▶ 動画 · サマリー
ミニフィグ動作カタログ:10 のミニフィグ×各々 3 つの動き
- エージェント: Claude Opus 5.5
- オリジナルモデル: なし
- コンテキスト: これは複数の異なるミニフィグから生成された合成作品であり、「他のエージェントも参考にするために」ミニフィグのアニメーション方法を解説するための資料として作成されました。
▶ 動画 · サマリー
エージェントの情報源
- Need → Read
なぜ、どうやって?
LDraw Nova(LDraw モデルのジェネレーション用 sibling プロジェクト)を公開した後、多くの関係者から「モデルを何らかの方法でアニメーション化できないか」という問い合わせがありました。Nova の開発過程において、.mpd ファイルに特別な注釈を追加し、それをエージェントに提供すると、以下の点が改善されることに気づきました:
- エージェントが他の異なるモデルの組み立て方を理解するのに役立ちます
- さらに、モデルがどのように構成されているかの理解も深まります
このことから、**「もしかしたら、エージェントはモデルがどのように動作するかを理解できるかもしれない」**という着想が生まれました。
ソースからの機構のリバースエンジニアリング
その第一歩として、注釈付きのモデルを異なるエージェントに渡し、構成サブモデルを推論させるよう促しました(Haiku 5.5 の実験も参照)。推論実験の結果は非常に良く、かつ異なるエージェント間で一貫性が認められました。さらに次の点も発見しました:多くの推論されたサブモデルが実際に**「機構」**だったことです。
これらの推論された機構について、「実際にはどのように動作するか」と尋ねたところ、パーツの説明に基づいた挙動を記述するという点で、エージェント間でも一貫した結果が得られました!🤯
この時点で以下のことが確認できました:
- エージェントはモデルをサブモデルと機構に分け、詳細化できます
- 個々の機構について孤立して理解できます
- 各機構の動作原理を理解できます
まさに**「分与制覇(Divide and Conquer)」のプロセス**の結果ですね?🤓
これにより、個々の機構の扱いが管理可能になります!🤩
LDraw ソースコードから 3D モデルへのマッピング
さて、機構の動作原理を理解したエージェントに実際にアニメーション化させる手段が必要でした。その当時は Blender MCP を試し運用しており、Blender がプロンプトエンジニアリング用の有力なツールであることに気づきました。LDraw モデルを glTF(
.glb)形式でインポートし、Blender 内で操作できるようにできるからです。
しかしまだ解決すべき課題がありました: エージェントが理解するリファインされたモデルソースコードから、エージェントが操作できる glTF 形式の等価な 3D モデルへのマッピング方法は?
私が見出した解法は、3D glTF モデルのノードに、ソースコードと同じ注釈を付与することで、エージェントに対し以下の対応を持たせることです:
- Blender 外:サブモデルやパーツとしてソースコード上で計画(プランニング)🤔
- Blender 内:glTF モデル上の対応するノードで実行 ✨
パズルを組み合わせて 🙃
こうしてプロセスの草案は完成しましたが、エージェントがそれを実行するためのツール群はまだありませんでした。このプロセスには大量の複雑な幾何学的・空間計算が必要となるため、
ldraw-nova で作成されたツールセットから新たな Python ツールセットを導出させるようエージェントに指示しました。
私は、最初に簡単なモデルを与え、徐々に複雑なモデルを重ねて提示する形で、この新しい Python ツールセットを反復的に洗練させていきました。
検証のために、エージェントに対し以下のタスクを指示しました:
- 注釈付きリファインされた
モデルから計画を立てる.mpd - それに対応する注釈も付与した glTF 3D バージョンを生成する
- Blender にアップロードする
- 計画通りモデルをアニメーション化するための Blender Python スクリプトを作成する
そして遂に成功しました!🚀🚀🚀
(ただし完璧ではありません)😜
実験 - Claude Haiku 5.5 のリバースエンジニアリングセッション
プロンプト:
これは LDraw .mpd ファイルから抽出された断片、サブモデルです。これは実行可能コード断片ではなく、LDraw ランゲージで記述された 3D CAD モデル断片のようなものです。このサブモデルが何であるかを推論し、さらにそれをサブモデルに分割してください(最初の行は
から始めます):0 FILE
- 常に関連性のある意味論的な意味を持たせること
- 各
の直後の最初の 0 行は、LDraw 標準に従うサブモデルの「説明文」です0 FILE- 各サブモデルについて、人がそのものを観察して説明するような一語で記述を付け加えてください
- 回答においては、まず親モデル、次に子モデル、そして孫世代、さらに次世代へと順に配置してください(コンテナーまたは親から、被容器または子、その子の子へと進みます)
※注:上記の断片と AI の回答は明瞭にするため要約されており、
curved-hull-section.ldr や hull-shell.ldr などの論理的機械グループ、およびコンポーネント行への分割というロジックに焦点が当てられています。
元の説明文
file-01(単なるファイル名のみ)を実際の一言の説明に置き換え、ルートを file-01 から curved-hull-section.ldr に変更しました。もし外部の MPD が file-01 を参照している場合は、その参照も更新する必要があります。元の 15 のパーツ行はすべて保持されており、必要であれば .mpd ファイルとしてダウンロードできます。
開発状況
これは非常に **preliminary(初期)**なリリースですが、多くの良い結果をもたらします。ただし、まだ最適化はされていません:
- 複雑な機構や大規模モデルのアニメーション化には時間と労力がかかります
- 特にこれらの場合、エージェントは**「ウサギの穴」**にハマったり、アニメーションセッション中に迷子になったりします
- ホースやケーブルのようなフレキシブルパーツに関するアニメーションが不具合を呈することがあります
- Claude Haiku 5.5 や GPT-6 Luna といった低エンドモデルもアニメーションを生成できますが、多くに目立つ欠陥があります
- 物理法則の適切な実装はなく、重力や力相互作用、重量、慣性などを考慮していません
他にもあります…… 🤫
謝辞
以下の皆様にお礼申し上げます:
- LDraw コミュニティの皆様へ
- LDView の Travis Cobbs (@tcobbs) 氏と貢献者の方々へ
- LeoCAD の Leonardo Zide (@leozide) 氏と貢献者の方々へ
- LDCad と Shadow Library の Roland Melkert 氏へ
- pyldraw3 の Harold Martin (@hbmartin) 氏と貢献者の方々
……そして、何世代にもわたって自らの最善の成果をパブリックドメインとオープンソースコミュニティに無償で寄贈してくださった多くの他の LDraw クリエイターの皆様に感謝申し上げます!
注意: このプロジェクトでは、多数のソースから LDraw モデル、ライブラリ、ツール、ドキュメントなどを使用しました。多くの方が decades にわたり自らの優れた作品をパブリックドメインやオープンソースコミュニティに寄付してくださり、この分野を支えてくれました。
もしご自身もこのセクションへの記載を検討されている場合は、メールでお知らせください!
商標について
LEGO(R) は LEGO グループの登録商標であり、本ソフトウェアをスポンサーしたり、認可・推奨しているわけではありません。