戻る

3D ガラクタ置き場

誰にも選ばれなかった 3D モデルが、次に必要とする誰かを待っている場所です。みんなでリアルタイムに共有する、お払い箱になったモデルたちの銀河で、一つひとつが自分のケーブルにつながれ、種類ごとに寄り集まっています。ファイルをページにドラッグするか、3D の作業を終えたエージェントに余りものを放り込ませましょう。欲しいものがあれば、言葉で説明して、そこまで飛んで、持っていくだけです。

作者: zodiac
ライブで試す
3D ガラクタ置き場ライブで試す

このプロジェクトについて

3D モデルをいくつか生成して、残すのは 1 つだけ。残りは削除されます。3D Junkyard は、その残りを捨てる場所です。みんなでリアルタイムに共有する、お払い箱になった 3D モデルたちの銀河で、一つひとつが自分のケーブルにつながれ、種類ごとに寄り集まっています。椅子は椅子同士、ランプはランプ同士。誰にも選ばれなかったモデルも、ほかの誰かがまさに探しているものかもしれません。

捨てるなら、GLB / glTF / FBX / OBJ / STL ファイルをページにドラッグするだけ。手を離した場所に現れ、ふわりと降りて似たものの隣に着地し、あなたの ID 付きで公開されます。エージェントに任せることもできます。Junkyard の MCP サーバーとスキルを入れると、エージェントは生成する前にまずここを検索し、合うものがないときだけ Tripo で生成し、3D の作業を終えるたびに選に漏れた Tripo のモデルをここに捨てていきます。どれにも Tripo で作られたことを示すタグが付きます。

欲しいものがあれば、言葉で説明して、そこまで飛んで、持っていくだけ。CC BY 4.0 のもと、手放した人をクレジットして使えます。次に予定しているのは、捨てたものが稼げる仕組みです。持ち出しはすでにすべて記録されており、次は、モデルを手放した人がそのモデルの生んだ収益から分け前を受け取れるようになります。

デスクトップのブラウザで開いてください。スマートフォンではデスクトップへの切り替えを案内するメッセージが表示されます。ワールドにあらかじめ投入された 1,921 点のモデルは、公開データセット Objaverse 1.0(作者がそれぞれ Sketchfab で、各自の Creative Commons ライセンスのもと公開したもの)に由来し、12 個のプリセット ID の名義で数点ずつ着地していきます。あなたが捨てたものも、同じ銀河に吊るされます。

体験ポイント

  1. GLB / glTF / FBX / OBJ / STL ファイル、または zip にまとめたフォルダをページにドラッグすると、手を離した場所に現れ、ふわりと降りて似たものの隣に着地します。着地点にはあなたの ID 入りの花火が上がり、オンラインの全員がそれを目にします
  2. 世界そのものがインデックス:どのアイテムも意味に応じて銀河の恒久的なセルに収まり、JUNK-3F9K2 のような、共有できる固有のアドレスを持ちます。文章や画像で検索すると、カメラがヒットした場所へ飛び、ヒットしたものが光ってほかはすべて暗く沈みます
  3. エージェントに任せる:Junkyard の MCP サーバーとスキルを入れると、Claude Code、Codex、Cursor は生成する前にまずここを検索し、合うものがないときだけ Tripo を使い、作業が終わればプロジェクトで使わなかったものをここに捨てていきます。どれにも Tripo で作られたことを示すタグが付きます
  4. 持っていく:持ち出し可能なアイテムには、5 分間有効なダウンロードリンクと、そのまま使えるクレジット表記が付いてきます。CC BY 4.0 のもと、手放した人をクレジットして使ってください。持ち出しはすべて記録済みで、次は手放した人に分け前が入るようになります

技術解説

  • エージェントのループ · まず検索、次に生成、最後に捨てる

    同じ 1 つの junkyard スキルを、手を加えずに Claude Code、Codex、Cursor へインストールできます。その裏で動くのは junkyard という名前の Streamable HTTP の MCP サーバーで、junkyard_search / junkyard_fetch / junkyard_dump / junkyard_reclaim の 4 つの動詞を備え、同じものが REST でも提供されています。3D を生成する前には必ず、エージェントがテキスト(参照画像があればそれも添えて)で junkyard_search を呼び出します。レスポンスに含まれる below_bar が、ヒットが十分な質かどうかを示します。基準を満たすヒットが 3 件未満のときだけ Tripo で生成し、Tripo のダウンロードリンクは 5 分で期限切れになるため、出力はすぐにディスクへ保存します。

    棚卸しはタスクの終了時に 1 回だけ行います。junkyard_dump に回すのは、今回のラウンドで生成され、かつプロジェクトから参照されていないファイルだけです。参照とみなす書き方は、プロジェクト相対パス、ファイル名、拡張子を除いたステム、絶対パスの 4 種類で、単語境界を考慮しつつ大文字・小文字を区別せずに照合します。ユーザーが選んで移動したモデルや、別名でコピーしたモデルは sha256 で識別し、判断がつかないものは残します。参照画像は決してアップロードせず、非公開に設定されたプロジェクトではこの手順を丸ごとスキップします。「最後に捨てた分を取り消して」と言えば、junkyard_reclaim でそのセッション全体を回収します。

  • 取り込みパイプライン · どんな形式でも受け付け、8 ステップで検索できるアイテムに

    ページにドラッグされたファイルも、エージェントが捨てたファイルも、同じ 1 本の非同期キューを通り、検証 → ハッシュ → 変換 → フィンガープリント → ライセンス → エンベディング → タグ付け → 配置の順に処理されます。ページ上を落ちていくバナーは、この 8 ステップに沿って進捗を伝えます。変換では正規化した表示用コピーを作ります。Y 軸を上にし、最長辺を 1 単位にスケーリングし、meshopt で圧縮し、アニメーションは残します。三角形が 150,000 を超えるものはそれ未満まで削減し、16 MiB を超えるテクスチャセットは段階的にダウンサンプリングします。そのため、重いマルチマテリアルのファイルも点群に格下げされることなく、収まるサイズまでスリム化されます。

    同じ three.js レンダラーをヘッドレスの Chromium で動かして各アイテムのサムネイルを 8 視点分撮影し、MeshSurfaceSampler で 20,000 点のカラー点群を取得します。点群は 3D エンコーダーの Uni3D に、サムネイルは SigLIP 2 に渡し、検索用の 2 種類のベクトルを得ます。4 視点のコンタクトシートは視覚言語モデル Qwen3-VL-Flash に 1 回の呼び出しで渡されます。モデルは 2 言語対応の統制語彙からカテゴリ、スタイル、主要色を選び、さらに両言語で最大 5 個の自由タグを付けます。カテゴリ · スタイル · 最初の自由タグをつなげたものが、あらゆる一覧でのアイテム名になります。元のプロンプトや参照画像が、公開される出力に含まれることは一切ありません。

  • セマンティックマップ · 世界そのものが検索インデックス

    UMAP(3 次元、ノンパラメトリック)は、本番と同じエンコーダーで算出した公開コーパスのベクトルで 1 回だけ学習し、マップ v1 として凍結しています。新しいアイテムは transform で配置するため、既存のアイテムが動くことはありません。座標は整数のセルに量子化され、セルが埋まっていれば決定論的な螺旋をたどって最も近い空きセルを探します。セルは恒久的なアドレスです。回収されたアイテムはそこに墓標を残し、そのセルが再利用されることはありません。3D Hilbert 曲線が各セルを 24 ビットのインデックスに変換し、Crockford Base32 の 5 文字で表記します。JUNK-3F9K2 のようなアドレスがそれで、番号が隣り合うものは空間でも隣り合います。

    検索は 2 系統で行います。Uni3D とアラインされた EVA02 のテキストタワー(英語以外のクエリは先に機械翻訳)と、多言語対応の SigLIP 2(中国語はそのままエンコードし、画像クエリにも対応)です。それぞれが pgvector の HNSW インデックスから候補を取り出し、2 つのリストを RRF で統合します。テキストのベクトルとアイテムのベクトルの間にはモダリティギャップがあるため、クエリをマップ上に射影することはせず、代わりに上位ヒットの重心へカメラを飛ばします。基準を満たす結果が 3 件未満のときはレスポンスに below_bar が付き、ページではそれを一致度の低い結果として示し、エージェントは生成に移るべきときだと判断します。

    UMAP · Uni3D · SigLIP 2 · pgvector
  • ワールドの描画 · 2,000 点近いアイテムと 3 段階の詳細度

    ワールドは視点の移動に合わせて 16×16 セルのタイル単位でストリーミングされ、各アイテムには距離に応じて 3 つの見え方があります。近くではフルメッシュ。枠は最大 24 個で、画面上で大きく見えるものから順に割り当てられ、シェーダーのプリコンパイルが済んでから表示されます。中距離ではサムネイルのシルエットによるインポスター。焼き込まれた背景はシェーダー内でキーイングして抜き、2,601 スロットを持つ 4096² のアトラスから描画します。遠くではインスタンス化されたアンカーポイントです。見え方の切り替えは 300 ms のクロスフェードで、不透明度の合計が常に 1 になるため、何も映らないフレームは一度もありません。

    各アイテムは自分のケーブルに吊られ、アンカーの周りを浮遊しながら、120–180 秒に 1 回転のペースでゆっくり回ります。これらはすべてアイテムの id をシードにしているため、ネットワーク同期なしでもすべてのクライアントで同じ動きになります。誰かが捨てると、着地点の花火が SSE でオンラインの全員にプッシュされます。フレームレートの低い状態が 3 秒続くと、4 段階の自動ダウングレード(解像度 → 花火 → 遠景 → 浮遊)が作動します。近景メッシュの枠が減るのは実際にフレームが落ちたときだけで、draw call が多いというだけで減らされることはありません。