news 2026/7/3 6:41:53

Manim 节奏控制指南 (Rate Functions)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Manim 节奏控制指南 (Rate Functions)

什么是 Rate Function?(给时间的进度条)

Manim中,当你写下.animate.shift(RIGHT)时,默认发生了什么?

如果你觉得动画只是简单的“在Run Time时间内移动距离RIGHT”,那只对了一半。Rate Function本质上是动画完成度与时间的关系

想象一下你在看视频时的进度条:

  • 输入 (t):当前时间过去了多少(从 0 到 1,代表 0% 到 100% 的时间)。
  • 输出 (f(t)):动画实际上完成了多少(从 0 到 1,代表 0% 到 100% 的进度)。

默认的魔法Smooth

Manim 的默认rate_funcsmooth
这符合物理世界的惯性定律:起步时慢(加速),中间快,快结束时慢(减速)

这就是为什么默认的动画看起来比较自然。

如果我们把它换成linear(线性),物体就会瞬间以最大速度启动,最后瞬间急停,看起来就会很像“PPT 动画”

2. 常用函数图鉴:选对“调味料”

Manim内置了一大堆写好的函数,位于manim.utils.rate_functions

我们可以把它们看作是给动画调味的香料。

为了方便演示,我们假设我们要移动一个小球。

2.1. 基础三剑客

  • linear(匀速)
    • 效果:机械感强,速度恒定。
    • 适用场景:旋转的齿轮、循环滚动的背景、匀速扫描的雷达。
  • smooth(默认)
    • 效果:两头慢,中间快。
    • 适用场景:绝大多数物体的移动、缩放。
  • rush_into/rush_from
    • 效果
      • rush_into: 越走越快,最后“砰”地撞线(只有加速)。
      • rush_from: 一开始很快,慢慢停下来(只有减速)。
    • 适用场景:连续动作的衔接。比如小球飞入画面停下(rush_from),或者发射出去(rush_into)。

2.2. 动感特效组

  • there_and_back(往返)
    • 效果:走到终点,又原路返回起点。
    • 适用场景:强调某个东西。比如把公式放大一下再缩回去,告诉观众“看这里!”。
  • wiggle(摆动)
    • 效果:像果冻一样左右晃动一下。
    • 适用场景:表示“错误”、“拒绝”或者引起注意。
  • running_start(助跑)
    • 效果:先向后退一点点,然后猛地向前冲。
    • 适用场景:想要表现物体很有力量感,或者像卡通片里的冲刺效果。

2.3. 物理模拟组

  • ease_out_bounce(落地反弹)
    • 效果:像篮球落地一样,到底部后弹跳几次再停下。
    • 适用场景:文字掉落、物体自由落体。

3. 动手写个 Demo

光说不练假把式。下面的示例代码可以直观感受不同函数的区别:

from manim import * class RateFuncComparison(Scene): def construct(self): # 定义我们想对比的函数 funcs = [ linear, smooth, rush_from, rush_into, there_and_back, rate_functions.ease_out_bounce, ] labels = [ "Linear", "Smooth", "Rush Into", "Rush From", "There & Back", "Bounce", ] # 创建圆点和文字 group = VGroup() for i, (func, label_text) in enumerate(zip(funcs, labels)): dot = Dot(color=TEAL) label = Text(label_text, font_size=20).next_to(dot, LEFT) row = VGroup(label, dot) group.add(row) # 竖直排列 group.arrange(DOWN, buff=0.5).to_edge(LEFT) self.add(group) # 制作动画:让所有点同时向右移动 # 注意:我们在这里分别指定了不同的 rate_func anims = [] for item, func in zip(group, funcs): dot = item[1] # 获取组里的 Dot anims.append(dot.animate(rate_func=func, run_time=3).shift(RIGHT * 4)) self.play(*anims)

运行后你会发现,虽然大家的run_time都是3秒,移动距离一样,但“性格”截然不同。


4. 进阶:自定义与时间扭曲

作为会Python的老手,如果内置函数满足不了你怎么办?

4.1. 自定义函数 (Lambda大法)

rate_func接受任何一个Python函数。

比如,你想做一个简单的“先慢后快”的加速效果,可以直接用Lambda

# y = x^2,典型的加速曲线 class CustomRateFuncDemo(Scene): def construct(self): # 创建一个圆 circle = Circle(radius=0.5, color=BLUE).shift(LEFT * 2) self.add(circle) # 使用自定义 rate_func(t**2)让圆向右移动 self.play(circle.animate(rate_func=lambda t: t**2).shift(RIGHT * 4), run_time=3) self.wait()

4.2. 时间挤压 (Squish Rate Func)

这是Manim中最强大的黑科技之一:squish_rate_func

假设你写了一个run_time=6的动画,但你希望某个特定的变换(比如变色),

在第1.2秒到第3秒之间(即整个进度的0.20.5)由白色变成红色

在第3秒到第4.8秒之间(即整个进度的0.50.8)由红色变成绿色

你不需要把动画拆成多段写,只需要:

class SquishRateFuncDemo(Scene): def construct(self): # 创建一个圆点 dot = Dot(color=WHITE).shift(LEFT * 2) self.add(dot) # 使用UpdateFromAlphaFunc来同时控制位置和颜色变化 def update_dot(obj, alpha): # 位置变化 - 使用默认的linear速率 obj.move_to(LEFT * 2 + RIGHT * 5 * alpha) # 颜色变化 - 使用squish_rate_func控制变色的时间段 squished_alpha = squish_rate_func(smooth, 0.2, 0.5)(alpha) squished_alpha2 = squish_rate_func(smooth, 0.5, 0.8)(alpha) if alpha < 0.5: obj.set_color(interpolate_color(WHITE, RED, squished_alpha)) else: obj.set_color(interpolate_color(RED, GREEN, squished_alpha2)) self.play( UpdateFromAlphaFunc(dot, update_dot), run_time=6, ) self.wait()

这个技巧在制作复杂的多重同步动画时非常有效!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 7:34:57

FreeCAD源码分析: Property View

本文旨在分析FreeCAD中Property View实现过程。 注1&#xff1a;限于研究水平&#xff0c;分析难免不当&#xff0c;欢迎批评指正。 注2&#xff1a;文章内容会不定期更新。 一、主要组件 二、关键流程 网络 FreeCAD: Property View

作者头像 李华
网站建设 2026/7/2 23:40:13

19.AI大模型开发:机器学习----决策树与CART算法

一句话讲完决策树&#xff1a;“像做选择题一样&#xff0c;一层一层往下问&#xff0c;直到得出答案。” 写在前面 今天讲一个特别直观、特别好懂的算法——决策树&#xff08;Decision Tree&#xff09;。 你平时生活里其实天天都在用决策树&#xff0c;只是你自己没意识到…

作者头像 李华
网站建设 2026/7/1 2:32:00

5分钟接入 WhatsApp Cloud API Webhook,实现自动回复

5分钟接入 WhatsApp Cloud API Webhook&#xff0c;实现自动回复目录WhatsApp Cloud API 简介环境准备Webhook 配置步骤Python 代码实现常见踩坑与解决方案进阶&#xff1a;接入 WADesk 实现多账号管理一、WhatsApp Cloud API 简介WhatsApp Cloud API 是 Meta 在 2022 年推出的…

作者头像 李华
网站建设 2026/7/1 2:31:02

RIS赋能的ISAC系统隐私保护技术解析

1. RIS赋能的隐私保护集成感知与通信系统解析在无线通信与感知技术深度融合的今天&#xff0c;集成感知与通信(ISAC)系统正面临前所未有的隐私安全挑战。传统无线信号中的信道状态信息(CSI)就像一把双刃剑——它既能实现毫米级的人体动作识别&#xff0c;也可能成为黑客窃取隐私…

作者头像 李华
网站建设 2026/7/1 2:26:31

从IO500双榜第一,看国产存储的系统级突破

作者&#xff1a;王聪彬中国存储厂商再次站上全球榜单最高点。6月24日&#xff0c;ISC 2026高性能计算大会公布最新IO500榜单&#xff0c;中科曙光ParaStor F9000全闪存储系统包揽生产型全节点榜单和10节点榜单双榜第一&#xff0c;也是首个达成此成就的中国厂商&#xff0c;实…

作者头像 李华