CG数学/物理 万有引力


どうも篠島です。重力関連の話題の続きで、万有引力について見てみたいと思います。重力と引力は違うぞという指摘があるかもしれませんが、自分は物理学者でも何でも無いので、CGアーティスト向けの簡略化した説明をします。要はパーティクルのAttract みたいな物だと思ってくれれば大丈夫です。

 

今回のシーンファイルです。
attract.zip

ニュートンがすべての物体はお互いに引き合っているという事を発見しました。要は2つのオブジェクトが引き合うフォースがあるという訳です。地球と地球上の物体を例にみてみましょう。これを式に表したのが下になります。このお互いが引き合う力は平等に地球にも物体にも加わります。

1

 

ここで、地球上のオブジェクトに加わるフォースと加速度について見てみます。まずフォースは万有引力の式から下のとおりです。そして運動方程式 F = ma から導いた式を使って加速度を求めてみます。

2

 

加速度を求めるにはフォース(F)を質量(m)で割って求めます。すると万有引力の方程式からうまい具合に地球上のオブジェクトの質量を消すことが出来ました。前回の記事で書いたとおり、重力加速度は物体の質量に関わらず一定であると書きましたが、この加速度を求める際に物体の質量がうまい具合に相殺されるのが理由だったのです

3

 

この万有引力の式を利用して、パーティクルのAttract 表現することが出来ます。それにこのフォースを逆向きにすれば Repel になりますね。

ためしに、この万有引力の式を使ったシミュレーションが下のようになります。太陽の周りを回る惑星・・・のつもりです。適当な初速度を追加し、万有引力によって速度を計算してシミュレーションしました。太陽に近づくと速度が早くなり、ケプラー運動になっていることが確認できます。

a

 

ちょっと待って、方程式の万有引力定数 G やら地球の質量とかわからないんだけど・・・という方、心配しないでください。万有引力定数 はもちろん地球や太陽の質量は不変、すなわち定数と考えることが出来ます。CGアーティストにとっては科学目的に正確に計算する必要はなく、見た目がそれっぽければ問題無いのです。すなわち、定数は自分で好きな値を入れて構わないという事です。同様にオブジェクトの質量も適当です。上のシミュレーションでは太陽が受けるフォースはほぼ無に等しいので、位置は固定で何の計算もしていません。

4

 

上のシミュレーションを表現するのに自分が使ったVEXコードです。ハイライトされている部分が万有引力の式です。万有引力定数 G が0.8 とかなり適当に入れてあるのが分かるかと思います。さらに距離の2乗の部分ですが、2つのオブジェクトが近づきすぎて 0 になるとフォースが巨大になってしまうので、clamp() 関数によって 0.1 以下にならないようにしています。このコードを見て分かる通り、値の設定はものすごく適当なのが分かってもらえたと思います。massも適当に設定してあるので興味ある人はシーンファイルを見てみてください。

5