アヒルのある日

株式会社AHIRUの社員ブログです。毎週更新!社員が自由に思いついたことを書きます。

ゲーム物理と慣性モーメント

こんにちは!するどいプランナーです!
今回は物理の「慣性モーメント(慣性テンソル)」についてのお話です。
といっても難しい計算の話ではなくて、概念の説明のみになります。
「質量はわかるけど、慣性モーメントはわからん!」といった方に読んでいただければと思います。

 

昔、物理挙動を組み込んだゲームを開発中に「この岩がガタガタするのを何とかしたいんだけど」と相談されたことがありました。その時調整に使用したパラメタが「慣性モーメント」なのですが、あまりパラメタの意味が理解されてないのかなと感じました。

ゲーム物理は「正確な動き」よりも「それらしい動き」のほうが重要になるかと思います。それらしい動きに近づけるためにはパラメタの意味を理解し、うまく調節する必要があります。

 

◆質量は「動きにくさ」

直線運動の運動方程式は聞いたことがあるかと思います。

f:id:surudoi_ahiru:20201230095241p:plain

ですね。

変形すると

f:id:surudoi_ahiru:20201230101543p:plain

となります。つまり力が一定とすると、

質量が大きくなるほど加速度が小さくなるので

質量は直線運動の「動きにくさ」を表していることになります。

 


◆慣性モーメントは「回転しにくさ」

回転運動にも運動方程式があります。

f:id:surudoi_ahiru:20201230095758p:plain

ですね。トルクは回す力、角加速度は回転の加速度と考えればOKです。

変形すると

f:id:surudoi_ahiru:20201230101517p:plain

となります。つまりトルクが一定とすると、

慣性モーメントが大きくなるほど角加速度が小さくなるので

慣性モーメントは回転運動の「回転しにくさ」を表していることになります。

 

質量はイメージできますが、慣性モーメントはちょっとイメージしにくいですよね。

f:id:surudoi_ahiru:20201230100502p:plain

式では上記となります。ρは密度です。

積分が出てきてややこしいですが式自体は無視して単位を見てみましょう。

「キログラム×メートル二乗」なので、「重くて遠いほど大きい=回転しにくい」値となります。

フィギアスケートの回転ジャンプを見ると、手をギュッと体に引っ付けているのがわかります。これは手=質量を近づけることで慣性モーメントを小さくしている=回転しやすくしているわけですね。

f:id:surudoi_ahiru:20201230101005p:plain



 

◆調整するパラメタの選択

岩のガタガタすを調整する場合、回転しにくくすればいいわけですから「慣性モーメントを大きくする」ことになります。

質量を大きくすると慣性モーメントも大きくなるのですが、そうすると「直線運動の動きにくさ」まで変わってしまいます。質量は変えずに慣性モーメントだけ調整できるのが現実世界と異なって楽な点ですね。

UnityだとRigidbody.inertiaTensorが慣性モーメントにあたります。X軸方向の回転しやすさ、Y軸方向の回転しやすさ、Z軸方向の回転しやすさがあるのでベクトル値ですね。

Rigidbody-inertiaTensor - Unity スクリプトリファレンス

 


◆まとめ

・パラメタの意味を理解して調整しよう

・質量が大きいと、動きにくい

・慣性モーメントが大きいと、回転しにくい

 

物理挙動に限らず数値調整を行う場合は、そのパラメタの意味を理解して変更するようにすれば、その後変更した時など長期的な対応が可能になります。パラメタの数が増えるほど「どのパラメタを調整するか」の選択が重要になるので、未知のものを未知のまま扱わないように心掛けましょう!

 

次回は「ダメージの計算式」について書こうかなと思います。


※余談

こちらの解説のほうがより専門的でわかりやすいかも・・・!

www.4gamer.net