Claude Opus 5.5にBlenderで懐中時計を作らせてみた──秒針が53秒で1周する「見た目だけの時計」から、パーツが自分で組み上がる動画になるまで

テクノロジー

最近、Claude Opus 5.5やGPT-6 Astraといったフロンティアモデルに、Blenderでモデリングさせて高精細な3Dを作るのが流行っています。あれはどうやってできているのか、気になっていました。

そこで、Claude Code(Opus 5.5)に仕組みを聞いて、ついでにサンプルを作ってもらいました。題材は、Claude Codeが出した候補の中から私が選んだ「機械式の懐中時計」です。

先に結論を書きます。

  • AIはBlenderを手で操作していません。 BlenderをPythonで動かすコードを書き、レンダリングした画像を見て直す、を繰り返しています
  • 1作目の懐中時計は、約1,000行のPythonでできました。 Claude CodeがBlenderの導入から始めて、画像を見て直すこと5回。RTX 5090で1枚7〜18秒でレンダリングできます
  • ただし、1作目は見た目だけの時計でした。 私が「中身も本物なの?」と聞くと、Claude Codeは計算で確かめて、秒針が53.3秒で1周する設計だったと報告してきました。Claude Codeによると、画像を見て直すやり方では、機能の誤りは見つからないそうです
  • Claude Codeが設計からやり直して、組み立て動画にしました。 毎時18,000振動の輪列と脱進機を持つ時計が、部品から自分で組み上がり、巻き上げられて動き出すまでの65秒です
  • ブログ用に、Claude Codeがタイトル・BGM・エンドカードを付けました。 BGMはComfyUIのMiniMax Music 3で作り、全体で76秒、720pで15MBです

まず、完成品をどうぞ

Claude Opus 5.5とBlenderで作った、懐中時計の組み立て動画(76秒)。部品は1つも手で作っていません(作ったのはClaude Codeです

動画の流れはこうです。地板(ムーブメントの土台の板)の上に、香箱(主ゼンマイの入った箱)、歯車、受け(歯車の軸を上から押さえる板)、ネジと、実際の時計と同じ順番で部品が降りてきます。巻き上げられるとテンプ(振り子にあたる輪)が振れ始め、ここだけ脱進機の動きがスローモーションになります。そのあとムーブメントが裏返り、時針を回す歯車、文字盤、針が付き、ケースに収まって、最後に竜頭が差し込まれます。

組み立ての流れ。部品はすべて、Pythonのコードが数式から形を作っています。ネジも3回転しながら締まります(芸が細かい
組み立ての流れ。部品はすべて、Pythonのコードが数式から形を作っています。ネジも3回転しながら締まります(芸が細かい

AIはどうやってBlenderでモデリングしているのか

Claude Codeの説明は、こうでした。

  • BlenderはPythonですべて操作できる:Blenderにはbpyという PythonのAPIがあり、頂点や面、モディファイア、マテリアルのノード、ライト、カメラ、レンダリングまで、画面でできることはほぼすべてコードで書けます。AIはこのコードを書いています
  • つなぎ方は2通り:blender -b -P script.py のように画面を出さずにスクリプトを実行して画像を書き出す方法と、MCPで起動中のBlenderをAIが操作する方法です。今回は前者です
  • 精細さを生むのは「見て直す」ループ:コードを書く → レンダリングする → 画像を見る → 直す、を繰り返します。モデルが画像を読めるので、はみ出した部品や不自然な質感を自分で見つけられます
  • 形は数式で作る:今回の時計では、Claude Codeは歯車の歯を歯数から計算し、ヒゲゼンマイはアルキメデスの渦巻き、ケースは断面をろくろのように回した回転体にしています。鎖は、スプライン曲線に沿ってコマを90°ずつひねって並べました

1作目:見た目だけは本物の懐中時計

このPCにはBlenderが入っていなかったので、Claude Codeは、公式サイトのポータブル版(Blender 5.2.1、386MB)をダウンロードしてよいかを確認してきました。私は許可しただけです。Claude Codeは、ZIPのSHA256が公式の値と一致することを確かめてから展開しています。

できあがったのが、この懐中時計です。

1作目の懐中時計(静止画)。文字盤の中央を抜いたスケルトン仕様で、ムーブメントの歯車が見えます
1作目の懐中時計(静止画)。文字盤の中央を抜いたスケルトン仕様で、ムーブメントの歯車が見えます
テンプ(右上の輪)のアップ。ヒゲゼンマイ、ルビーの受け石、地板の円い梨地模様まで、全部Pythonで描いています
テンプ(右上の輪)のアップ。ヒゲゼンマイ、ルビーの受け石、地板の円い梨地模様まで、全部Pythonで描いています

質感もコードです。地板のペルラージュ(円形の梨地模様)はボロノイ模様、受けのコート・ド・ジュネーブ(波状の縞)は波模様のテクスチャ、歯車のヘアラインは異方性反射で表しています。

レンダリングして、画像を見て、直す。Claude Codeはこれを5周しました。Claude Codeが自分で見つけて直した問題の一部です。

  • 部品がケースから突き出ていた:3時と9時の位置で、受けの端がケースの外に出ていました
  • 木目がブレて見えた:テーブルの木目がモーションブラーのように見えたので、革のデスクパッドに変えました
  • 風防ガラスの映り込みで、ムーブメントが白くかすんだ:実物の高級時計と同じく、無反射コーティングを再現しました(MgF2相当の薄膜110nmで、反射を弱めて青紫にする)
  • Blender 5のAPIの変更でエラー:ノードの出力の名前が Fac から Factor に変わっていました。Claude Codeがエラーの文面を読んで直しています

最終版の3枚は、170万円の自宅AI環境のRTX 5090で、1枚7〜18秒でした。

「中身も本物なの?」と聞いたら

静止画を見て、私はClaude Codeに聞きました。この懐中時計は、中身も実際の懐中時計と同じような構造で、動くものに近いのか。

Claude Codeの答えは「構成の考え方は本物に沿っているが、このままでは動かない」でした。質問を受けて、Claude Codeは歯車比と歯形を計算し、保存したファイルの全部品で衝突判定をしています。見つかった誤りはこうです。

項目1作目の中身
歯車比二番車(分針)→四番車(秒針)が 72/10 × 75/8 = 67.5。正しくは60で、分針を合わせると秒針が53.3秒で1周する
振動数毎時約15,429振動という半端な値(懐中時計は毎時18,000振動などが一般的)
歯形工業用のインボリュート歯形。カナ(小さい歯車)が7〜12枚と少ないため、噛み合う4組すべてで歯先が食い込む計算
アンクル爪石がガンギ車の反対側に付いていて、腕がガンギ車を貫通していた(角度の符号の書き間違い)
部品の衝突アンクルの軸がヒゲゼンマイを貫通、テンプ受けのネジが文字盤にめり込む

1作目では、主ゼンマイ、巻き上げの機構、時針を回す歯車(日の裏)を、Claude Codeがそもそも作っていませんでした。竜頭は飾りで、時針は軸に置いてあるだけです。

見逃した理由を、Claude Codeはこう説明しました(抜粋)。

「レンダリングして画像を見て直す」ループは、見た目の誤りしか見つけられません。歯車比が間違っていても写真は同じに見えますし、アンクルのバグは受けの下に隠れていました。

AIに実際に機能するものを作らせるなら、見た目の確認とは別に、計算による検証を組み込む必要があります。

2作目:設計からやり直して、組み立て動画に

そこで私は、時計の部品が1つずつ組み合わさっていき、最後に完成して動くところを動画にしてほしいと頼みました。実際に製造するわけではないので完璧な再現は求めませんが、できるだけ実物に近い部品と設計、本物に近い組み立ての手順で、とお願いしています。

設計

Claude Codeは、歯数から設計をやり直しました。

  • 輪列:二番車→四番車が 80/10 × 75/10 = 60。分針1周で、秒針がちょうど60周します
  • 振動数:四番車→ガンギ車が 80/8 で、ガンギ車は毎分10回転。15歯 × 2振動 × 10回転 = 毎分300振動、つまり毎時18,000振動です(テンプは2.5Hz)
  • 日の裏(時針の減速):筒カナ12 → 日の裏車36、日の裏カナ10 → 筒車40 で、ちょうど12分の1
  • 歯形:時計用の、歯元がまっすぐで歯先がアーチ状の形に変更
  • 脱進機:スイスレバー式。爪石の開きは60°(ガンギ車の歯2.5枚分)で、ガンギ車は1振動ごとに12°ずつ進みます。アンクルは、テンプが中心を通る前後の0.014秒で切り替わります。テンプの振り角は270°
  • ヒゲゼンマイ:外側の端を固定したまま、テンプの回転に合わせて渦巻きが締まったり緩んだりします(ジオメトリーノードで変形)

Claude Codeは、組み立ての順番も実際の作業に寄せました。動画では、地板の受け側から歯車と受けが組まれ、巻き上げでテンプが動き出すと、ムーブメントが裏返されて日の裏・文字盤・針が付き、ケースに入ったあとで巻真(竜頭の軸)が差し込まれます。Claude Codeによると、ケースに入れてから巻真を差すのは、実際の作業でも同じだそうです。

動き出した直後のスローモーション。手前の輪がテンプ、その下の渦巻きがヒゲゼンマイ、赤い粒がルビーの受け石です
動き出した直後のスローモーション。手前の輪がテンプ、その下の渦巻きがヒゲゼンマイ、赤い粒がルビーの受け石です

検証は3段構え

1作目の反省から、Claude Codeは見た目の確認とは別に、計算での検証を入れました。

  1. 歯形の噛み合い(2D):噛み合う7組すべてを、実際の歯車比で回しながら、相手の輪郭に食い込む頂点がないかを数えました。結果は7組とも0
  2. 部品の衝突判定(3D):動いている途中のいくつかのフレームで、全部品のメッシュ同士の交差を調べました。香箱受けがケースにめり込む、斜めから入ってきたケースが地板をこする、動き出す前に振り石(テンプのピン)がアンクルに当たる、の3件を見つけて直しています
  3. 目視:一定フレームおきに並べた一覧画像と、脱進機を真上から1コマずつ見る

衝突判定そのものが間違えることもありました。ムーブメントを裏返したあとにワールド座標で判定すると、触れていない歯車同士を「交差あり」と誤検出したのです。最後は、Claude Codeが2Dの噛み合いの計算と目視を合わせて判断しています。

レンダリング

本編は1,951フレーム(65秒)で、1920×1080・30fps・80サンプル。RTX 5090で27.6分、1フレーム平均0.85秒でした。

Blender 5.xのAPIの変更には、ここでも何度か当たりました。ジオメトリーノードの入力の場所や、動画編集機能の呼び名が変わっていて、Claude Codeはそのたびにエラーを読んで調べ、書き直しています。

ブログ用の仕上げ

完成した動画を見て、私はすごくよくできていると思いました。ブログに載せるにあたって、私からお願いしたのは次の4つです。

  • 冒頭に「Claude Opus 5.5 + Blender ~懐中時計組み立て編~」のタイトルを、おしゃれに
  • ComfyUIの音楽生成でBGMを作り、尺を合わせるかフェードアウトで終わらせる
  • 最後はフェードアウトか、タイトルっぽいものを見せる
  • 画質をある程度保ちつつ、ファイルはできるだけ小さく

タイトルとエンドカード

Claude Codeは、タイトルもBlenderでレンダリングしました。欧文はPalatino Linotype、和文は游明朝。金色の立体文字に光が横切り、背景ではこの時計の二番車を大きくぼかして回しています。

エンドカードには「Made with Claude Opus 5.5 + Blender 5.2」と「全パーツ・全モーションを Python コードで生成(約 2,400 行・1,951 フレーム)」が入っています。2,400行は、動画の生成に使ったコードの行数です(1作目のコードを部品として使い回した分を含みます)。

BGM:MiniMax Music 3で4テイク

BGMは、MV制作の記事でも使ったMiniMax Music 3です(ComfyUIでローカル実行)。Claude Codeは、公式テンプレートと同じ配線をComfyUIのAPIで組み、ボーカルなしの曲を4テイク生成しました。1テイクは1分ほどです。

Claude Codeが書いた曲調の指定は、要約するとこうです。

  • 高級機械式時計の映像に付ける、ネオクラシカルでミニマルな曲
  • テンポは75BPM(16分音符が1秒に5回。テンプの1秒5振動に合わせるつもりの数字)
  • 始まりは繊細にチクタクと。機械が動き出すところで弦が入り、最後は完全に解決する和音の余韻で終わる

4テイクの長さは、76.0秒・69.6秒・64.7秒・27.3秒(途中で終わった失敗作)とばらばらでした。Claude Codeは音を聴けないので、音量の推移と終わり方を解析して、76.0秒のテイクを選んでいます。これが、映像とよく合いました。

BGMの音量の推移。テンプを付けて巻き上げる間は静かで、テンプが振れ始めると盛り上がり、完成した時計が映るところで山。狙ったわけではありません(偶然です
BGMの音量の推移。テンプを付けて巻き上げる間は静かで、テンプが振れ始めると盛り上がり、完成した時計が映るところで山。狙ったわけではありません(偶然です
  • テンプを付けて巻き上げる場面(30〜35秒)で音が沈み、テンプが振れ始める35.2秒から持ち上がる
  • 完成した時計が映る54.7秒あたりが山
  • 最後の和音が73.6秒に鳴り、エンドカードの間に余韻が消える

Claude Codeは、映像の長さを曲に合わせて76.0秒にし、エンドカードを7秒にしました。曲の最後の1.5秒は、映像と一緒にフェードアウトさせています。なお、75BPMの指定は守られず、解析したテンポは約99BPMでした。

音量はブログ向けに-16LUFSにそろえています。ffmpegの音量の自動調整(loudnorm)をそのまま使うと、ピークを抑えるために曲の強弱まで潰れた(強弱の幅が14→9.9LU)ので、Claude Codeは全体を持ち上げてからピークだけをリミッターで抑える方法に変えました。

圧縮:720pで15MB

画質は、Claude CodeがNetflixの公開しているVMAF(人の見た目に近い画質の指標。100点満点)で測りました。高画質のマスター(240MB)を基準に、Claude Codeが5通りの設定を比べた結果です。

設定サイズVMAF(1080pが基準)VMAF(同じ解像度が基準)
1080p CRF2243.7MB92.1—
1080p CRF2528.8MB88.6—
720p CRF2222.5MB85.793.1
720p CRF25(採用)15.0MB81.790.2
720p CRF2810.7MB77.386.9

この動画は、圧縮が難しい部類です。地板の梨地模様や細かい歯が画面いっぱいに動き続けるうえ、レンダリングの細かいノイズもデータ量を食います。私は720p(CRF25)を選びました。映像のビットレートは1.41Mbpsで、DaVinci Resolveの記事の動画とほぼ同じです。720p同士で比べたVMAFは90で、圧縮による劣化はほとんど分からない水準です。

測定では、Claude Codeが1つハマりました。マスターをMKV形式で作ったところ、VMAFが3フレームに1回、0近くまで落ちたのです。MKVのタイムスタンプが1ミリ秒単位で丸められていて、30fpsのフレームと3フレームに1回ずれ、別のフレーム同士を比べていたのが原因でした。Claude Codeは、フレーム番号でタイムスタンプを振り直して測り直しています。軽いノイズ除去や、暗い部分を重視する設定(aq-mode=3)も試しましたが、同じ画質でサイズが増えたので使っていません。

動画のサムネイルが黒くなる問題

この動画は黒から始まるので、そのままブログに貼ると、再生前のサムネイルが黒い四角になります。記事の下書きをWordPressに送っている自作のスクリプトは、動画のポスター画像(再生前に表示する画像)に対応していませんでした。私の了承のうえでClaude Codeが対応を追加し、冒頭の動画にはタイトル画面をポスターとして付けています。

人間がやったこと、Claude Codeに任せたこと

人間(私)Claude Code
「AIはBlenderでどうやって3Dを作っているのか」という質問、題材の選択(候補から懐中時計)仕組みの説明、Blenderの導入(ダウンロード前の確認、SHA256の照合)
Blenderのダウンロードの許可1作目の懐中時計(Python約1,000行)、レンダリングと5回の手直し
「中身も本物なの?」という質問歯車比・歯形の計算と衝突判定、誤りの報告
組み立て動画の依頼(部品が自分で組み上がる、実物に近い部品と手順で)設計のやり直し、部品・動き・タイムライン(動画用に約2,400行)、3段構えの検証、レンダリング
ブログ用の要件(タイトルの文言、ComfyUIでBGM、終わり方、容量)、720pの採用、投稿スクリプトの改修の了承タイトルとエンドカード、BGMの生成と選定、音量の調整、圧縮と画質の測定、投稿スクリプトのポスター対応
完成した動画の確認、この記事のレビューこの記事の下書きと図

正直、気になっていること

  • 時計としては、まだ完全ではありません。 Claude Codeは、時刻合わせの機構(おしどり・かんぬきなど)を作っていませんし、脱進機は物理シミュレーションではなく、時刻から角度を計算して動かしています。地板の文字盤側の穴石もありません
  • 時計の専門家には見てもらっていません。 歯車比や脱進機の角度は、Claude Codeが一般的な設計の考え方で決めたものです
  • BGMは、Claude Codeが波形の解析で選びました。 音楽としての良し悪しを、Claude Codeは判断できません。曲が映像と合ったのも、狙ったのではなく、4テイクの中にたまたま合うものがあった、というのが正確なところです
  • VMAFは、マスター(x264のCRF12)を基準にした数字です。 レンダリングしたままの画像を基準にしたものではありません

まとめ

  • AIのBlenderモデリングは、「Pythonを書く → レンダリングする → 画像を見て直す」の繰り返し。精細さは、形を数式で作ることから来ている
  • ただし、画像を見るループで分かるのは見た目だけ。1作目の懐中時計は、秒針が53.3秒で1周する設計だった
  • 機能するものを作らせるなら、計算による検証(歯車比、噛み合い、衝突判定)を別に入れる。2作目は、Claude Codeが7組の歯車すべてで食い込みが0なのを確かめてから動かした
  • BGMは生成AIで何テイクか作り、音量の推移で選ぶと、映像に合わせやすい(今回は偶然にかなり助けられた)
  • 細かい模様が動き続ける映像は、圧縮に不利。今回は720p・CRF25で15MBに収めた

ポリゴンを1つも手で置かずに、ここまで作れる時代です。Blenderが入っていないPCからでも始められるので、試してみてはいかがでしょうか。

五十路にして、初めて懐中時計を組み立てました(組み立てたのはClaude Code

コメント

タイトルとURLをコピーしました