制作第一个自己的动画

前一篇详细介绍了 3Blue1Brown 的动画引擎在 Windows 10 64 位系统上,基于 Anaconda的配置方法,并且详细描述了在配置 3Blue1Brown 提供的 manim 动画引擎时可能会出现的问题及解决方法:

李狗嗨:3Blue1Brown的动画引擎如何配置?​zhuanlan.zhihu.com

上面那篇文章发布后,有很多朋友按照该教程成功配置了该动画引擎,同时也有很多热心知友希望能学习更多关于 manim 动画引擎的使用方法。

说实话,该动画制作方法对 Python 的编程水平有一定的要求,如果是 Python 初学者,很可能会在学习动画制作的过程中面临很多编程方面的问题,我尽量把这部分内容写得接地气一些,不过一个困难在于 3Blue1Brown 的官方教程尚未完成,不能提供一个完善的动画制作指南。

幸运的是,威斯康星大学的一位物理教授 Todd Zimmerman 从他的个人视角摸索着写了一套使用教程:

https://talkingphysics.wordpress.com/2019/01/08/getting-started-animating-with-manim-and-python-3-7/​talkingphysics.wordpress.com

我觉得写得很不错,就想着把该教程走一遍,权当是学习 Python 了,并希望能记录一下自己在学习制作动画过程中遇到的问题,形成一系列与之对应的 3B1B 动画制作的中文版文字教程。

该教程最重要的资料是与之配套的教程代码,该代码可以在 Todd 教授的 Github 上找到,对应的网址是:

https://github.com/zimmermant/manim_tutorial/blob/master/manim_tutorial_P37.py​github.com

将该 Python 代码下载下来,或者直接将代码内容复制并保存为 manim_tutorial_P37.py 脚本文件,然后将该文件置于manim文件夹的根目录下。至于manim文件夹的配置,在《3Blue1Brown的动画引擎如何配置?》中已经有详细讲解,这里不再赘述。

为了测试是否配置正确,以管理员模式打开Anaconda Prompt,注意一定要用管理员模式打开:

跳转到manim的根目录:

cd <manim 的根目录>

该命令的意思是:跳转 (cd, Change Directory) 到 manim 的根目录中(注意:按照个人的实际路径进行跳转,图中的路径只是一个参考)。

建议将Python升级到3.7版本(如果本来就是3.7.6版的Python就没必要再更新了)。输入以下代码即可,安装的时候耐心等待,中断的话会很麻烦。

conda install python=3.7

确保前面得到的文件 manim_tutorial_P37.py 已经在 manim 的根目录中,然后输入以下测试命令

python -m manim manim_tutorial_P37.py Shapes -pl

这个时候有可能出现:ModuleNotFoundError: No module named 'cv2.cv2',一般都是版本不兼容的问题,重装即可。方法是输入(当然,如果没有该问题的话就别多此一举了):

pip uninstall opencv-python

然后:

pip install opencv-python

如果还有其他无法解决的问题,建议回到《3Blue1Brown的动画引擎如何配置?》中,把里面的安装过程再走一遍。

一切没问题之后,就可以运行上面的测试命令了。

然后就可以得到以下视频,会有预览,原视频文件可以在根目录的 media 文件夹中找到,这里为了展示我把生成的 .mp4 格式的文件转成了 .gif 文件。

下面介绍该测试命令的含义(其实所有生成动画片段的命令都是按照下面的格式):

python -m manim manim_tutorial_P37.py Shapes -pl

  • 第一个参数 “python” 意思是用python编译器进行编译;
  • 第二个参数是“-m”,意思是以脚本Script的模式运行模块;
  • 由于以脚本模式运行模块,而这里的模块其实指的是 manim.py,但是在 -m 模式下只要输入模块的模块名,而不能包含后面的.py后缀,也就是命令中的第三个参数“manim”;
  • 第四个参数 “manim_tutorial_P37.py” 是用来编写图形动画的脚本文件,该参数是需要.py 后缀的;
  • 第五个参数 “Shapes” 是脚本文件中所定义的一个类的类名;
  • 第六个参数 “-pl” 意思是动画生成后自动预览(Preview),且分辨率较低(Low quality),这样生成的速度快一些。

关于第六个参数的设置可以参考其动画引擎的内部说明,输入以下命令即可查看:

python -m manim --help

下面来说说代码的结构和动画的制作思路,如果打开脚本文件 manim_tutorial_P37.py ,将看到最前面的一部分如下:

1. from manimlib.imports import *
2. import os
3. import pyclbr
4.
5. class Shapes(Scene):
6. # A few simple shapes
7. # Python 2.7 version runs in Python 3.7 without changes
8.     def construct(self):
9.         circle = Circle()
10.        square = Square()
11.        line=Line(np.array([3,0,0]),np.array([5,0,0]))
12.        triangle=Polygon(np.array([0,0,0]),np.array([1,1,0]),np.array([1,-1,0]))
13.
14.        self.add(line)
15.        self.play(ShowCreation(circle))
16.        self.play(FadeOut(circle))
17.        self.play(GrowFromCenter(square))
18.        self.play(Transform(square,triangle))

第 1、2、3 行导入了所有需要的 Python 模块,这里就不再多加解释,这部分也是作者希望尽可能避免被修改的地方,从而可以把精力都放在具体动画内容的设计上,因此模块的导入方法按照上面的来就行。

然后下面定义了一个 Class,也就是所谓的“类”,该“类”的名字是“Shapes”,python 是面向对象的语言,类是面向对象语言中的一个重要概念,类具有“封装”、“继承”、“多型”的特点。类被实例化后就是一个 “Object” ,也就是“对象”,而通过命令行输入命令就可以直接实例化该脚本文件中指定的类,前面多次提到的测试命令中的第五个参数就是用来指定需要实例化的类。

脚本中的每一个类都继承于一个父类“Scene”,可以翻译为一个“场景”。我们要做的就是将这个空场景的各种属性和方法直接继承过来,然后在该空场景中再定义一个 construct() 方法,该方法的输入参数 self 指的是实例化对象 Object 本身,通过这个 construct() 方法,我们可以往场景中添加我们想添加的图形并设计这些图形的表现形式。

代码中的第 9、10、11、12 行分别定义了一个,一个正方形,一条线段,一个三角形

然后利用实例化对象的 add() 或 play() 等方法去展现各个图形在场景“Scene”中的表现形式。

  • 第14行的意思是:将线段添加到场景中;
  • 第15行的意思是:以绘图的方式显示出圆;
  • 第16行的意思是:圆淡出场景;
  • 第17行的意思是:以从中心扩张的形式生成一个正方形;
  • 第18行的意思是:将该正方形以无缝衔接的形式变形为三角形。

为了对比过程方便,这里再放一次动画:

小结

由此我们可以发现, 3B1B 动画的制作思路是:根据自己想在场景中展现的内容和效果编写一系列的类,然后通过命令行对每个类进行实例化,前面输入的测试命令其实就包含了类的实例化过程,而每个类被实例化后都将得到一个动画片段,通过视频制作软件将各个片段衔接起来并配音,就能得到大家喜闻乐见的 3B1B 教学动画了。

意犹未尽?看下一篇!

3Blue1Brown 动画制作教程(2)​zhuanlan.zhihu.com

更多内容,尽在专栏:

直观の数学​zhuanlan.zhihu.com

#原创文章,知乎首发,

未经允许,不得转载#

hge引擎配置登录器教程_3Blue1Brown 动画制作教程(1)--制作第一个自己的动画相关推荐

  1. hge引擎配置登录器教程_HGEM2连击引擎20160724版加登陆器配置器

    马上注册,了解更多传奇资讯和传奇服务端下载,让你轻松玩转积木GM论坛. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x [160724]更新:登陆器.M2Server.DBServer.Gam ...

  2. hge引擎配置登录器教程_Hge引擎程序+登录器配置器+配套工具+全套入门教程

    关于HGE引擎版本优化的相关建议 很多人经常说:我和别人是一样的版本,为什么我的游戏卡,他的游戏不卡,是不是你们引擎不行?其实道理很简单.抛开服务器质量的缘故,以及引擎自身的不足,版本导致的游戏卡占了 ...

  3. 传奇登录器自动获取服务器,gom引擎配置登录器补丁读取规则的说明

    gom引擎配置登录器补丁读取规则的说明 补丁读取规则 功能:补丁读取规则 格式:Resources目录 说明:以读取Prguse.wil为例, 先读取Resources\Data\Prguse.pak ...

  4. 奇迹控制器证实配置登录器详解

    奇迹控制器证实配置登录器详解 奇迹控制器证实配置登录器详解 程序名称:MuDataService.exe游戏控制平台奇迹 程序功能: 一:启动项目 1.可自定义添加更改需启动的奇迹各项程序,实现一键启 ...

  5. GOM 登录器源码及编译教程

    常见登录器引擎如下 BLUE/LEGEDN引擎      一般应用于1.70 1.76 复古 80英雄合击 85英雄合击版本 MirXM2引擎          一般应用于1.70 1.76 复古 8 ...

  6. gom引擎登录器_GOM传奇引擎微端配置详细架设语音教程

    今天分享的教程:GOM引擎微端配置详细语音教程 什么是微端? 就是玩家不需要下载补丁文件,就可以进入游戏并显示游戏界面. 玩家玩到那里,补丁文件就自动更新到那里.当然支持微端的引擎不是很多. 比如LE ...

  7. 传奇战盟GOM引擎登录器配置教程

    战盟GOM引擎配置器教程,先到战盟官方网站下载登录器配置器,下载好后按下面说明使用.战盟GOM登录器教程大分类目录引导说明 一.解压配置器文件包后,打开KEY文件夹然后选择KEY 二.复制你选择好的 ...

  8. 传奇GOM引擎登录器配置教程

    登录器教程大分类目录引导说明 (01): 解压配置器文件包后,打开KEY文件夹然后选择KEY (02): 战盟官方提供5种不同功能KEY,请打开KEY文件夹里面有载图说明功能,选择你需要的功能KEY使 ...

  9. 传奇单机架设教程——GOM引擎登录器配置教程

    传奇单机架设教程--GOM引擎登录器配置教程 1.安装DBC,配置引擎 2.上传列表,配置登录器 3.安装客户端,解压补丁 4.登录游戏 架设传奇单机需要准备以下程序: 传奇服务端(版本Mirserv ...

最新文章

  1. Windows Phone 7 浏览器打开新窗口问题
  2. MySQL数据迁移到SQL Server
  3. Pytest自定义标记mark及特定运行方式
  4. 协议圣经 四 rtspclient
  5. scalar2color
  6. python supervisor_Supervisor捕获不到python的Print
  7. Tableau Online免费注册试用
  8. EditPlus 3注册 激活码
  9. SMT工艺培训一日谈
  10. spring框架对jdk版本要求
  11. JavaScript-修炼之路第二层
  12. CentOS8 KVM USB设备直通虚拟机并实现热插拨
  13. oracle怎么对账,Oracle EBS 如何月结、对账[Z]
  14. nginx多域名配置
  15. ProtoBuf 生成 Go 代码去掉 JSON tag omitempty
  16. 按键精灵+大漠插件简单数字验证码识别实践笔记
  17. 多人协作共享画板——多人画板的收尾工作
  18. python selenium 验证码识别_Pythonseleniumtesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考...
  19. 农产品电商APP开发可以实现哪些收益
  20. 如何在Microsoft Outlook中延迟传递电子邮件

热门文章

  1. stm32 软件怎么设置写保护_STM32F407 读保护,写保护,解锁过程【芯片已设置读保护,无法读取更多信息】...
  2. 下载安装和汉化Eclipse(详细)
  3. FFmpeg源代码简单分析 日志输出系统(av log 等)
  4. html刷新某块区域,javascript如何实现局部刷新?
  5. 山西专升本C语言编程题真题
  6. 学生申请Axure RP10免费使用详细教程
  7. 当心理学遇上设计:格式塔原理是如何服务于设计的?
  8. UNT413-S905L3机顶盒线刷记录
  9. PDF文件如何搜索目录(书签)
  10. RxJava从入门到精通:RxJava源码初步分析