【Blender 5.2】コリジョンを付けてもオブジェクトがすり抜けるときの直し方|原因4つを実際に再現

Blender 5.2でコリジョンを付けてもすり抜けるときの直し方のアイキャッチ。床で跳ねる球のレンダー画像 Blender
スポンサーリンク

※この記事は、当ブログが2020年に書いた「【Blender 2.8】コリジョン付けてもオブジェクトがすり抜けちゃう」を、2026年11月の画面・バージョンに合わせて新しく書き直したものです。元の記事も、そのまま残しています。

床に「コリジョン」を付けたのに、落としたオブジェクトが床をすり抜けて下へ落ちていく。Blenderで物理演算を始めたころに、ほぼ誰もが一度は通る道です。

当時のつまずきに加えて、最新の Blender 5.2.2 LTS で「すり抜ける」状態をわざと作り、どこを直せば止まるのかを実際に確かめました。

結論:まず「何が落ちているか」で直す場所が変わる

  • 落ちる物がリジッドボディなら、床もリジッドボディ(パッシブ)にする。「コリジョン」は効かない
  • 小さい物が速く落ちて抜けるなら、シーンプロパティの「サブステップ/フレーム」を上げるか、床に厚みを付ける
  • パーティクルの球が床に半分沈むなら、「衝突にサイズを反映」をオンにする
  • 再生では跳ねるのにレンダーで抜けるなら、シミュレーションをベイクしてからレンダーする
Blenderでコリジョンを付けてもすり抜ける4つの原因(床がコリジョンだけ、速すぎる・床が薄い、パーティクルが半分めり込む、ベイクしていない)と直し方をまとめた図

この記事で使ったのは Blender 5.2.2 LTS(Windows版・2026年11月時点)です。メニューの名前は日本語UIの表示に合わせています。

当ブログで最初に起きたこと(Blender 2.8)

最初にこの問題にぶつかったのは、Blender 2.8 を使っていたときです。作りたかったのは、床の上にある平面からパーティクルを降らせて、床でバウンドさせるアニメーション。パーティクルの見た目には、UV球をオブジェクトとして指定していました。

床にコリジョンを付けるだけ、のはずでした。実際、画面で再生(プレビュー)すると、球はちゃんと床で跳ね返っています。ところが、そのままアニメーションとしてレンダリングすると、球が床をすり抜けてしまいました。

原因は、パーティクルをベイクしていなかったこと。ベイクしてからレンダリングし直すと、プレビューと同じように床で跳ねる動画になりました。分かってしまえば単純ですが、ここで無駄に時間を使ってしまいました。

今回、Blender 5.2.2 で同じような場面(平面からUV球のパーティクルを30個降らせ、床にコリジョン)を作って試したところ、ベイクしないまま80フレーム目へいきなり飛んでも、球は床の上に止まっていました。今の版では起きにくくなっているようです。それでも、ベイクの習慣はつけておいて損はありません(理由は後半で説明します)。

そして、今の版で「すり抜ける」と言われるときによくある原因は、ほかに3つあります。順番に、実際に再現した結果と一緒に見ていきます。

原因1:落ちる物がリジッドボディなのに、床は「コリジョン」だけ

いちばん多いのがこれです。物理演算プロパティには「コリジョン」と「リジッドボディ」の2つがあり、名前からするとどちらも「ぶつかる」設定に見えます。しかし、この2つは別の仕組みです。

  • コリジョン:パーティクル・クロス(布)・ソフトボディが当たる相手になる設定(公式マニュアルによる)
  • リジッドボディ:固い物どうしがぶつかる計算。ぶつかる相手もリジッドボディでないと当たらない

Blender 5.2.2 で、箱(リジッドボディ)を高さ3mから落として比べました。床に「コリジョン」だけを付けた場合、箱は床を素通りして、60フレーム目には床から25m以上下まで落ちていました。床にも「リジッドボディ」を付けてタイプを「パッシブ」にすると、箱は床の上で止まりました。

Blender 5.2.2で箱(リジッドボディ)を落とした比較アニメーション。床がコリジョンだけだと箱が床をすり抜け、床をリジッドボディのパッシブにすると床の上で止まる

直し方

  1. 床を選び、プロパティエディターの「物理演算プロパティ」を開く
  2. 「リジッドボディ」を押して追加する
  3. タイプを「アクティブ」から「パッシブ」に変える(パッシブ=動かない、当たられる側)

リジッドボディの基本的な付け方は【Blender 2.8】リジッドボディ 基礎の基礎にも書いています。逆に、落ちるのがパーティクルや布なら、床は「コリジョン」のままで正解です。

原因2:速すぎる・床が薄い(リジッドボディ)

床をきちんとリジッドボディにしても、小さい物が速く動くと抜けることがあります。物理演算は1フレームを何回かに分けて計算しますが、その1回のあいだに物体が床の厚みより長い距離を進むと、「床の手前」から「床の向こう」へ一気に移ってしまい、ぶつかったと判定されません。

Blender 5.2.2 で、直径10cmの球を高さ50mから落として試しました(床に当たるときの速さは、計算上およそ秒速30m)。床と設定を変えた結果は次のとおりです。

直径10cmの球を高さ50mから落とした実測結果。サブステップ10では平面も厚さ2cmの板もすり抜け、サブステップ60か厚さ30cmの板なら止まった
床サブステップ/フレーム結果
平面(コリジョン形状:メッシュ)10(初期値)すり抜けた
厚さ2cmの板(ボックス)10(初期値)すり抜けた
平面(メッシュ)60止まった
厚さ2cmの板(ボックス)60止まった
厚さ30cmの板(ボックス)10(初期値)止まった

同じ球を高さ5mから落としたときは、どの組み合わせでも床で止まりました。抜けるのは「小さい」「速い」「床が薄い」が重なったときです。

直し方1:サブステップ/フレームを上げる

「シーンプロパティ」→「リジッドボディワールド」→「設定」にある「サブステップ/フレーム」が、1フレームを何回に分けて計算するかの数です。初期値は10。今回は60にすると止まりました。公式マニュアルでも「値を大きくすると正確になるが遅くなる」と説明されています。重いシーンでは、20、30、60と少しずつ上げて、抜けなくなったところで止めるのがおすすめです。

すぐ下の「ソルバー反復数」は、積み重ねた物やコンストレイントを安定させる設定で、すり抜けにはあまり関係しません。

直し方2:床に厚みを付ける

床をただの平面ではなく、厚みのある箱にする方法です。今回の試しでは、厚さ30cmの板にしただけで、サブステップは初期値の10のままでも止まりました。見た目は薄い床にしたいなら、見える床とは別に、厚い箱を当たり判定用に置いて非表示にする手もあります。

なお、「コリジョン」の「形状」(シェイプ)は、公式マニュアルによると、メッシュは「凹んだ形も扱えるが、遅く不安定」、ボックスなどの単純な形は「性能が一番よい」とされています。平らな床ならボックスで十分です。

原因3:パーティクルが床に半分めり込む

パーティクルで球を降らせたときの「すり抜け」は、実は抜けていないこともあります。パーティクルの当たり判定は、初期設定では大きさのない点として計算されます。球を表示していても、ぶつかるのは球の中心だけ。そのため、球は床に半分沈んだ位置で止まり、見た目には「めり込んだ」「すり抜けかけている」ように見えます。

Blender 5.2.2でパーティクルの球を床に落とした比較。衝突にサイズを反映がオフだと球が床に半分沈み、オンだと床の上に乗る

直すには、「パーティクルプロパティ」→「物理演算」→「衝突」にある「衝突にサイズを反映」をオンにします。5.2.2 で試すと、オフでは球の中心が床の高さ(0.001m)で止まり、オンでは球の半径ぶん(0.2m)浮いた、ちょうど床に乗る位置で止まりました。

注意:当たる大きさは「サイズ」の値で決まる

試していて気づいた落とし穴があります。「衝突にサイズを反映」で使われるのは、パーティクルの「サイズ」の値そのものです。インスタンスにした球の大きさは関係ありません。

たとえば半径0.2mの球を、サイズ1.0で表示すると、当たり判定は半径1mの球として計算されます。実際にこの組み合わせで試すと、球は床から1m浮いたところで止まってしまいました。見た目と当たり判定をそろえるには、インスタンスにする球を半径1m(UV球を追加したときの初期の大きさ)で作り、パーティクルの「サイズ」に表示したい半径(0.2など)を入れます。

速いパーティクルが抜けるとき

パーティクルが速すぎて抜ける場合は、「物理演算」→「積分方法」の「サブフレーム」を上げます(初期値0)。公式マニュアルでは、速く動くパーティクルほど大きな値を使うよう説明されています。床側の「コリジョン」にある「外側の厚さ」(初期値0.02m)は、床の表面の外側にある当たりの範囲の幅です。ここを少し大きくする方法もあります。泡のように細かいパーティクルを使う例は【Blender 5.2】パーティクルで泡を噴射させる方法で取り上げています。

原因4:ベイクしていない

最初に書いた Blender 2.8 での失敗がこれです。物理演算は、再生しながら1フレームずつ計算した結果をキャッシュ(一時的な記録)に貯めています。このキャッシュは、設定を変えたり、途中のフレームへ飛んだりすると作り直されます。

ベイクは、その計算結果を最後まで作って固定する操作です。ベイクしておけば、画面で再生したときとレンダリングしたときで動きが食い違うことがなくなります。公式マニュアルによると、ベイクはオブジェクトモードで行い、ファイルを保存していないとキャッシュはメモリーに置かれるので、先にファイルを保存しておくのが安全です。

Blender 5.2の日本語UIで、床のリジッドボディのタイプ・シェイプ、リジッドボディワールドのサブステップ/フレームとベイク、パーティクルのサブフレーム・衝突にサイズを反映・ベイクの場所を示した図
  • パーティクル:エミッター(降らせる元の平面)を選び、「パーティクルプロパティ」→「キャッシュ」→「ベイク」
  • リジッドボディ:「シーンプロパティ」→「リジッドボディワールド」→「キャッシュ」→「ベイク」
  • まとめて:キャッシュの下にある「すべての物理演算をベイク」で、シーン内の物理演算をまとめてベイクできる

ベイクしたあとで設定を変えたいときは、同じ場所の「ベイクを削除」を押してから変更し、もう一度ベイクします。ベイクしたままだと、設定を変えても動きが変わりません。古い版でのベイクのボタンの場所は【Blender 2.8】リジッドボディをベイクするに残しています。

また、シミュレーションのキャッシュの「終了」は初期値250です。シーンを250フレームより長くしたのに、途中から物が止まってしまう場合は、こちらの終了フレームも合わせて延ばしてください。

それでも抜けるときに確かめること

  • スケールが極端:CADから読み込んだ物などは、大きさが数百倍になっていることがある。物理演算は実際の大きさ(m)で計算されるので、読み込むときの大きさを見直す(stlで読み込んだ物の物理演算がおかしい)
  • 布(クロス)が抜ける:クロスの物理演算の「コリジョン」にある「品質」(初期値2)や「距離」(初期値0.015m)を上げる。公式マニュアルでも、速く動くと突き抜けやすいとされている
  • 「コリジョン」の目のアイコンがオフ:物理演算プロパティのコリジョンのボタン横で、有効・無効を切り替えられる
  • 流体(液体)が器を抜ける:これは別の設定で、障害物側の「Surface Thickness」を上げる(流体のシミュレーションで障害物をすり抜ける)

まとめ

  • リジッドボディはリジッドボディどうしでしかぶつからない。床は「リジッドボディ」→タイプ「パッシブ」に。床が「コリジョン」だけだと、箱は25m以上下まで落ちた
  • 小さく速い物が抜けるなら、「サブステップ/フレーム」を10から上げる。今回は60で止まった。床に厚み(30cm)を付けても止まった
  • パーティクルの球が床に半分沈むのは、点として当たっているから。「衝突にサイズを反映」をオン。当たる大きさは「サイズ」の値で決まるので、インスタンスの球は半径1mで作る
  • 再生とレンダーで動きが違うなら、ベイクしてからレンダーする。キャッシュの「終了」は初期値250

※この記事の数値は、Blender 5.2.2 LTS(Windows版)を当ブログのPCで実際に動かして確かめたものです。物理演算の結果は、物の大きさや速さ、設定の組み合わせで変わります。

コメント