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
CATEGORIES