はじめに
Manimというオープンソースのアニメーションエンジンがあります。
大人気youtubeチャンネルの3BlueBrownの動画で使われていることで有名です。
以下はそのチャンネルです。
3Blue1Brown
My name is Grant Sanderson. Videos here cover a variety of topics in math, or adjacent fields like physics and CS, all w
というのもこのチャンネルの運営者の方によって作成されたオープンソースのエンジンになります。
僕もこの3BlueBrownの動画の虜になった一人なので、自分でも動画を作ってみたいと思いました。
今回はインストールをしてみて、試しに動画を作成した記録です。
インストール
まずはインストールから。
以下のサイトを参考にさせていただきました。
manimの環境構築と使用方法|Meta!Perceptio
pythonがwindowsにインストールされている状態を前提としています。
まず、powershellでmanimをインストールします。
> pip install manim
以下のmanimのpathを環境変数に設定するようなのですが、僕の環境では設定しなくても動きました。。(<ユーザー名>のところは自分の環境に合わせて変更してください)
C:\Users\<ユーザー名>\AppData\Local\Programs\Python\\Lib\site-packages\manim
ためしに実行
manimを試してみたいと思います。
from manim import *
class PointMovingOnShapes(Scene):
def construct(self):
# 地球(中央)
earth = Circle(radius=1, color=BLUE).set_fill(BLUE_E, opacity=1)
earth_label = Text("Earth", font_size=16).next_to(earth, DOWN)
self.add(earth, earth_label)
moon = Dot(color=GRAY).move_to(RIGHT * 2.5)
moon_label = Text("Moon", font_size=16).next_to(moon, UP)
self.add(moon, moon_label)
# 月だけを回転させるアップデーター
def update_moon(mob, dt):
mob.rotate(dt * PI, about_point=ORIGIN)
moon.add_updater(update_moon)
# ラベルの位置は常に月に追従するが、ラベル自体は回転しない
def update_label(label):
label.next_to(moon, UP)
moon_label.add_updater(update_label)
self.wait(4)
# 最後にアップデーターを止める(必要なら)
moon.remove_updater(update_moon)
moon_label.remove_updater(update_label)
実行は
manim <ファイル名> <クラス名>
のように実行するので、以下のように実行します。
> manim .\orbit.py PointMovingOnShapes
動画は実行したファイルから見て
media\videos\<ファイル名>\1080p60
配下に保存されます。
ちなみに「-i」を付けて、
> manim .\orbit.py PointMovingOnShapes -i
だとgifで保存できます。
では、できた動画を見てみましょう。
以下のようなファイルが出力されていました。
月が地球の周りを回っていますね!
最後に
manimで地球の周囲を回る月を表現することができました。