Communitygithub.com

cumalibilgic/ cinematic-3d-video

使用 Three.js 建立高階 3D 動畫影片(產品旋轉台、Logo 與標題揭示、抽象動態圖形、鏡頭穿梭、短影音場景、社交媒體短片),透過 headless Chrome 逐幀渲染並以 ffmpeg 編碼;同時亦支援 headless Blender 路徑進行寫實作品。

cinematic-3d-video 是什麼?

這項技能讓 Claude 能夠生成 3D 動畫影片,儘管它本身無法直接產出影片像素。核心機制是:Claude 撰寫一個 Three.js 場景(以 HTML 檔案呈現),然後透過一個名為 `render.mjs` 的腳本,在 headless Chrome 中逐幀渲染該場景的螢幕截圖,最後使用 ffmpeg 將這些截圖編碼成 MP4 檔案。此方法的最大優勢在於,它將場景定義為時間「t」的純函數,因此渲染結果可在不同機器上完美重現,且不受即時效能影響。腳本會模擬一個虛擬時鐘,而不是即時錄製,因此即使場景非常複雜,也不會出現畫面卡頓,只會需要更長的渲染時間。這項技能支援多種平台(macOS、Windows、Linux),並要求先安裝 Node.js 22+、Chrome/Edge/Chromium 以及 ffmpeg。它提供了一個完整的參考模板資料夾(`templates/starter/`),內含預先配置好的渲染器、色調映射、環境反射、泛光效果、陰影與粒子系統,方便使用者快速開始。工作流程包含:理解需求、複製模板、編輯場景、查看靜態幀進行調整、最終渲染,以及使用 `ffprobe` 驗證輸出。此外,還支援多場景影片、音訊混音、輸出 GIF/WebM 等其他格式。當需要路徑追蹤、體積光、次表面散射或物理模擬等寫實效果時,技能也會引導使用者改用 Blender 來渲染。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/cumalibilgic/cinematic-3d-video/tree/HEAD

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

電影級 3D 影片

Claude 無法直接生成影片像素,但它可以將 3D 場景寫成程式碼,然後逐幀渲染並編碼。本技能即為此流程。

場景 (HTML + Three.js)  -- window.seek(t) -->  scripts/render.mjs  -->  headless Chrome 螢幕截圖  -->  ffmpeg  -->  MP4

render.mjs 使用虛擬時鐘步進,而非即時錄製。因此,結果在每台機器上都相同,且複雜場景不會出現卡頓;它只會渲染得更慢。這就是場景必須是時間的純函數的原因(請參閱「場景規則」)。

1. 首先檢查工具

node -v        # 22 或更新版本 (render.mjs 使用內建的 WebSocket)
ffmpeg -version

必須安裝 Chrome、Edge 或 Chromium (會自動尋找;可設定 CHROME_PATH 以強制指定路徑)。Three.js 由場景從 CDN 載入,因此除非已自備 Three.js (請參閱 references/troubleshooting.md),否則渲染機器需要網路連線。如果缺少某項工具,請明確告知使用者需要安裝的項目,並停止猜測其他解決方案。Blender 僅在寫實路徑時需要。

首次使用新機器時,請執行一次無依賴的煙霧測試。它能證明 Chrome、WebGL 和 ffmpeg 都正常運作,因此後續問題都出在場景本身,而非環境設定:

node <skill-dir>/scripts/render.mjs <skill-dir>/templates/smoke-test.html --out smoke.mp4 --duration 2 --width 640 --height 360

2. 工作流程

  1. 確認需求:用一兩句話總結:主題、氛圍、長度、長寬比、文字、音訊。當使用者未指定時,自行選擇預設值並說明你的選擇:1920x1080、30 fps、8-12 秒、深色背景、一個主角物件、一次相機移動、一個標題。直立影片 (TikTok/Reels/Shorts) 為 1080x1920。在開始之前詢問多個簡短問題通常不值得;第一次渲染就是最好的問題。
  2. 從模板開始。 將 templates/starter/ 複製到工作目錄 (cp -r),然後編輯 index.html。它已包含渲染器、色調映射、環境反射、泛光、陰影、種子粒子、相機路徑、HTML 標題疊加層和時間軸鉤子。替換主角物件、調色板、相機路徑和文字;保留基礎架構。
  3. 先看靜態幀,再渲染影片。 在最忙碌的時刻,以全尺寸渲染少數幾幀並開啟它們 (讀取 PNG 檔案):
    node <skill-dir>/scripts/render.mjs my-video/index.html --stills 0,2,4,6,7.5 --out my-video/stills
    
    在此修正構圖、曝光、顏色和文字清晰度。一幀靜態圖僅需一兩秒;完整渲染則需數分鐘。
  4. 渲染一次。 選擇設定,然後渲染整個影片:
    node <skill-dir>/scripts/render.mjs my-video/index.html --out my-video/video.mp4 --width 1920 --height 1080 --fps 30 --scale 2
    
    --scale 2 以 2 倍解析度渲染再降取樣,可消除邊緣閃爍 (僅在最終渲染時值得使用)。長時間渲染應在背景執行並輪詢進度,避免使用者面對靜止的終端機。
  5. 驗證檔案,而非日誌。 使用 ffprobe 檢查持續時間、大小和幀率;從 MP4 中提取兩三幀 (ffmpeg -ss 3 -i video.mp4 -frames:v 1 check.png) 並檢視。然後將 MP4 和場景資料夾交給使用者,以便他們可以調整。
  6. 修改 即變更場景並重新渲染。在針對某一時刻迭代時,可使用 --start/--end 僅重新渲染特定範圍。

3. 場景規則 (及其原因)

  • 所有動畫都是時間 t 秒的純函數,在 update(t) 內部設定。不使用 Math.random() (請使用帶種子的 rng()),不使用 Date.now(),不使用 clock.getDelta(),也不在幀之間累積狀態。渲染器可能以任何順序、在任何時間點呼叫 seek,且瀏覽器中的預覽必須與影片完全一致。
  • 頁面合約 為 window.seek(t) (同步繪製)、window.__duration (秒) 和 window.__ready = true (一旦資源載入完成)。lib/stage.js 中的 installTimeline() 會完成這三項。詳情請參閱 references/contract.md。
  • 超過 1.0 的 HDR 顏色會產生光暈。 泛光只會捕捉亮度高於其閾值的像素,因此自發光部分使用 new THREE.Color(hex).multiplyScalar(3..6);一般表面則保持在閾值以下。
  • 文字使用 HTML/CSS 疊加在 Canvas 之上 (螢幕截圖包含整個頁面)。它在任何解析度下都清晰,無需字型檔案,並且可以在 update(t) 內部透過純粹的樣式變更來製作動畫。
  • 在設定 __ready 之前,使用 await 載入資源 (GLTF 模型、紋理、字型)。在資源到達之前渲染的幀會成為影片中的永久瑕疵。
  • 保持一個光源故事:一個主光、一到兩個彩色邊緣光,以及基於圖像的反射。在深色、略帶反射的地板上使用反射材質 (金屬、玻璃、清漆) 是呈現「3D 動畫」而非「網頁展示」的關鍵。references/cinematography.md 提供了相機移動、節奏、緩動、光源和色彩的配方。

4. 多場景、音訊、其他格式

  • 多場景影片: 將每個場景渲染成各自獨立的 MP4,並使用相同的尺寸、幀率和編碼器設定,然後無需重新編碼即可合併:建立一個 list.txt 檔案,其中包含 file 'a.mp4' 等行,然後執行 ffmpeg -f concat -safe 0 -i list.txt -c copy out.mp4。將交叉淡入淡出效果放在場景本身的時間軸內 (一個場景的最後一秒和下一個場景的第一秒都淡入/淡出至黑色/顏色),而不是混合已完成的檔案,因為後者會將所有內容編碼兩次。
  • 音訊: --audio track.mp3 會將音訊混合進去,並修剪至影片長度。若要稍後僅變更音效:ffmpeg -i video.mp4 -i new.mp3 -map 0:v -map 1:a -c:v copy -shortest out.mp4。
  • GIF / WebM / 較小的副本: 使用 ffmpeg 對已完成的 MP4 重新編碼;切勿為了變更格式而重新渲染。
  • 變更一個場景 表示需要重新渲染該場景的檔案 (如果其中包含交叉淡入淡出,可能還需要重新渲染下一個場景)。

5. 何時改用 Blender

僅當需求超出即時引擎的模擬能力時,才使用 Blender (references/blender.md、templates/blender/render_blender.py):路徑追蹤玻璃與焦散、體積光、次表面散射、流體/布料/煙霧模擬,或完全寫實的產品照片。Blender 每幀渲染速度慢得多,且需要安裝 Blender 4+;對於其他所有情況,Three.js 能以更短的時間獲得良好結果,並能快速迭代。

參考檔案

檔案何時閱讀
references/contract.md從頭開始編寫場景、載入模型/紋理,或偵錯「從未設定 __ready」問題時
references/cinematography.md想要讓結果看起來更出色時:相機、光源、材質、緩動、節奏、色彩、文字、粒子
references/troubleshooting.md遇到黑畫面、渲染緩慢、CDN/離線設定、Windows/macOS/Linux 特殊狀況、奇異尺寸問題時
references/blender.md需要寫實或模擬效果時
scripts/render.mjs查詢所有選項:node scripts/render.mjs --help

相關技能