Communitygithub.com

murathany7/scene-3d

ビデオ用の3Dショットを構築します。Three.js (engines/three.js) を使ったライブ合成、またはBlender (engines/blender) を使ったプリレンダリングプレートに対応。トゥーン、フォトリアル、ネオンルック、プロダクト・CADモデル、カメラ移動、物理シミュレーション、全フレームの決定論的制御をカバーします。

scene-3d とは?

このスキルは、ビデオ制作パイプライン内で3Dショットを作成・統合するための包括的なフレームワークを提供します。Three.jsを使用したリアルタイム合成レイヤーと、Blenderを使用したプリレンダリングプレートの両方をサポートします。トゥーン、フォトリアル、ネオンノワールの3種類のルックスタイルを定義し、各スタイルに固有の照明、シェーダー、ポストプロセス設定を実装します。また、GLBモデルの読み込み、アニメーション、リップシンク、物理シミュレーション、HTMLタグを用いた3Dポイントの追跡など、高度な機能も提供します。あらゆるエフェクトは決定論的であり、フレーム時間パラメータ `t` に基づいて状態が計算され、シークや再レンダリングが可能です。Claude Code、Cursor、CodexなどのAIエージェントと連携し、コード生成やパイプライン自動化を支援することを目的としています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/murathany7/reel-studio/tree/HEAD/.agents/skills/scene-3d

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

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

プレビュー

スキル README より

ドキュメント

3Dショット

Three.js(ライブレイヤー)

  • /engines/three.js から threeLayer(el, { update(t), background, fov }) を使用します。three 用のインポートマップを追加してください(examples/engines-demo/index.html を参照)。
  • update(t) はすべてのトランスフォームを t から設定します。カメラ移動:プレーンオブジェクトにGSAPトゥイーンでキーフレームを設定し(tl.to(cam, { x: 4, z: 8, duration: 2 }, 3))、update 内で camera.position にコピーします。
  • モデル:three/addons/loaders/GLTFLoader.js の GLTFLoader を使用します(インポートマップに "three/addons/": "/core/node_modules/three/examples/jsm/" を追加)。読み込みは Studio.wait(...) でラップします。モデルファイルはブランドの assets/models/ またはプロダクションの composition/ に配置します。
  • ルック(looks/README.md)がレンダリングスタイルを決定します。同じモデルを以下のいずれかの方法で使用できます:
    • カートゥーン(looks/toon-3d):toon(color, { steps }) + outline(mesh, { thickness })。ハードライト:1つの DirectionalLight + 低い AmbientLight。
    • フォトリアル(looks/photoreal):await realistic(renderer, scene)(Studio.wait でラップ:ACESトーンマッピング、反射用のスタジオ環境、ソフトシャドウ)+ pbr(color, { metalness, roughness, clearcoat })。castShadow 付きのキーライト、後方からのクールなリムライト、CSSグラデーション上の ShadowMaterial フロア。カメラを水平に近い角度に保ち(光沢面が白くなるのを防ぐ)、ゆっくり移動させ、最終レンダリングは Studio.setup({ motionBlur: true }) で行います。
    • ネオン(looks/neon-noir):emissive(color, intensity) + threeLayer(el, { post: bloom({ strength, threshold }) })、scene.fog。threshold を 0.2 以上、emissive を 2 以下に保たないと、すべてが白く bloom します。
  • アニメーションGLBクリップ:AnimationMixer を作成し、update 内で mixer.setTime(t - start) を呼び出します。mixer.update(delta) は使用しないでください。
  • 3Dポイントに追従するHTMLタグ:update(t) 内で、camera.updateMatrixWorld() と親の updateMatrixWorld() を、vector.applyMatrix4(obj.matrixWorld).project(camera) の前に呼び出します。Three.js はこれらを render() 内でのみ更新するため、これがないとタグは前のフレームに追従します。例:productions/bike-logger/REEL-002-engines。
  • CADメッシュをJSON(頂点+インデックス)として扱う場合:toNonIndexed() + computeVertexNormals() でシャープなフラットファセットを生成します。threeLayer(..., { pixelRatio: 2 }) でレンダリングすると、エッジがスーパーサンプリングされます。
  • 物理:ベイクします(最初のフレームの前に固定1/120秒ステップで配列にシミュレートし、t で参照します)。
  • 会話キャラクター:/engines/lipsync.js と台詞の .visemes.js(scripts/lipsync.sh から)を従来の <script> タグで読み込み、update(t) 内で LipSync.paramsAt(cues, t, "mouth", { offset }) → { open, wide, round }(0…1)をモーフターゲット(mesh.morphTargetInfluences)または口のメッシュのスケールに適用します。engines/README.md の リップシンク を参照してください。

Blender(プレート)

  • シーンスクリプトは build(ctx) を定義します。engines/blender/example_scene.py をコピーしてください。ctx は toon(rgb)、key(obj, "location", t, value)、size、fps、duration、frames、scene を提供します。
  • レンダリング:engines/blender/render.sh scene.py composition/plates/<name>.mp4 --size 1080x1920 --duration 4 [--engine EEVEE|CYCLES|WORKBENCH]。下書きは --size 540x960、最終はフルサイズで。
  • 背景色:カメラにのみ表示します(Light Path "Is Camera Ray" ミックス、例を参照)。これによりシーンを照らしたりトゥーンバンドを平坦化したりしません。
  • カラーマネジメントは Standard に設定されているため、ブランドの16進カラーがそのまま出力されます。フォトリアルプレートの場合は、build 内で ctx["scene"].view_settings.view_transform = "AgX" に切り替え、--engine CYCLES でレンダリングし、エリアライトとカメラ被写界深度を使用します。
  • 物理とシミュレーション:レンダリング前にシーンスクリプト内でベイクします。
  • 会話キャラクター:シーンスクリプトで import lipsync as L とインポートします(run.py が engines/blender/ とスクリプト自身のフォルダをパスに追加します)。cues = L.load("productions/…/audio/vo.visemes.json") でキューを読み込み、L.key_shape_keys(head, cues, ctx, offset=VO_START) で各フレームのシェイプキー open、wide、round をキーします(names={"open": "Jaw"} で他の名前にマッピング可能)。その他の操作:各フレームで L.params_at(cues, t, offset=…) を ctx["key"] とともに使用します。
  • コンポジション内:<video src="plates/<name>.mp4"> + Studio.video(el, { start })。プレートはアルファなしです。テキストやキャラクターはHTMLレイヤーで上部に配置します。

チェック

キービートを静止画としてレンダリングして確認します。Three.js の場合は、1フレームを2回レンダリングしてmd5を比較します。レンダリング時間をプロダクションログに記録します。

Individual skills in this repo

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

関連スキル