chamber-video

3Blue1Brown 源码索引

Agent 参考 3b1b 风格动画时的源码指引

源码仓库

仓库说明引擎
3b1b/videos所有视频源码ManimGL
3b1b/manim3b1b 的 Manim 分支ManimGL
manim/community社区维护版(本项目使用)Manim Community

本项目使用 Manim Community v0.20+,与 ManimGL 有 API 差异。

关键场景代码路径

线性代数的本质 (Essence of Linear Algebra)

3b1b/videos/
├── eola/chapter3.py        # 线性变换与矩阵
├── eola/chapter4.py        # 矩阵乘法
├── eola/chapter6.py        # 逆矩阵
├── eola/chapter7.py        # 列空间与零空间
├── eola/chapter10.py       # 特征向量与特征值
└── eola/chapter14.py       # 抽象向量空间

微积分的本质 (Essence of Calculus)

3b1b/videos/
├── eoc/chapter1.py         # 微积分导论(面积与 π)
├── eoc/chapter2.py         # 导数的本质(割线→切线)
├── eoc/chapter3.py         # 用导数作图
├── eoc/chapter7.py         # 微分方程
└── eoc/chapter8.py         # 积分

神经网络 (Neural Networks)

3b1b/videos/
├── nn/activation.py        # 激活函数
├── nn/gradient_descent.py  # 梯度下降
└── nn/backpropagation.py   # 反向传播

3b1b 常用动画模式

1. 网格变形(线性变换)

grid = NumberPlane()
matrix = [[2, 1], [1, 2]]
self.play(grid.animate.apply_matrix(matrix), run_time=2)

2. 箭头表示向量

vec = Arrow(ORIGIN, [2, 1, 0], buff=0, color=YELLOW)
label = MathTex(r"\vec{v}", font_size=30, color=YELLOW).next_to(vec, UR, buff=0.1)
self.play(GrowArrow(vec), FadeIn(label))

3. 数轴上的点移动

number_line = NumberLine(x_range=[-3, 3, 1])
dot = Dot(number_line.n2p(1), color=YELLOW)
label = always_redraw(lambda: MathTex(
    f"{number_line.p2n(dot.get_center()):.1f}",
    font_size=24,
).next_to(dot, UP, buff=0.15))

self.add(dot, label)
self.play(dot.animate.move_to(number_line.n2p(2.5)), run_time=1.5)

4. 逐步展开公式

steps = VGroup(
    MathTex(r"f(x)"),
    MathTex(r"= x^2 + 2x + 1"),
    MathTex(r"= (x + 1)^2"),
).arrange(RIGHT, buff=0.3)

for step in steps:
    self.play(Write(step), run_time=0.8)
    self.wait(0.3)

5. 高亮强调

self.play(Indicate(formula[0][5:8], color=YELLOW, scale_factor=1.5))
rect = SurroundingRectangle(key_part, color=YELLOW, buff=0.1)
self.play(Create(rect))

6. 相机缩放聚焦

class ZoomDemo(MovingCameraScene):
    def construct(self):
        plane = NumberPlane()
        self.play(Create(plane))
        self.play(self.camera.frame.animate.scale(0.3).move_to([1, 1, 0]), run_time=1.5)
        self.wait(1)
        self.play(self.camera.frame.animate.scale(3.3), run_time=1.5)

ManimGL vs Manim Community 差异速查

功能ManimGL (3b1b)Manim Community (本项目)
安装pip install manimglpip install manim
运行manimgl file.pymanim -ql file.py Class
3D 相机self.camera 直接操作MovingCameraScene / ThreeDScene
Riemannn=10dx=0.3
颜色常量BLUE, BLUE_DBLUE_D, PURE_BLUE, ManimColor
网格变换apply_matrix 直接用apply_matrix 同样可用
光线追踪内置不支持
着色器OpenGL 着色器Cairo 渲染

3b1b 风格特征

  1. 深色背景:默认黑色,视觉焦点集中
  2. 少量配色:黄、蓝、绿为主,红为强调
  3. 流畅动画:smooth 缓动,时间控制精准
  4. 数学直觉:用几何可视化代替纯符号推导
  5. 逐步构建:复杂概念分步出现,每步停留
  6. 相机运动:缩放、平移引导注意力
  7. 手写风格:Write 动画模拟手写过程

参考视频

视频时长核心技法
微积分的本质17min导数几何意义、割线→切线
线性代数的本质16min向量、线性变换
但什么是微分方程呢22min微分方程可视化
傅里叶变换25min频域可视化
神经网络20min神经元可视化

下一步:Skills → 一键生成视频