大家新年好!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)
⚠️ 注意:破壞性變更與修復
升級前,請留意以下變化,你的老代碼可能需要微調:
- ImageMobject 的修復:如果你以前對圖片進行了 3D 旋轉或翻轉,可能會發現行為變了——因為以前是錯的,現在修好了!同時,移除了一些不常用的重採樣算法參數(如
lanczos)。 - 新顏色常量:如果你是設計強迫症,現在可以使用
PURE_CYAN(純青)、PURE_MAGENTA(純洋紅)和PURE_YELLOW(純黃)。 - Table 修復:修復了高亮表格單元格時可能導致的無限遞歸崩潰問題。
🔧 技術債務清理
1. 減少對 SciPy 的依賴
用 Python 標準庫的 math.comb 替代了 scipy.special.comb,減少了外部依賴,讓安裝更輕量。
2. 類型提示系統完善
為多個核心模塊添加了類型註解:
rotation.pyimage_mobject.pyopengl_renderer.pypoint_cloud_mobject.py
這對於使用 IDE 進行開發的用户來説是個好消息,可以獲得更好的代碼補全和類型檢查支持。
3. 移除未來導入要求
不再強制要求 from __future__ import annotations,簡化了代碼編寫。
📚 文檔改進
- 完善了
RandomColorGenerator的文檔 - 改進了
TransformFromCopy的文檔字符串 - 修復了損壞的外部鏈接
- 更新了 Python 版本要求文檔
📦 如何升級?
準備好體驗新功能了嗎?打開終端,運行:
pip install --upgrade manim
或者如果你使用 conda:
conda update manim
快去試試那個超酷的 .always 屬性吧!
💡 總結
manimCE v0.20.0 是一個注重穩定性和開發體驗的版本。雖然有一些破壞性變更,但帶來的改進是值得的:
- ✅
MathTeX更穩定可靠 - ✅ 動畫構建更直觀
- ✅ 代碼質量更高
- ✅ 文檔更完善
- ✅ 可復現的隨機效果
特別是 Mobject.always 這個新特性,讓動畫編寫變得更加優雅。強烈建議大家升級體驗!