This explanation is currently available in Japanese.
ひとことで
1 ステップ進む間に、途中の何か所かで「進むべき向き」を調べ、それを平均して進むことで、大きな時間刻みでも正確に軌道を追う方法です。今いる場所の向きだけでまっすぐ進むオイラー法は、曲がった道では必ず外へはみ出しますが、4 次のルンゲ・クッタ法(RK4)は 4 回調べるだけで誤差を劇的に小さくできます。
ゲームでの使いどころ
- 流れに乗る粒子:カールノイズやフローフィールドの中で煙や葉を流すとき、オイラー法では渦の中心から粒子が外へ逃げていきます。RK2 や RK4 なら渦の形に沿って回ります。
- 軌道の予測線:宇宙船の軌道、砲弾の弾道、ゴルフボールの落下点の予測など、何秒も先まで一気に計算したい場面で、少ないステップ数で正確な線を引けます。
- 流線の描画:ベクトル場の流線(線積分畳み込みなど)や、磁力線のような可視化。
- カメラや乗り物の経路:速度場から位置を求める計算全般。
しくみ
(場所ごとに進む向きと速さが決まっている)を、時間刻み で解くとします。
オイラー法:今の場所の傾きで進む。誤差は に比例(1 次)。
RK2(中点法):いったん半歩進んだ所の傾きを調べ、その傾きで 1 歩進む。誤差は に比例(2 次)。
RK4:始点、中点(2 回)、終点の 4 か所で傾きを調べ、中点を重く見て平均する。誤差は に比例(4 次)。
「4 次」とは、時間刻みを半分にすると誤差が になるという意味です。1 ステップの計算は 4 倍になりますが、同じ精度ならオイラー法よりずっと大きな刻みで済むので、多くの場合トータルで得をします。
速度と位置の両方を持つ運動(物体の運動方程式)では、状態を の組にし、 を「位置の変化 = 速度、速度の変化 = 加速度」として同じ式で解きます。
実装のポイント
- GPU の粒子なら RK2 で十分なことが多い:シェーダーで場を 2 回サンプリングするだけで、渦の中心から逃げる問題はほぼ解消します。
- 途中で状態を書き換えない: を求める途中の位置は「試しの位置」です。衝突判定や拘束は、1 ステップ終わってから行います。
- 剛体の物理エンジンには使わないことが多い:衝突や拘束があると、途中の評価点での力が意味を持たなくなり、4 次の精度が生かせません。ゲームの剛体は半陰的オイラー法が主流です。
つまずきやすい点
- RK4 でもエネルギーは保存しない:誤差は非常に小さいものの、何千周も回すとじわじわずれます(シンプレクティックではない)。長時間の軌道計算では、刻みを小さくするか、専用の方法を使います。
- 場が不連続だと効果がない:傾きが急に変わる場所(壁や格子のセルの境目)をまたぐと、高次の精度は失われます。
- コストの見積もり:「RK4 は重い」と思われがちですが、評価が軽い場なら、刻みを 4 倍にできれば同じコストです。精度と速度の両方で比べます。
デモで試すこと
- 本当の道筋は白い点線の円です。赤(オイラー法)は 1 周ごとに外へずれ、黄(RK2)は少しずつ、青緑(RK4)はほとんどずれません。左下に半径のずれが出ます。
- 「時間刻み h」を 0.8 まで上げると、オイラー法はすぐに飛び去り、RK2 もずれ始めますが、RK4 は円の上に残ります。0.05 まで下げると、3 つともほぼ重なります。
- 「RK4 が傾きを調べる場所」の矢印は、最後の 1 ステップで調べた 4 か所の向きです。始点・中点 2 回・終点で少しずつ向きが違うのが分かります。
- 「2 つの渦」に切り替えると、正解が円ではない複雑な道筋でも、RK4 が白い線に沿い続けることを確かめられます。