3D 卡通動畫
版本 1.0.1(公開版)· 方法與風格已於第一輪獲得擁有者批准(「重力是如何被發現的」,第三版,2026 年 10 月 26 日)。1.0.1 版使工具可在任何電腦上運行;渲染出的影片與 1.0.0 版相同。
「擁有者」 在本文件中指的是影片的委託人:即要求製作並批准影片的人。
腳本優先(擁有者的規則,2026 年 10 月 27 日)。每部影片,以及每個新版本,都必須從擁有者框架內的腳本開始。在獲得批准前(技能 4),不得進行配音、細節建置或渲染。
本套件是一個完整、可重複使用的方式,用來製作一種特定類型的影片:短小、快速、溫暖的 3D 卡通解說片。它適用於任何主題。範例作品以重力為主題,但方法本身並不依賴於此:這些技能說明了如何找到鉤子、選角、搭建場景、將每個數字轉化為物件、為每個動作配合語音時機、設計音效以及檢查每一幀畫面,無論下一個主題是什麼。
完成的影片是什麼樣子
- 格式: 1080×1920,30 fps,30–60 秒。一個旁白子句 = 一個鏡頭(大約每 1.1–1.5 秒一個新畫面)。最後一行畫面會迴圈連接到第一幀。
- 故事: 前 2 秒內提出一個鉤子,引出一個問題;早期給予回報;向「你」陳述利害關係;情節升級;在三分之二處重新鉤住觀眾;用一個具體畫面呈現轉折;結尾形成迴圈。
- 外觀: 柔和卡通著色、墨水輪廓、溫暖實用燈光、邊緣光、景深、光暈和顆粒感。膚色臉孔;服裝、道具和場景使用品牌色(夜黑紅、珊瑚藍、乾邑色、白沙色、煤灰色)。真實物品看起來是真實的(地球是藍色和綠色的)。
- 角色: 圓球頭、豆子身體、棍狀四肢、連指手套般的手;畫上去的臉孔,沒有唇形同步;在重音字詞前透過眨眼切換臉孔;停頓時保持完全靜止。
- 鏡頭: 始終移動,在移動間緩慢爬行,並在每個句子的第一個詞處加速進入 6 幀的溶解過場。
- 事實即物件: 每個口述數字都會在對應的幀上,以計數器、日曆、捲尺、儀表或發光標誌的形式呈現。
- 文字: 前 2-3 秒在頂端顯示主題問題(例如:「重力 是如何被發現的?」),以及在 70% 高度處的編輯式字幕組合(
EVERYTHING覆蓋在 you know 上)。 - 音效: 語音(ElevenLabs)、低於語音 18 LU 的原創背景音樂、每個可見動作對應的輕柔擬聲音效、每個故事節拍的重音效果,最終母帶輸出為 −14 LUFS。
製作流程(每個步驟都是一項技能)
| # | 步驟 | 技能 | 產出 |
|---|---|---|---|
| 1 | 將主題轉化為電影構想 | 主題到電影 | 切入點、鉤子、角色、場景、數字列表、整體藍圖 |
| 2 | 編寫腳本 | 腳本與留存 | 附有來源的 script.md |
| 3 | 錄製語音並安排每個詞的時間 | 配音與時間 | vo/voice-final.wav、vo/words-final.json |
| 4 | 為每個鏡頭繪製腳本;獲得擁有者批准 | 腳本與鏡頭計畫 | storyboard.md、腳本靜態圖、擁有者的腳本板(storyboard/<v>/<Title> - storyboard <n>.png 和 .html) |
| 5 | 設定外觀 | 外觀、燈光與品牌 | 燈光預設、調色盤、每個鏡頭的鏡頭設定 |
| 6 | 建構角色陣容 | 角色與臉孔 | 骨架、服裝、臉部切換 |
| 7 | 演出每個子句 | 動作與表演 | 姿勢關鍵影格、搞笑橋段、物理效果 |
| 8 | 移動鏡頭 | 鏡頭與轉場 | 每個鏡頭一個軌道運鏡 |
| 9 | 讓數字變得具體 | 事實即物件 | 每個數字一個裝置 |
| 10 | 搭建並裝飾場景 | 場景與道具 | 使用套件搭建並裝飾完成的場景 |
| 11 | 撰寫螢幕文字 | 字幕與標題鉤 | 字幕組合、標題問題 |
| 12 | 設計音效 | 音效設計與混音 | 提示列表、混音、分軌 |
| 13 | 渲染並檢查每一幀 | 渲染與品質檢查 | MP4 檔案、品質保證記錄 |
| 14 | 與擁有者一起審查並學習 | 審查與學習 | 回饋、下一版本、套件更新 |
請按此順序執行步驟。步驟 4 至 11 都發生在每個影片的單一檔案 (film.mjs) 內,因此在實踐中,您需要先規劃腳本,然後逐個鏡頭建置,並在過程中渲染靜態圖。
不可協商的原則
- 腳本優先。 在語音被錄製、鏡頭被詳細建置或任何內容被渲染之前,擁有者必須先批准腳本(技能 4)。
- 複製技術,而非內容。 每個角色、場景、標誌、笑話和發明的品牌名稱都必須是我們原創的。真實的歷史人物應繪製成我們自己的卡通角色;絕不能繪製受版權保護的角色。
- 鉤子優先。 前 2 秒必須提出一個問題;標題問題需點明主題。
- 每個數字都須變為一個物件,並在其對應的語詞處出現。絕不能使用純文字疊加。
- 手勢在其對應詞發生前 4 幀到位;臉部切換在其前 2 幀,並透過眨眼完成。
- 每個可見動作都必須有聲音;沒有動作就沒有聲音。
- 每一幀都必須被檢查(自動構圖檢查和跳幀掃描,然後人工檢查)之後才能讓擁有者看到。
- 事實必須有來源。 當來源說法不一致時,用平實的語言表述保留。
- 擁有者的品牌: 膚色臉孔、五種品牌色加上品牌紅,以及內含的字型:字幕用的 TeX Gyre Heros Bold + Instrument Serif Italic,標籤用的 Titan One(如果擁有者添加了,則使用已授權的 Helvetica Bold + Editorial New Italic;需註明使用了哪一種)。全部在 brand/ 中。
新主題快速入門
- 將
templates/new-film/複製到examples/<主題代碼>/。 - 填寫 新主題工作表(技能 1)並將腳本(技能 2)寫入
film.mjs中的SCRIPT。 - 使用草稿時間建置鏡頭並渲染腳本靜態圖:
node recipe/tools/render.mjs examples/<代碼>/film.mjs <輸出目錄> --stills shots --qa - 腳本優先。
- 將
templates/storyboard.json複製到examples/<代碼>/storyboard/v1/storyboard-1.json,每個鏡頭一個面板及其靜態圖。 - 繪製腳本板:
node recipe/tools/storyboard-board.mjs examples/<代碼>/storyboard/v1/storyboard-1.json。 - 將腳本板交給擁有者,並根據反饋進行修改(
storyboard-2,…),直到獲得批准。 - 然後錄製語音:
ELEVENLABS_API_KEY=… node recipe/tools/voiceover.mjs examples/<代碼>(在編寫vo/text.txt之後)。
- 將
- 根據實際語詞重新調整時間(自動完成),渲染影片,然後是音效:
node recipe/tools/render.mjs examples/<代碼>/film.mjs <輸出> --video --name silent.mp4python -I recipe/tools/sound.py examples/<代碼> <輸出>/silent.mp4 <輸出>/shots.json "<輸出>/<Title>.mp4" - 檢查:構圖報告、
node recipe/tools/jump-scan.mjs <影片> <輸出>/shots.json、python -I recipe/tools/sfx-levels.py <輸出> <輸出>/cue-sheet.txt,然後人工檢查每一幀(技能 13)。
檔案位置
| 路徑 | 內容 |
|---|---|
skills/ | 14 個步驟技能 |
recipe/engine/ | 渲染器:core.mjs(外觀、後製、字幕、合成、檢查)、faces.mjs、character.mjs、props.mjs、props2.mjs、kit.mjs(主題中性的場景和燈光預設)、places.mjs / places2.mjs(範例的裝飾場景)、index.html、vendor/three(three.js r186,MIT 授權)、fonts/ |
recipe/tools/ | storyboard-board.mjs(擁有者的腳本板,輸出為 PNG 和可點擊的 HTML 頁面)、render.mjs、voiceover.mjs、sound.py、jump-scan.mjs、sfx-levels.py、paths.mjs(FFmpeg、Chrome 和 Playwright 的路徑設定) |
templates/ | new-film/film.mjs(一個主題中性的起始檔案,可使用草稿時間執行)和工作表 |
examples/how-gravity-was-found/ | 已批准的影片:原始碼、語音、最終影片、腳本、提示表、分軌、早期版本 |
references/ | 參考研究、擁有者指示、引擎 API、故障目錄、回饋歷史、引擎筆記 |
brand/ | 已批准影片的顏色和字型:palette.json、palette.css、style-sheet.png(由 recipe/tools/style-sheet.mjs 繪製) |
evaluation/ | 交付檢查清單、驗收標準、已知限制 |
preview/ | style-card.json:風格的名稱、外觀和格式的單一卡片,指向範例的海報、影片和腳本 |
在新機器上設定
所需工具:
- Node 22+;
- FFmpeg 6+ 及其 ffprobe,並需在 PATH 環境變數中;
- Python 3.10+ 及 NumPy;
- 一張 Chrome 可用於 WebGL2 的顯示卡。
在套件資料夾中,執行 npm install、npx playwright install chromium 和 pip install -r requirements.txt;完整步驟請見 README。如果 FFmpeg 安裝在其他位置,請設定 CARTOON_FFMPEG。若要使用其他 Chrome 版本,請設定 CARTOON_CHROME(詳見 recipe/tools/paths.mjs)。
影片檔案必須放在套件資料夾內(examples/<代碼>/),因為渲染器會將該套件提供給瀏覽器。語音服務需要一個具有文字轉語音權限的 ElevenLabs API 金鑰,透過 ELEVENLABS_API_KEY 環境變數傳遞給該指令,且絕不能寫入任何檔案中。