大家新年好!Manim Community Edition (CE) 刚刚发布了里程碑式的 v0.20.0 版本。
如果你觉得以前写 updater(更新程序)太啰嗦,或者每次渲染随机场景结果都不一样让你抓狂,那么这次更新绝对是为你准备的!
本次更新不仅重构了核心组件,还带来了一些超甜的"语法糖"。
下面我们来看看这次升级的亮点,以及它们如何改变你的编码方式。
✨ 亮点一:Mobject.always ------ 告别繁琐的 Lambda
在制作动画时,我们经常需要让一个物体"永远"跟随另一个物体(比如标签永远在点的上方)。
以前,你需要使用 add_updater 配合 lambda 函数,代码看起来又长又乱。
v0.20.0 引入了神奇的 .always 属性,让这一切变得符合直觉。
🆚 对比示例:让标签跟随方块
❌ 以前的写法 (v0.19.x 及之前):
你需要显式地添加一个更新函数,或者写一个 lambda 表达式。
python
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,像说话一样自然!
python
s = Square()
label = Text("我在这里")
# 新语法:永远.紧挨着(方块, 上方)
label.always.next_to(s, UP)
💡 为什么好用? 这不仅减少了代码量,还让代码的可读性大幅提升。
🎲 亮点二:可复现的随机性
对于制作数学或科学视频的人来说,"随机"有时候是个麻烦。
你想展示 10 个随机点,但你不希望每次重新渲染视频时,这 10 个点的位置都变了。
v0.20.0 终于引入了正式的 Seed(种子)配置。
🆚 对比示例:生成随机点
❌ 以前的情况:
每次运行 manim render,随机生成的位置都会变化(除非你自己手动在 Python 脚本里 hack random.seed)。
✅ 现在的情况:
你可以通过配置文件或命令行参数锁定"运气"。
方式 1:命令行参数
bash
# 只要种子是 42,生成的画面永远一模一样
manim -pql scene.py MyScene --seed 42
方式 2:代码内配置
python
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 的"命名组"特性。
这意味着,当你把公式拆分成不同部分进行着色或变换时,出错的概率大大降低了。
🔧 示例:精准控制公式颜色
python
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 版本要求文档
📦 如何升级?
准备好体验新功能了吗?打开终端,运行:
bash
pip install --upgrade manim
或者如果你使用 conda:
bash
conda update manim
快去试试那个超酷的 .always 属性吧!
💡 总结
manimCE v0.20.0 是一个注重稳定性和开发体验的版本。虽然有一些破坏性变更,但带来的改进是值得的:
- ✅
MathTeX更稳定可靠 - ✅ 动画构建更直观
- ✅ 代码质量更高
- ✅ 文档更完善
- ✅ 可复现的随机效果
特别是 Mobject.always 这个新特性,让动画编写变得更加优雅。强烈建议大家升级体验!