少し前に流行った「Ray Tracing in One Weekend」である。
Aperyの平岡さんもRust実装してたね。
https://raytracing.github.io/books/RayTracingInOneWeekend.html
Ray Tracing in One Weekendと日本語やPython,Rustなどと複数検索ワードを組み合わせてやれば大変沢山ヒットするので気になる人は調べて貰えばいい。
レイトレーシングとは光路を計算してリアルな画像を制作する手法で,記憶ある範囲だとターミネーター2など映画界で火がついた技術である。基本はそれほど難しくないので上記資料のように週末でプログラミングが終わる。(個人差大アリ)
思えばレイトレーシングは30年以上前に8bit機で24時間以上かけてやったのが最初である。あの頃やっとPCで「多色」が表示できるようになったのだ。
本件の場合は途中までは今時のPCでサクサク計算が終わる。後半に行かないと珈琲入れる時間すらかからない。最後の最後で解像度などを上げて一時間程度の大物となる。
途中の過程では色々な光路の計算を加えることで単純なものから高度なものへ徐々に複雑かつ計算負荷の大きなものになっていく。実際に手を動かしてやるとどの辺りで計算負荷が大きいか分かって面白い。
で,一番最後のやつが本当に一時間以上かかる。(実はコンパイラオプション入れ忘れて一晩かかったこともある)
上記のまま作るとシングルスレッドの単純なループなので今時のマルチコアCPUが有効に働かない。まぁ,何かと高速化した話もネットに沢山ある。
高速化の極北はCUDAである。そもそもGPGPUでもなくビデオカードなので本来の使い方に近い。そう言えばリアルタイムレイトレーシングするハードウェアだわ。
最終のところだけ読めば6コアのi7で90秒とある。これでも速い!!(既に単精度に落としたのかな)
GTX 1070で6.7秒。RTX 2080で4.7秒だそうな。
ベースが一時間なのでなにそれ!?って速度だけどリアルタイムから比べたら遅いか。
さらに調べてみるとGitHubにTaichi実装という面白いものがあった。
そもそもTaichiとはなのだが,Pythonで実装されたJITである。ちなみに中国語圏で「太極」と表記される。
このJITが凄いのが,マルチコアCPUだけでなくCUDA,OpenGL,Metal(Mac)に対応している。しかも,PyPIからさっくりインストールされる。(PyTorchが3GBくらいなのに対して22MB程度)
計算させてみたところ,6コアのi7で200秒くらい出た。(8750H)
GTX 1050Tiで20秒程度,RTX 2070で6秒台,RTX 3090で3秒台であった。
拍子抜けするほど驚愕の速度なので本記事書いてるわけである。
一晩かけて丁寧に計算した画像と全く同じものが3秒台で出てくるなんてね。
Taichi遊べそう。例外的なものを除きCUDA直叩き要らないようになるかもしれないね。
興味あれば遊んでみて下さい。
---
追記:
CUDA比較の6コアのi7って8700Kがあることに気づいた。8700Kなら全コアブーストで4.7GHzか。ノートPCと比較してはいけないね。
ノートPCのRTX 2060でも6秒台が出たのでRTX以降で相当使える技術になりそう。
---
追記2:
上記Taichi実装のやつは続編のBVHも実装してあり高速化に寄与している模様。単純比較してはいけないっぽい。