博客 / 詳情

返回

Manim CE v0.20.0 發佈:動畫構建更絲滑,隨機性終於“可控”了!

大家新年好!Manim Community Edition (CE) 剛剛發佈了里程碑式的 v0.20.0 版本。

如果你覺得以前寫 updater(更新程序)太囉嗦,或者每次渲染隨機場景結果都不一樣讓你抓狂,那麼這次更新絕對是為你準備的!

本次更新不僅重構了核心組件,還帶來了一些超甜的“語法糖”。

下面我們來看看這次升級的亮點,以及它們如何改變你的編碼方式。

✨ 亮點一:Mobject.always —— 告別繁瑣的 Lambda

在製作動畫時,我們經常需要讓一個物體“永遠”跟隨另一個物體(比如標籤永遠在點的上方)。

以前,你需要使用 add_updater 配合 lambda 函數,代碼看起來又長又亂。

v0.20.0 引入了神奇的 .always 屬性,讓這一切變得符合直覺。

🆚 對比示例:讓標籤跟隨方塊

以前的寫法 (v0.19.x 及之前):
你需要顯式地添加一個更新函數,或者寫一個 lambda 表達式。

s = Square()
label = Text("我在這裏")

# 你必須這樣寫:
label.add_updater(lambda m: m.next_to(s, UP))

# 或者這樣寫:
def update_label(m):
    m.next_to(s, UP)
label.add_updater(update_label)

現在的寫法 (v0.20.0):
直接用 always,像説話一樣自然!

s = Square()
label = Text("我在這裏")

# 新語法:永遠.緊挨着(方塊, 上方)
label.always.next_to(s, UP)

💡 為什麼好用? 這不僅減少了代碼量,還讓代碼的可讀性大幅提升。

🎲 亮點二:可復現的隨機性

對於製作數學或科學視頻的人來説,"隨機"有時候是個麻煩。

你想展示 10 個隨機點,但你不希望每次重新渲染視頻時,這 10 個點的位置都變了。

v0.20.0 終於引入了正式的 Seed(種子)配置

🆚 對比示例:生成隨機點

以前的情況:
每次運行 manim render,隨機生成的位置都會變化(除非你自己手動在 Python 腳本里 hack random.seed)。

現在的情況:
你可以通過配置文件或命令行參數鎖定“運氣”。

方式 1:命令行參數

# 只要種子是 42,生成的畫面永遠一模一樣
manim -pql scene.py MyScene --seed 42

方式 2:代碼內配置

from manim import *

config.seed = 123  # 在腳本開頭鎖定種子

class RandomDemo(Scene):
    def construct(self):
        # 無論運行多少次,這個圓的位置都是固定的
        dot = Dot(point=[np.random.random(), np.random.random(), 0])
        self.add(dot)

📐 亮點三:MathTex 重構與更強的子結構控制

公式是 Manim 的靈魂。v0.20.0 重寫了 MathTex 的底層邏輯。

現在的 MathTex 在處理 LaTeX 拆分時更加健壯,而且能夠利用 SVG 的“命名組”特性。

這意味着,當你把公式拆分成不同部分進行着色或變換時,出錯的概率大大降低了。

🔧 示例:精準控制公式顏色

class MathUpdate(Scene):
    def construct(self):
        # 使用 {{ }} 將想要獨立操作的字符包裹起來
        # Manim 會自動把這些部分分離成獨立的子對象(submobjects)
        equation = MathTex(r"{{a}}^2 + {{b}}^2 = {{c}}^2")

        # 現在 "a" 是獨立的,染色不會影響 "^2"
        equation.set_color_by_tex("a", BLUE)
        equation.set_color_by_tex("b", GREEN)
        equation.set_color_by_tex("c", RED)

        self.add(equation)
        self.wait(1)

⚠️ 注意:破壞性變更與修復

升級前,請留意以下變化,你的老代碼可能需要微調:

  1. ImageMobject 的修復:如果你以前對圖片進行了 3D 旋轉或翻轉,可能會發現行為變了——因為以前是錯的,現在修好了!同時,移除了一些不常用的重採樣算法參數(如 lanczos)。
  2. 新顏色常量:如果你是設計強迫症,現在可以使用 PURE_CYAN(純青)、PURE_MAGENTA(純洋紅)和 PURE_YELLOW(純黃)。
  3. Table 修復:修復了高亮表格單元格時可能導致的無限遞歸崩潰問題。

🔧 技術債務清理

1. 減少對 SciPy 的依賴

用 Python 標準庫的 math.comb 替代了 scipy.special.comb,減少了外部依賴,讓安裝更輕量。

2. 類型提示系統完善

為多個核心模塊添加了類型註解:

  • rotation.py
  • image_mobject.py
  • opengl_renderer.py
  • point_cloud_mobject.py

這對於使用 IDE 進行開發的用户來説是個好消息,可以獲得更好的代碼補全和類型檢查支持。

3. 移除未來導入要求

不再強制要求 from __future__ import annotations,簡化了代碼編寫。

📚 文檔改進

  1. 完善了 RandomColorGenerator 的文檔
  2. 改進了 TransformFromCopy 的文檔字符串
  3. 修復了損壞的外部鏈接
  4. 更新了 Python 版本要求文檔

📦 如何升級?

準備好體驗新功能了嗎?打開終端,運行:

pip install --upgrade manim

或者如果你使用 conda:

conda update manim

快去試試那個超酷的 .always 屬性吧!

💡 總結

manimCE v0.20.0 是一個注重穩定性和開發體驗的版本。雖然有一些破壞性變更,但帶來的改進是值得的:

  • MathTeX 更穩定可靠
  • ✅ 動畫構建更直觀
  • ✅ 代碼質量更高
  • ✅ 文檔更完善
  • ✅ 可復現的隨機效果

特別是 Mobject.always 這個新特性,讓動畫編寫變得更加優雅。強烈建議大家升級體驗!

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.