ManimCE v0.21.0 发布:Typst 排版支持与 Cairo 渲染性能大幅提升

Manim Community Edition 发布了 v0.21.0 版本(2026 年 8 月 10 日),这是继 v0.20.1 之后的又一次功能型版本更新。

本次更新包含 2 项破坏性变更,以及多项值得关注的新特性和性能优化。

其中 Cairo 渲染器在动画密集场景下提速超过一倍,NumPy 数组哈希的 CPU 耗时降低了 94%–98%。

如果你是 Manim 用户,这个版本值得认真了解一下。

核心亮点

1. Typst 排版渲染正式支持

这是本次更新最引人注目的新功能。

Manim v0.21.0 引入了 TypstTypstMath 两个新的 mobject 类型,可以直接编译 Typst 标记和数学表达式为 SVG,无需安装 TeX 环境

这意味着你可以在没有 LaTeX 工具链的机器上渲染公式和文本。

安装可选依赖:

pip install "manim[typst]"

使用示例:

class TypstExample(Scene):
    def construct(self):
        text = Typst(
            "这是一个通过 Typst 渲染的文本",
            font_size=48,
        )
        formula = MathTypst(
            r"sum_(i=1)^n i = (n(n+1))/2",
            font_size=56,
        )
        self.play(Write(text))
        self.play(Transform(text, formula))
        self.wait()

TypstMathTypst 支持基于标签的子组选择、{{ ... }} 表达式分组,并与 Manim 现有的 label API 集成。

对于不想在本地配置 TeX 环境的用户来说,这是一个很实用的替代方案。

2. Cairo 渲染器提速 2.2 倍

对于使用 Cairo 渲染器制作动画密集型场景的用户,这个版本带来了显著的性能提升。

Cairo 路径构建现在使用向量化的子路径分割方式,同时像素数组处理避免了冗余拷贝,输出结果保持像素级一致。

需要注意的是,这一优化同时引入了破坏性变更Camera.convert_pixel_array() 方法移除了 convert_from_floats 参数,现在始终将浮点数转换为相机的像素格式。

如果你之前显式传入了 True,直接省略该参数即可;

如果依赖旧的拷贝行为,可以改用 np.array(pixel_array)

3. 并行 partial movie 编码

新版本引入了 max_inflight_encoders 配置项,允许 partial movie 编码与渲染过程重叠执行,同时限制编码器工作线程的数量。

使用方式:

manim render --max-inflight-encoders 4 --encoder-queue-size 8 scene.py Scene

其中 --encoder-queue-size 限制每个编码器持有的待处理帧缓冲区数量。

默认值为 1,保持串行行为;提高该值后,编码密集型基准测试的耗时降低了 56%,实际渲染场景也有约 8%–11% 的改善。

4. NumPy 数组哈希优化

场景缓存键中的 NumPy 数组不再以采样的 JSON 数据表示,改为使用完整逻辑内容的确定性哈希。

这避免了图像数据变化时出现陈旧的缓存命中,同时在代表性基准测试中将哈希 CPU 耗时降低了约 94%–98%

破坏性变更

变更项 影响 迁移方式
Code 颜色处理委托给 Pygments paragraph_config={"color": ...} 不再生效 通过 formatter_style 传入自定义 Pygments Style 子类,配置 token 样式和 line_number_color;背景色仍可通过 background_config={"fill_color": ...} 覆盖
Camera.convert_pixel_array() 参数移除 convert_from_floats 参数不再存在 省略该参数;如需旧拷贝行为,使用 np.array(pixel_array)

其他改进与文档更新

其他改进以易用性稳定性为主:

GenericGraph 支持元组边查找,多个 mobject 方法支持链式调用,并减少 submobjects 拷贝;

字形不匹配时报错更清晰。

修复了OpenGL 崩溃、CyclicReplace/SwapAngle 及动画组 z-index 排序等问题。

构建工具从 Hatchling 切换为 uv-build,并补充类型注解。

文档仅小幅修正术语,补充 SphereGenericGraphMovingCameraScene 的说明。

总结

Manim v0.21.0 是一个“性能与能力并重”的版本。

Typst 的引入为不依赖 TeX 的渲染提供了新的选择,Cairo 渲染器的 2.2 倍提速和 NumPy 哈希 94%–98% 的 CPU 节省则直接改善了日常使用体验。

如果你经常渲染动画密集的场景,建议尽快升级体验。

需要注意 Code 的颜色配置方式有变化,升级时请检查相关代码。

posted @ 2026-09-17 16:00  wang_yb  阅读(8)  评论(0)    收藏  举报