search
LoginSignup
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

Githubおもしろリポジトリ① ~面白そうなグラフィック系のリポジトリを発見したので試してみた~

経緯

前にgithubのトレンドリポジトリから情報を定期通知するという記事を書いたのですが、それを通じて、面白そうなリポジトリを発見したので共有します。今回はtaichiを紹介します。これシリーズ化しようかな(笑)。
追記: シリーズ化しました。目次はこちらです。

taichiとは

Taichi (太极) is a programming language designed for high-performance computer graphics.
リポジトリの最初に上のように書かれているのですが、taichiがプログラミング言語なのかはわかりません。taichiはpythonで書かれたコンピュータグラフィックスのためのライブラリだと、勝手に解釈してます(笑)。違ったら教えてください。
追記: ドキュメントを見ると、taichiはdomain-specific language (DSL)だと書いてありました。DSLについてはこちらをどうぞ。

試してみた

導入はpipでtaichi入れるだけです。自分はcudaを使ったgpuモードでやってみました。cpuモードもあるみたいですが、試してはいません。

pip install taichi
git clone https://github.com/taichi-dev/taichi.git

taichiリポジトリの中にexmaplesフォルダがあり、その中にたくさん使用例があります。今回はfractal.pyのコードを共有します。数学詳しい友人に聞くとフラクタルという数学の概念?を使っているそうです。今回は試すだけので、深入りはしません(笑)。

fractal.py
import taichi as ti

ti.init(arch=ti.gpu)

n = 320
pixels = ti.field(dtype=float, shape=(n * 2, n))


@ti.func
def complex_sqr(z):
    return ti.Vector([z[0]**2 - z[1]**2, z[1] * z[0] * 2])


@ti.kernel
def paint(t: float):
    for i, j in pixels:  # Parallized over all pixels
        c = ti.Vector([-0.8, ti.cos(t) * 0.2])
        z = ti.Vector([i / n - 1, j / n - 0.5]) * 2
        iterations = 0
        while z.norm() < 20 and iterations < 50:
            z = complex_sqr(z) + c
            iterations += 1
        pixels[i, j] = 1 - iterations * 0.02


gui = ti.GUI("Julia Set", res=(n * 2, n))

for i in range(1000000):
    paint(i * 0.03)
    gui.set_image(pixels)
    gui.show()

これを実行するとこんな感じになります。
fractal.gif
なんかわかんないけど、すごいですね(笑)。

その他

他の使用例もいくつか載せておきます。

点と点が繋がって面白いやつ
mass_spring_game.gif

水の波紋みたいなやつ
waterwave.gif

煙を操れます
stable_fluid2.gif

まとめ

taichiすごく面白いけど、プログラムに使われてる数学とか物理の知識が自分に足りなさすぎる。勉強します(笑)。

間違いや質問、ご意見等ありましたらお気軽にコメントください。頑張って答えますので(笑)。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2
Help us understand the problem. What are the problem?