Python

Manim:3Blue1Brown 影片背後的數學動畫引擎

Manim 是一個 Python 動畫引擎,用於建立精確的數學動畫,由 3Blue1Brown 的 Grant Sanderson 為他的教育 YouTube 影片所建立。

Manim:3Blue1Brown 影片背後的數學動畫引擎

如果您在過去十年中看過 YouTube 上的教育影片,您幾乎肯定見過 Manim 的作品。Grant Sanderson 的 3Blue1Brown 頻道獨特的風格——流暢、精確動畫的幾何變換、即時展開的方程式以及將複雜數學概念渲染得直觀可視——完全由這個開源 Python 函式庫驅動。Manim 代表 Mathematical Animation Engine(數學動畫引擎),它已經讓世界級的數學視覺化創作變得普及。

Sanderson 最初編寫 Manim 作為個人工具,用於製作他的 3Blue1Brown 頻道的動畫,該頻道已成長為超過 600 萬訂閱者。該函式庫於 2019 年首次公開釋出,並迅速在教育工作者、學生和內容創作者中獲得關注,他們希望將同樣的視覺清晰度帶到自己的專案中。Manim 背後的基本見解是:數學動畫不是插圖——它們是論證。精心設計的動畫可以以靜態圖表無法做到的方式,傳達證明背後的邏輯或概念背後的直覺。

該函式庫自首次開源釋出以來已顯著發展。最重要的發展是 ManimCommunity 分支的出現,它接管了 Sanderson 的原始程式碼庫,並增加了全面的文件、穩定的發佈週期、廣泛的測試和數十項新功能。兩個版本都仍在積極維護,但它們現在服務於不同的受眾:原始版本用於 3Blue1Brown 的製作工作,社群版用於其他所有人。


Manim 是如何誕生的?為什麼有兩個版本?

Manim 的起源故事在開源領域中並不常見。Grant Sanderson 完全為自己使用而建立了第一個版本的 Manim,同時製作 3Blue1Brown 影片。它從來就不是一個通用的動畫函式庫——它只是一個碰巧被開源化的個人工具。API 僅由 Sanderson 自己的使用模式來記錄,並且不保證穩定性或向後相容性。

隨著 YouTube 頻道人氣的增長,對該工具的興趣也隨之增加。開發者開始貢獻補丁和功能,但程式碼庫並非為協作維護而設計。2020 年,社群成立了 ManimCommunity 組織,以建立一個分支的、由社群維護的版本,可以獨立於 Sanderson 的製作需求而發展。該分支進行了完整的文件重寫、適當的渲染器架構和語義版本控制方案。

面向3b1b/manim (原始)ManimCommunity/manim
維護者Grant Sanderson社群維護者
發佈週期不定期,以製作為導向定期語義版本
文件極簡(原始碼即文件)全面的指南和 API 文件
穩定性可能出現破壞性變更穩定,附棄用警告
安裝命令pip install manim (原始)pip install manim (社群)
最適合遵循 Sanderson 的確切工作流程一般用途、教學、學習

你可以用 Manim 建立什麼?

Manim 擅長於特定類別的動畫:精確、程式化的數學物件運動。它的原始物件——稱為「Mobjects」——包含從基本幾何形狀到 LaTeX 渲染的方程式、座標系統、函數圖形、數線和 3D 曲面的一切。

動畫是透過隨時間變換 Mobjects 來定義的:移動圓形、變形圖形、轉換方程式或在兩個形狀之間進行插值。Manim 的渲染器會自動處理中間幀,產生具有可自訂緩動函數的流暢運動。

功能類別範例實作
幾何物件圓形、方形、多邊形、弧Circle(), Square(), Polygon()
數學符號LaTeX 公式、變數文字Tex(), MathTex(), Text()
圖形和座標軸座標系統、函數繪圖Axes(), Graph(), NumberPlane()
3D 場景旋轉物件、3D 曲面ThreeDScene(), Surface()
攝影機效果縮放、平移、跟隨物件self.camera.frame.move_to()
動畫類型淡入、變形、生長、繪製邊框FadeIn(), Transform(), Create()

如何編寫 Manim 動畫?

Manim 動畫是純 Python 程式碼。每個動畫從建立一個繼承自 Scene 的類別並在 construct 方法中定義其內容開始:

from manim import *

class SquareToCircle(Scene):
    def construct(self):
        square = Square()
        self.play(Create(square))
        self.play(square.animate.move_to(RIGHT))
        self.play(Transform(square, Circle()))
        self.wait(1)

這個七行腳本建立了一個完整的動畫:一個方形出現、向右滑動、變形成一個圓形,然後暫停。使用 manim -pql scene.py SquareToCircle 執行,它會用單一終端機命令渲染成影片檔案。-pql 標誌表示「預覽品質,低」——適合快速迭代——而 -pqh 則產生用於發佈的高品質輸出。


執行 Manim 需要什麼硬體?

元件最低建議
CPU雙核心處理器四核心或更好
RAM4 GB8 GB 或更多
GPU內建顯示卡專用 GPU(用於 OpenGL 渲染器)
Python3.83.11 或更新版本
儲存空間函式庫 500 MB渲染專案需 5 GB+

Manim 預設使用 cairo 後端,完全在 CPU 上渲染。可選的 OpenGL 後端提供更快的渲染和即時預覽,但需要效能足夠的 GPU。社群版還支援用於替代渲染器的外掛系統。


關於 Manim 的常見問題


Manim 只適用於數學嗎?

雖然 Manim 的名稱和傳統來自數學,但其功能遠不止於純數學。教育工作者和內容創作者已將 Manim 用於:

  • 物理動畫:視覺化場、力和粒子運動
  • 電腦科學:展示演算法執行、資料結構操作
  • 工程:說明電路圖、機械系統
  • 資料視覺化:建立動態圖表、圖形和網路圖
  • 音樂理論:動態樂譜、和弦進行和節奏模式

該函式庫能夠動畫化 LaTeX 渲染的文字和數學符號,使其對於任何 STEM 領域特別強大,但其物件導向的動畫模型足夠通用,適用於任何類型的說明性內容。


Manim 在教育與內容創作中的應用

自開源釋出以來,Manim 已在像 YouTube 這樣的平台上推動了教育內容創作的革命。「3Blue1Brown 風格」本身已成為一種可識別的類型,數千個教育頻道採用 Manim 來製作他們的影片。大學已將 Manim 整合到數學傳播的課程中,該函式庫已被用於 TED-Ed 動畫、會議簡報和互動式教科書。

ManimCommunity 版已顯著降低了入門門檻。文件包含一個名為「快速入門指南」的綜合教學系列、帶有可下載原始碼的範例畫廊,以及一個活躍的 Discord 社群,初學者可以在其中獲得動畫方面的幫助。


延伸閱讀

TAG