物理の時間発展・拘束

摩擦・反発係数

Friction / Restitution

接触時の滑りや跳ね返りを決める。

10 / 10

インタラクティブデモ

デモを準備しています…

摩擦・反発係数

ドラッグで視点を回転、Ctrl(⌘)+ スクロールでズーム。タッチ操作は 2 本指です。

ひとことで

物体同士が触れたときに、どれだけ滑りにくいか(摩擦係数)と、どれだけ跳ね返るか(反発係数)を決める 2 つの値です。氷の床でつるつる滑る、ゴムの靴で急な坂に立てる、スーパーボールが高く跳ねる、粘土がべちゃっと止まる、といった手ざわりの違いは、ほとんどこの 2 つの数値で作られます。

ゲームでの使いどころ

  • 床の種類:氷、泥、砂、金属など、足場ごとに摩擦を変えると、同じ操作でも滑り方が変わり、ステージの特徴になります。
  • 物の性質:木箱、ゴムボール、鉄球の転がり方・止まり方の違い。
  • 乗り物:タイヤの摩擦(グリップ)は、ドリフトやスリップの表現の中心です。レースゲームではさらに複雑なタイヤモデルを使います。
  • ゲームの手ざわり:ピンボールの跳ね方、ビリヤードの球の反射、アクションゲームで壁に当たったときの跳ね返り。

しくみ

摩擦(クーロン摩擦)

床に置いた物を押すと、ある大きさまでは動かず(静止摩擦)、それを超えると滑り出し、滑っている間は一定の力でブレーキがかかります(動摩擦)。

∣F静止∣≤μsN,∣F動∣=μkN|\mathbf{F}_{\text{静止}}| \le \mu_s N, \qquad |\mathbf{F}_{\text{動}}| = \mu_k N

NN は面を押し付ける力(垂直抗力)、μs\mu_s は静止摩擦係数、μk\mu_k は動摩擦係数で、ふつう μk<μs\mu_k < \mu_s です(動き出すと少し軽くなる)。

坂道に置いた物は、坂を下る力 mgsin⁡θmg\sin\theta が静止摩擦の上限 μsmgcos⁡θ\mu_s mg\cos\theta を超えたとき、つまり

tan⁡θ>μs\tan\theta > \mu_s

のときに滑り出します。摩擦係数 0.5 の物は、約 27° より急な坂で滑ります。

反発係数

ぶつかる前後の、面に垂直な方向の速さの比です。

v後=−e v前v_{\text{後}} = -e\,v_{\text{前}}

e=1e = 1 なら速さを失わずに跳ね返り、e=0e = 0 なら跳ね返らずにその場で止まります。跳ね上がる高さは速さの 2 乗に比例するので、跳ね返りの高さは e2e^2 倍になります(e=0.7e = 0.7 なら約半分の高さ)。

2 つの物体の係数を組み合わせる

摩擦や反発は本来「2 つの物の組み合わせ」で決まる値ですが、ゲームでは物ごとに値を持たせ、ぶつかったときに組み合わせます。Unity の PhysicMaterial では「平均・最小・最大・掛け算」から選べ、PhysX や Box2D でも同様の設定があります(Box2D の摩擦は既定で幾何平均 μ1μ2\sqrt{\mu_1\mu_2}、反発は大きい方)。

実装のポイント

  • 小さな跳ね返りは止める:床の上で反発係数どおりに跳ね続けると、細かく震えて止まりません。速さがしきい値以下なら反発を 0 にします(スリープ)。
  • 静止摩擦を正しく扱う:動摩擦だけで作ると、坂の上の物が少しずつずり落ちます。物理エンジンは、接線方向の速度を 0 にしようとする拘束として摩擦を解き、その大きさを μN\mu N で制限する形で静止摩擦を実現しています。
  • キャラクターは別扱いが多い:プレイヤーキャラクターを物理エンジンの摩擦に任せると、坂で滑ったり止まり方が操作しづらくなります。キャラクターコントローラーでは、摩擦を使わず加速・減速を直接調整するのが一般的です。

つまずきやすい点

  • 摩擦係数は 1 を超えてもよい:ゴムとアスファルトのように、1 を超える組み合わせもあります(45° より急な坂でも止まれる)。
  • 反発係数 1 でも少しずつ減る・増える:時間刻みや衝突の検出のずれで、完全な弾性衝突でもエネルギーが微妙に変わります。ピンボールのように正確さが必要な場面では、跳ね返りの速さを明示的に設定します。
  • 組み合わせ方の違いに注意:「掛け算」は 2 つとも小さいとほぼ 0 になり、「平均」は氷とゴムの組み合わせが中途半端な値になります。ゲームの意図に合わせて選びます。

デモで試すこと

  1. 左の坂では、氷の箱はすぐに滑り出し、木の箱は坂がある角度を超えると滑り、ゴムの箱はかなり急でも止まったままです。「坂の角度」を少しずつ上げて、それぞれが滑り出す角度を確かめてください(左下に木の目安が出ます)。
  2. 箱の青い矢印は坂を下る重力の成分、赤い矢印は摩擦力です。止まっている間は、赤が青と同じ大きさで打ち消しています(静止摩擦)。
  3. 右のボールは、粘土・テニスボール・スーパーボールです。横の短い線が直前に跳ね上がった高さです。「床の反発係数」を下げると、どのボールも跳ねにくくなります。
  4. 「係数の組み合わせ方」を「小さい方」にすると、スーパーボールでも床の反発係数までしか跳ねなくなり、「大きい方」にすると、粘土まで跳ねるようになります。

参考資料

Gaffer On Games — Integration Basics ↗

分野全体の資料で、この項目を直接扱っているとは限りません。