【要約】ファミコン画質のPythonで、一般相対論をリアルタイムに解く [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
著者は、Python環境で一般相対論の光線追跡をリアルタイムに行う際の計算負荷に直面した。従来の数値積分手法では、CPUのみの環境では処理が追いつかない。
- ・毎フレームの測地線積分に伴う膨大な計算コスト。
- ・降着円盤との複雑な交差判定による処理の重さ。
- ・GPUを使用できない環境での実行限界。
// Approach
著者は、時空の球対称性を利用して、計算を「実行時の積分」から「起動時の参照」へと転換した。数学的な性質を利用して、計算負荷を劇的に低減させている。
- ・RK4を用いた1024本の光子軌道テーブルの事前生成。
- ・NumPyによる軌道計算のベクトル化演算。
- ・軌道面と円盤面の交線に基づく、方位角の離散的な列挙による交差判定。
- ・ドップラービーミングや重力赤方偏移の近似的な輝度計算。
// Result
本手法により、極めて制約の強い環境下でのリアルタイム描画に成功した。物理的な説得力を保ちつつ、高いパフォーマンスを実現している。
- ・240×150ピクセル、16色という低解像度での動作。
- ・GPUを使用せず、NumPyのみで平均3.7ms/フレームを達成。
- ・ブラックホールの多重像、シャドウ、星のレンズ歪みを再現。
- ・今後は回転するKerrブラックホールへの拡張を計画している。
Senior Engineer Insight
> 計算量の多い物理演算を、数学的特性を利用して「参照」へ変換する設計は極めて合理的だ。これはリアルタイム性が求められる現場において、非常に有効な戦略である。ただし、事前計算テーブルのメモリ消費には注意が必要だ。パラメータが増大すると、メモリ使用量も指数関数的に増大する。スケーラビリティとメモリ効率のトレードオフを常に考慮すべきである。