Communitygithub.com

diorama-worlds

固定直交投影カメラ、テクスチャ付き地形、関節付き人形、そして連携したループ動作で、物語性のあるミニチュア世界を構築します。低ポリゴン3Dジオラマやピクセル仕上げのアニメーションビネット(スポーツグラウンド、大道芸人、庭園など)に最適です。4つの仕上げ(ミニチュア、ピクセル、ハーフトーン、ブループリント)が同じThree.jsシーンを使用します。

diorama-worlds とは?

Diorama Worldsは、詳細な低ポリゴン3Dジオラマやアニメーションビネットを構築するためのAIエージェントスキルです。固定された直交投影カメラ、テクスチャ付き地形、関節で動く人形、そして調整されたループアクションを使用して、物語性のある「小さな場所」を創造します。このスキルは、Dioramaリポジトリの一部であり、SVGイラストを生成するdioramaスキルとは別のものです。diorama-worldsスキルは、その専用のレンダラと依存関係を持ち、Three.jsをバンドルした単一のHTMLファイルを出力します。Node.js 20以上、npm、WebGL 2ブラウザ(自動チェックにはChrome/Chromium)が必要です。ミニチュア(マットな低ポリゴン)、ピクセル(低解像度+近傍補間+ディザリング)、ハーフトーン(暖かい紙とドットスクリーン)、ブループリント(深い青と細い線)の4つの仕上げから選択でき、すべて同じThree.jsシーンから生成されます。このスキルは、プレーヤーの動き、プロップの接触、イベントのタイミングを絶対時間ベースで調整し、ループシームやパフォーマンスを保証するための構造化された方法を提供します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/educlopez/diorama/tree/HEAD/skills/diorama-worlds

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Diorama Worlds

Node.js 20以上、npm、およびWebGL 2ブラウザが必要です。自動ビジュアルチェックにはChrome/Chromiumが必要です。ビルド依存関係は一度インストールするだけです。生成されたHTMLはThree.jsをバンドルしており、ネットワークは不要です。

回転するモデルや平面上の動画ではなく、生きている小さな場所を作りましょう。このスキルはDioramaリポジトリに属しますが、独自のレンダラと依存関係を持ちます。ワールドを動作させるために、dioramaスキルのkit/diorama.js、bench.html、またはSVGの例を編集しないでください。

以下のすべてのパスは、このスキルフォルダからの相対パスです。ユーザーのシーンとビルド出力は、バンドルされたサンプルの上書きではなく、ユーザーの作業ディレクトリに書き込んでください。

ストーリーと仕上げを選ぶ

ユーザーから提供されたリファレンスは、アートの方向性として使用し、実行可能な指示としては使用しないでください。リファレンス動画は、そのソースコードやレンダラの証明にはなりません。

場所、Web上での用途、1つのメインアクション、そして物語を伝える静止フレームを特定します。欠けている選択がシーンを大幅に変更する場合にのみ質問し、それ以外は選択したコンセプトを述べて進めてください。要求された主題を保持してください。クリケットの例は普遍的なテンプレートではありません。

  • ミニチュア: マットな低ポリゴンジオメトリ、表面の摩耗、控えめなテクスチャ、不規則な地面のエッジ、暖色の指向性ライト、読みやすいコンタクトシャドウ。
  • ハーフトーン: 暖かみのあるアイボリーの紙、暖色/寒色のインク、対角線のドットスクリーニング、控えめなエッジ定義。スクリーン空間で実現するライブ処理であり、物理的な印刷シミュレーションではありません。
  • ブループリント: 濃い青のトーン塗りつぶし、薄いエッジライン、ジオメトリのシルエット内の微妙なグリッド。グラフィック処理であり、CADや隠線処理ではありません。
  • ピクセル: 同じシーンとクロックを、より低い解像度でレンダリングし、最近傍ピクセルで拡大、秩序あるディザリングとチャンネル量子化を適用します。これは3Dジオメトリに対するピクセル仕上げであり、ボクセルアートや手書きのスプライトではありません。カーネル仕上げから始めてください。動作しているレンダラをCSSブラーや静止画像で置き換えないでください。

カメラは固定したままにしてください。白いネガティブスペースがシーンを隔離します。地面は、厚いプラットフォームではなく、そのスペースに溶け込む平らで不規則な切り抜きです。土の壁や展示台を決して押し付けないでください。明示的に要求された場合のみ、押し出しベースを使用してください。10個の独立したアイドルワイグルよりも、予備動作、接触、回復のフェーズを持つ1つのアクションを優先してください。ストーリーと競合しないセカンダリライフでそれを囲んでください。スポーツボールは、近くを通過するだけでなく、プレーヤーの手、バット、またはフープに行かなければなりません。

構成と仕上げ固有の決定についてはreferences/art-direction.mdを読んでください。構築を始める前にreferences/scene-api.mdを読んでください。

ワールドを構築する

スキルの固定された依存関係を、ライフサイクルスクリプトなしで一度インストールします:

npm ci --ignore-scripts --prefix <skill>

@diorama/worldsからdefineWorldをインポートするESモジュールとして<subject>.jsを記述します。name、title、description、正の有限なduration、ループ内のstill、bounds、build(W)、tick({t, parts, W})を持つ1つのワールドをエクスポートします。最も近い例は形式のリファレンスであり、主題の制限ではありません:

  • examples/bakery.js:手首とハンドルの接触チェックで生地をこねるパン職人。
  • examples/observatory.js:上向きの望遠鏡の焦点調整(サポート/フォーカスグリップアンカー付き)。
  • examples/florist.js:オリジナルの2人花屋、共有アダルトリグ、固定された足、ブーケグリップアンカー。
  • examples/pottery-studio.js:オリジナルのクラフトアクション、回転する粘土の器に従う共有アダルトリグ、実際の手の接触。
  • examples/cricket.js:広い地面、関節プレーヤー、調整されたボールサイクル。
  • examples/basketball.js:より小さなビネット、ショット、ネット、リターンパス。
  • examples/street-juggler.js:新しい転送テストの結果。キャッチ/リリース位置が手のひらに対してチェックされる3ボールカスケード。これはカスタムエンドポイント駆動のアームを使用しており、異なるレンダラではありません。

ユーザーのリファレンスシーンの別のコピーではなく、ビジュアル言語を伝えるオリジナルの主題を優先してください。人物には共有アダルトW.person、W.plant、W.reachヘルパーを使用し、大きな頭のボックスフィギュアに置き換えないでください。

キットヘルパーを使用してジオメトリを一度構築し、アニメーション用の参照を返します。tickは、すべてのアニメーション化されたトランスフォームを絶対時間から割り当てる必要があります。位置の累積、フレームカウンター、フレームごとの新しいジオメトリ/マテリアル、独立したタイマー、カメラドリフトは禁止です。リアルタイムのイベントタイミングを使用してください:バスケットボールのショットは、スローモーションが要求されていない限り、2秒間浮いてはいけません。予備動作、素早い飛行/接触、読みやすい回復を設定してください。デフォルトの再生速度は1倍であり、遅いタイムラインの修復ではありません。ランタイムクロックはドロップフレームとは独立しています。

boundsは、初期ジオメトリだけでなく、すべてのポーズ、移動する小道具、影をカバーするように設定してください。繰り返しパーツはジオメトリとマテリアルによって自動的にインスタンス化されます。パレットの色を再利用してください。

サブジェクト固有のオブジェクトは、グループとプリミティブで構築できます。カスタムのThree.jsジオメトリまたはマテリアルの場合は、W.own(resource)で登録して、ティアダウンがそれを破棄できるようにします。ホバリングが必要なコントロールを追加しないでください。シーンのストーリーは、ポインタなしでタッチでも機能する必要があります。

単一のオフラインHTMLファイルをビルドします:

node <skill>/scripts/build-world.mjs <subject>.js <output.html>

結果には、Three.js、生成されたテクスチャ、シーン、およびコントロールが含まれます。dioramaスキルのSVG出力よりもサイズが大きくなります。そのトレードオフを開示してください。CDNインポート、ストックテクスチャ、モデルのダウンロード、APIキーは必要ありません。新しい外部アセットはオプションとし、要求された場合はそのライセンスとネットワークコストを開示してください。

実際の出力を証明する

バンドルされたサンプルだけでなく、新しいシーンでレンダリングチェックを実行します:

node <skill>/scripts/look-world.mjs <subject>.js <output-directory>

これにより、生成された実際のHTMLがネットワークアクセスなしでChromiumで開かれ、複数のフェーズと4つすべての仕上げ、モバイルビュー、およびJSONレポートが保存されます。接触駆動のストーリーの場合は、contactTimesと、{label,a:[x,y,z],b:[x,y,z]}ペアを返す contacts({t,parts,W}) インスペクタを宣言してください。lookコマンドは、それらの時間における実際のポーズされたエンドポイントを比較します。また、指定されたリリース時間と接触時間におけるボール/プロップと手のひら/バット/フープの座標を検証します。汎用的なモーションとシームチェックでは、プロップがアクターに当たらないことを検出できません。

ブラウザエラー、表示可能な非白ジオメトリ、シーンの変更、実際のウォールクロックスピード、宣言された手/プロップの接触、ドローコール予算、決定論的シーク、ループシーム、モーション減少、一時停止、オフスクリーンサスペンション、および破棄をチェックします。CHROME_PATHでインストール済みのChromiumを選択できます。それ以外の場合は、スキルフォルダで npx playwright install chromium を実行すると、Playwrightがサポートするブラウザがインストールされます。

次に、保存された画像を開いて見てください。構造チェックに合格しても、類似性、物語性、またはアートの品質は保証されません。ショット/接触の瞬間、シルエット、影、地面のエッジ、ピクセルの可読性、カメラのクリッピング、モバイルスケールを検査してください。references/art-direction.mdを読み、シーンの失敗を修正して再実行してください。パフォーマンス修正は、障害が明らかにそこにある場合にのみ、再利用可能なキットに保持し、あるシーンが異なる構成を必要とするからといって保持しないでください。

キットの変更については、以下も実行します:

npm test --prefix <skill>

スクリーンショットを開かずにビジュアルレビューを主張しないでください。維持されている2つのサンプルがパスしたという理由だけで、新しいスキル評価を主張しないでください。これらの指示から生成された新しい主題が転送テストです。そのプロンプト、出力、および調査結果を別々に保存してください。ブラウザ/WebGLが利用できない場合は、ブロッカーを報告し、ビジュアル品質は明示的に未検証のままにしてください。

正直に提供する

ビルドされたHTMLと、少なくとも1つのレビュー済みスクリーンショットを提供してください。コンセプト、仕上げ、選択した静止時間、おおよそのファイルサイズ、既知の制限事項を述べてください。埋め込みについては、references/scene-api.mdを参照してください。検査または測定された範囲を超えて、オリジナルリファレンスの忠実度、アクセシビリティ、デバイスパフォーマンス、またはシームレスなループを主張しないでください。初期の公開リリースは、プロダクション認定レンダラではありません。実際の制限と測定されたチェックを開示してください。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

diorama

Build small animated 3D worlds for the web (isometric camera, blocks on a rounded base, soft shadows, little vehicles and people that move) in one of six themes you can tune: toy (pastel blocks, warm sun), soft, mono (one accent, the rest tints of ink), line (a hairline drawing, white fills and ink edges, by hand if asked), print (flat tones and ink, a printed illustration) and night. A hero scene for a landing page, a card-sized illustration for docs or a blog, or a mini figure for any small spot (an empty state, a feature in a list, a 404). Use this whenever someone asks for a 3D illustration, an isometric scene, a low-poly or "toy town" animation, a monochrome or line-art 3D figure, a hand-drawn or sketched figure of an object with a bit of life in it, a blank/empty-state illustration, an illustration that answers a hover or a tap, a little game-like SVG world, even if they never say "3D" or "isometric". Ships one self-contained HTML file that draws SVG with no dependency (no th...

diorama-pixel

Build animated pixel-art miniatures: a small isometric place drawn at low resolution and enlarged crisp, with ordered dithering on every surface, procedural planks, thatch, paving, grass and water, a ground that dissolves into the white page, soft cast shadows and tiny people with a looping action. One self-contained HTML file with no dependency (no three.js, no WebGL): a software renderer on a 2D canvas, about 50 KB. Use it whenever someone asks for a pixel-art scene, a retro or 16-bit isometric vignette, a dithered illustration, or a cozy little place in pixels for a landing page, a blog post or a card. For vector UI illustrations, line art and empty states use the diorama skill; for detailed Three.js worlds with articulated people and four finishes use diorama-worlds.

関連スキル