各素材の比重の計測 [スマブラSP ステージ作り]

初記事なので書きやすいものを書いてみます。本内容は2年前くらいに取り組んだことについてです。

スマブラには「ステージ作り」というモードがあり、ファイターの戦うステージの地形を自由に造形したりギミックを配置したりできます。このモードに興味をもつスマブラプレイヤーは少ないと思いますが、以外にも面白い仕様・テクニックが多くあり奥が深いです。いつか個別に紹介できればと思います。

地形を描く際は15種類から素材を選ぶことができます。今回は各素材の比重を調べたいと思います。 ステージ作りで描いた地形は基本的には空間に固定される、または設定したレールの軌道に従って移動しますが、「落ちる」オプションをONにすることで自由落下します。「落ちる」物体は重力加速度で加速したりバウンドしたりと物理エンジンっぽい挙動をします。 そしてどうやら、素材15種類やギミックパーツにはそれぞれ異なる物性(質量密度・摩擦・弾性など)が備わっているようなのです。 これらの物性は「落ちる」地形と他の地形との間でのみ適用されるものであり、ファイターの運動には何も影響しません1。ファイターからすれば氷と溶岩以外は見た目が違うだけです。 「落ちる」をONにしなければ意味のない物性がわざわざ各素材に設定されているというのはつまり、「素材の特性を活かしたステージ作りをしろ」という公式からのメッセージに違いありません。

素材15種類

比重の計測

ステージ作りの世界でそれっぽい力学の法則がシミュレートされていると仮定して、中学物理の計算で比重を求めます。 ほんとはゲーム解析で内部数値を見れば終わる話なのですが、そのスキルは有していないのでちまちまと実験して調べてみます。

計測方法

2物体を衝突させ、衝突後の速度から比重を計算します。


2物体のうち右の物体を「ユニット」と呼ぶこととします。ユニットは以下の3つの要素で構成されます。

  • 起爆ブロック:たぶん摩擦がゼロ。(氷も摩擦が極めて小さいがゼロではない。)
  • はねゴム:たぶん反発係数1。
  • スプリング:回転しない性質を有する。他の物体とグループ化したときグループ全体が回転しなくなり、運動が安定する。


左の物体は計測対象の素材の塊+ユニットです。塊の体積は毎計測で同じにします。 2つの物体の衝突は、摩擦のない完全弾性衝突であると考えられます。

計測対象の質量を m_1、ユニットの質量を m_2、2物体の衝突前の速度を v_1(=0) v_2、衝突後の速度を v_1^{'} v_2^{'}、衝突時の地点から端までの距離を左右同じで lとし、 m_1を求めます。速度は左向きを正とします。


たぶん完全弾性衝突なので

 \begin{aligned}
0 - v_2 &= v_2^{'} - v_1^{'} \\
\Leftrightarrow \; v_2 &= v_1^{'} - v_2^{'}
\end{aligned} \tag{1}


たぶん運動量保存則が成立するので

 \begin{aligned}
(m_1 + m_2) \cdot 0 + m_2 v_2 &= (m_1 + m_2) v_1^{'} + m_2 v_2{'} \\
\Leftrightarrow \; m_1 + m_2  &= m_2 \left( \frac{v_2 - v_2^{'}}{v_1^{'}} \right)
\end{aligned}


上式に (1)を代入

 \begin{aligned}
m_1 + m_2  &= m_2 \left( \frac{(v_1^{'} - v_2^{'}) - v_2^{'}}{v_1^{'}} \right) \\
\Leftrightarrow \; m_1 + m_2  &= m_2 \left( 1 - \frac{2 v_2^{'}}{v_1^{'}} \right) \\
\Leftrightarrow \; m_1 &= - 2 m_2 \frac{v_2^{'}}{v_1^{'}}
\end{aligned}


衝突後に右の物体が右端に到達するまでの時間を t_1左の物体が左端に到達するまでの時間を t_2として v_1^{'} v_2^{'}を書き換えます。(今回の実験では右の物体は衝突直後に左へ進むことはありません。)

 \begin{aligned}
m_1 &= - 2 m_2 \frac{\frac{-l}{t_2}}{\frac{l}{t_1}} \\
\Leftrightarrow \; \frac{m_1}{m_2} &= 2 \frac{t_1}{t_2}
\end{aligned}


各素材について t_1 t_2を測り m_1 / m_2の値を算出すれば、 m_2の値は全実験で不変なので素材間の m_1の比がわかります。

計測結果

実験では、動画をとってコマ送りし、衝突から端に到達するまでのフレーム数を t_1 t_2としました。 15本の動画をまとめたのが以下です。


計測結果が以下です。

t1(F) t2(F) m1/m2 最も重い素材を
基準とした比重
くさ 569 1556 0.731362468 0.1002979
つち 873 798 2.187969925 0.30005476
すな 1024 702 2.917378917 0.400084764
木材 1936 531 7.291902072 1
1936 532 7.278195489 0.998120301
大理石 1936 531 7.291902072 1
ゴム 1025 702 2.92022792 0.400475471
デニム 569 1560 0.729487179 0.100040726
カーペット 568 1559 0.728672226 0.099928965
和紙 568 1559 0.728672226 0.099928965
毛糸 568 1552 0.731958763 0.100379675
スポンジ 568 1553 0.731487444 0.100315039
はねゴム 872 798 2.185463659 0.299711054
872 798 2.185463659 0.299711054
溶岩 1177 646 3.643962848 0.499727343


比重の計算結果が何となくきれいな値に見えるので、実験の方針は間違っていなかったと思いたいです。

重力加速度の計測

「ステージ作り」の世界では素材ごとに落下速度が異なります。現実世界でも空気抵抗の影響で重いものが早く落下しますが、ステージ作りに空気抵抗はありません。素材ごとに異なる重力加速度が適用されていると予想されます。 この仕様のため、比重を求める際には天秤のような機構を用いることができませんでした。

ついでなので素材ごとの重力加速度の比を調べてみます。


落下距離を l、落下時間を t、重力加速度を gとすると以下の式が成り立ちます。

 \begin{aligned}
\frac{1}{2} g t^{2} &= l \\
\Leftrightarrow \; \frac{g}{l} &= \frac{2}{t^{2}}
\end{aligned}


実験では、落下させて画面から消失するまでのフレーム数を t、落下距離を lとし、 tを測定します。そして g/lを算出し、素材間の gの比を求めます。

t(F) g/l 最大gを基準
としたg比
くさ 117 0.000146103 0.701585214
つち 103 0.000188519 0.905269111
すな 109 0.000168336 0.808349466
木材 98 0.000208247 1
98 0.000208247 1
大理石 98 0.000208247 1
ゴム 98 0.000208247 1
デニム 109 0.000168336 0.808349466
カーペット 103 0.000188519 0.905269111
和紙 179 0.000006242 0.299740957
毛糸 155 0.000008324 0.39975026
スポンジ 126 0.000125976 0.604938272
はねゴム 98 0.000208247 1
98 0.000208247 1
溶岩 109 0.000168336 0.808349466


値がきれいかは微妙ですが、比重の計測より精度の悪い計測方法だと思うのでこんなものかもしれません。

計測結果まとめ

まとめたのが以下のグラフです。


青色は比重を表し、大きいほど他の物体とぶつかりあったとき自分がはじかれにくいです。 オレンジ色は素材に適用される重力加速度の比を表し、大きいほど速く落下します。 灰色は重量(=質量×重力加速度)の比を表し、大きいほど天秤に乗せたとき自分側へ傾かせます。

比重と重力加速度比の値が0.1間隔の目盛線上にきれいに乗っかっているように見えます。 質量密度や重力加速度は内部数値では10段階で設定されているのかもしれません。

ゴムと溶岩のデータが興味深いです。衝突し合った場合はゴム側がはじかれるみたいですが、2素材を天秤に乗せたときはほぼ釣り合うことが予想されます。


確かめてみます。

衝突させてみるとやはりゴムの方が少し速く飛んでいきます。


天秤に乗せてみるとほぼ釣り合っており予想と合致します。


(上の動画が静止画みたいで釣り合っているかわかりづらいので、氷とすなを載せた場合を示します。)


おわり。

いろいろ仮定した上で調べてきましたが合っているか不安です。 この物理エンジンが実際どういう仕様なのかは知らないのでどこかに勘違いがあるかもしれません。





  1. ファイターにとって「氷」は滑りやすい素材ですが他の素材では滑りやすさはすべて同じです。一方で地形どうしの滑りやすさは素材ごとに様々です。地形・地形間の滑りやすさとファイター・地形間の滑りやすさは内部数値的に無関係であると考えます。本文の「摩擦」は地形・地形間の摩擦を指しています。