在Manim中如何调控动画渲染时间

Manim中,有些时候我们想延长一下动画播放的时间,注意,这个动画播放的时长,不是视频的时长,是视频中某个动画动作的时长,今天我们就来看这个问题如何调控,方便我们在做动画效果的时候,做到该快的快,该慢的慢,让视频变得更加有条理。

1.简单的self.play

我们先来看代码

1
2
3
4
5
6
7
8
9
10
11
12
13
from manim import *

class RuntimeTraceDemo(Scene):
def construct(self):
circle=Circle().move_to(LEFT)

# 不同速度曲线
self.play(
circle.animate.move_to(RIGHT*3),
run_time=3,
rate_func=smooth # 平滑开始结束
)

我们创建一个圆,创建的同时放到屏幕居左的位置,然后缓慢的将创建好的圆平移到屏幕的右边,大家注意run_time的参数问题,来看动画演示的效果

然后我们修改上面的代码,将时间参数做出调整

1
run_time=8,

然后再来看演示的动画效果

从视频可以看出,圆从屏幕左侧移动到屏幕右侧,用了8秒,这样一来,我们就通过修改run_time参数的值,来调整了动画的时长。同样操作,来看其他参数下的演示,先看代码

1
2
3
4
5
6
7
8
9
10
11
from manim import *

class TraceDemodot(Scene):
def construct(self):
dot = Dot()
# 弹跳效果
self.play(
dot.animate.shift(UP*2),
run_time=5,
rate_func=there_and_back # 去而复返
)

我们就是创建了一个向上运动的点,点从底部跳起,然后重新回到起点。然后看演示的效果,这次借助了rate_func的参数

2.真正的self.play

2.1.animations (可变参数)

要播放的动画对象,可传入多个

1
self.play(Create(circle), Write(text))  # 同时播放多个动画

2.2.run_time(float)

动画持续时间(秒),默认 2.0 秒

1
self.play(FadeIn(obj), run_time=3)  # 淡入持续3秒

2.3.rate_func(函数)

动画速度曲线函数,控制动画的加速度

1
self.play(MoveToTarget(obj), rate_func=smooth)  	# 平滑开始和结束
1
self.play(MoveToTarget(obj), rate_func=linear)  	# 线性匀速
1
self.play(MoveToTarget(obj), rate_func=rush_into)  	# 冲入效果
1
self.play(MoveToTarget(obj), rate_func=rush_from)  	# 冲出效果

2.4.lag_ratio (float)

多个动画之间的延迟比例(0-1)

1
self.play(*[FadeIn(obj) for obj in group],lag_ratio=0.1)  # 逐个淡入

3.和play.wait的区别

play.wait在动画之间添加暂停,让观众有时间观察。