Manimのサンプルコードを読み解く
はじめに
前回の記事で、数学のアニメーション作成ライブラリManim
をインストールして、
サンプル動画を生成してみた。
今回はそのサンプル動画を作ったスクリプトを読み解いていきたい。
サンプルスクリプトを読み解く
前回ダウンロードしたリポジトリのフォルダ内にある、example_scenes.py
がサンプルが
書かれているスクリプトである。
url : https://github.com/3b1b/manim/blob/master/example_scenes.py
コードを見てみると、最初にまず、モジュール読み込みをしている文がある。
Manim
では、manimlib.imports
のファイルで様々なモジュールを読み込んでいる。
これによって、名前空間を気にせず動画を作るスクリプトを書ける。
from manimlib.imports import *
次に、前回実行したコマンドにあったSquareToCircle
について
見てみる。
コードの中では、SquareToCircle
はクラスで定義されており、
Scene
を継承している。
関数として、contruct
を持っている。
このように動画を作る時には、Scene
クラスを継承したクラスを作って、
その中に関数construct(self)
を作って、その関数内に動画でのアニメーション
などを書いていくことになる。
class SquareToCircle(Scene): #Sceneクラスを継承したSquareToCircleクラスを作る def construct(self): circle = Circle() #円を作り、circle変数に割り当てる。シーン上には表示されない square = Square() #正方形を作りsquare変数に割り当てる。シーン上には表示されない # 先ほど作ったsquareに対して square.flip(RIGHT)#正方形を横軸(RIGHT)に対して、フリップ(一回転)させる。 square.rotate(-3 * TAU / 8) #正方形を3/8だけ逆時計回りに回転させる。TAUは2πのこと。 # 先ほど作ったcircleに対して circle.set_fill(PINK, opacity=0.5) # 円をPINK(ピンク)でopacity(透明度)を0.5に設定して塗りつぶし #アニメーションを再生する self.play(ShowCreation(square)) # squareをシーン上に生成する self.play(Transform(square, circle)) # squareをcircleに変形する self.play(FadeOut(square)) #フェードアウトさせる
def construct(self)
の中身を見ていく。
まず、circle
、square
変数にそれぞれ、Circle()
、Square()
で
円と正方形を作っている。
これらは、Mobject
からの派生クラスで、派生クラスを使って、
アニメーションに登場するオブジェクト(円、正方形などの図形など)を作っていく。
さらに、生成したオブジェクトに対して、回転したり、色を塗ったりする。
その後、self.play(Animation)
で引数にAnimation
クラスのサブクラスを渡す
ことで、順番にアニメーションが作られていく。サンプルでは、self.play()
が3つあることから、
3つのアニメーションが作られ、付け加えられていく。
このself.play(Animation)
は、継承元のScene
のScene.play(Animation)
で、
継承しているので、self
で使える。
使われているアニメーションは3つある。
1つ目ShowCreation()
はMobject
(オブジェクトを)をシーンに描画する。
2つ目Transform(mobject,target_mobject)
は、mobject
をtarget_mobject
へ変形させる。
3つ目FadeOut(mobject)
はフェードアウトさる。
この3つのアニメーションでサンプルは出来ている。
まとめ
サンプルコードの中身を読み解いた。
アニメーションは、Scene
クラスを継承さいたサブクラスで作り、
そのクラスにdef construct(self)
で、関数を作りその中に、
アニメーションを記述していく。
シーン内に現れるオブジェクトはMobject
を継承したクラスで、
アニメーションは、Animation
を継承している。
アニメーションは、Scene.play(Aniamation)
で、作ることができ、
継承しているので、self.play(Animation)
で使える。
このself.play(Animation)
を繋げていくことで、アニメーションを繋げて作っていく。
次は、オブジェクトやアニメーションの種類などを調べていきたい。