[UE4ぷちコン 映像編3rd]振り返り:Chaos Physics

ここは[UE4ぷちコン 映像編3rd]振り返りの子頁です。

概要

  • 映像Projectならまず挙動安定化設定をしよう

  • 破壊Fieldの使い方あれこれ

  • 結局は地道な積み重ね

参考資料

最近alwei先生によるUE5版での解説とサンプル配布行われた。興味を持ったはまずそちらで遊ぶことをオススメ。

その他の資料は、[第16回UE4ぷちコン]振り返り:Chaos Physicsを参照されたい。

物理挙動を安定化する設定

4.27Chaos(4.27.2)での設定である点に注意。UE5以降では設定名が違う場合があるかも。

Framerate固定化

映像Projectなら必須かも。EditorでPlayした際の物理挙動をSequencerからの映像出力時に近づける事ができる。再現性も非常に改善する。

Movie Scene CaptureあるいはMovie Render Queueで出力する際に指定するFramerateに揃えればOK。

これやっとかないと8時間かけたレンダリング後に物理挙動が思てたんと違うとかなる。なった。

Substepping有効化

シミュレーションの精度向上とField Systemの安定動作のために必要。

想定しているFramerateのdelta timeの半分を指定しておけばよいだろう(1frameで2step以上計算するように仕向ける)。

別に固定FPSだけで良さそうだが、自分の環境だと、毎frame適用しているTransient Fieldによる外力が無視される事があった。つまり8時間かけたレンダリング後に物理挙動が昨日見たんと違うとかなる。なった。

破壊用Field Actor

  • 公式サンプルだとStrike Fieldとか呼ばれるアレ

  • ちょっとした改造で使いやすくなるので紹介

  • 親ClassはField System Actor

  • Sphere

    • 破壊効果破範囲の可視化用

    • 半径50m(Basic ShapesカテゴリのSphere)

    • Collision PresetはNo Collision

    • Hidden in Game

  • Auto Activate変数でSpawn時にいきなり破壊するか選択できるように

    • SequencerからActivateを呼べば、任意の時間で破壊ができる

  • Activate関数もほぼサンプル通り

    • Linear Forceを付与する際、Actor正面向きかActor中心周状かをbool変数で選べるようにしている

  • 瞬間的な速度を付与したい場合に備え、Physics TypeをLinear Velocityにするのも良いかも

  • Geometry Collection以外の物理オブジェクトもField Systemで動かせる

    • ↑のシーンでは顔がでかくなる瞬間にダンボール群のSimulate PhysicsをTrueにしている

    • それと同時に、顔の位置に仕込んだ破壊ActorのActivateを呼んで箱を押している

    • 椅子に確実にヒットさせるために、1個だけSequencer制御の箱が混じっている

  • Repeater Event TrackでActivateを呼び続けながら破壊ActorのScaleを拡大していくとなんか圧倒的破壊空間の小宇宙になる

    • これをやる時、先述のSubstepping設定をしておかないと、継続的な加速度の適用が途切れるframeが出てくる

      • Game側のdelta timeを物理側が考慮する時、まるまる1frame待つみたいな挙動になっている??

        • 物理オブジェクトが完全停止するわけではなく、Transient Fieldの適用だけ止まるっぽくて謎

        • 繰り返すが4.27Chaosでの挙動なので、UE5では異なるかもしれない点に注意

External ForceとDamage Threshold

  • Geometry CollectionのDamage Thresholdと等しいExternal Forceを与えると破壊が発生する

  • Geometry Collection同士が衝突した際もDamageが生ずる

    • Damage Thresholdが低すぎると、小さな破片がぶつかるだけで破壊される

  • Damage Threshold=2.0の壁とExternal Force=1.0の力場で実験すると破壊は起きない

    • そこからExternal Force=2.0にすると、破壊Fieldの範囲に関係なくGeometry Collection全体が砕ける

    • 最初は破壊Field内だけで発生した破片が、接触していた未破壊の破片に触れ、Damage Thresholdが超低いのでそれも即破壊という連鎖が発生している模様

    • サンプルを参考に、そこそこ大きな値にしておいた方がよい

  • 例えばこの部分はDamage Thresholdの差を利用している

    • 左側の壁がGeometry Collectionで、グレイマンがぶっ刺さるところ

      • 小さい球が刺さった部分だけ砕くための破壊Actor

      • ガチガチの設定(Damage ThresholdとExternal Forceが1000000.0)

      • 小さい球と接していない場所に破壊は波及しない

    • ムカつく看板全体はDamage Threshold=1.0のよわよわ設定

      • 大きい球もExternal Force=1.0

      • 大きい球がグレイマンぶっ刺し用の壁を含んでいるが、破壊せずに済む

    • ちなみにDamage Threshold=1.0はやめといたほうがいいかも

      • 手前側でビーム撃つ人が地面に刺さる事故が起きるが、飛び散った地面の破片で看板が壊れることがあった

      • 破片の飛ぶ方向を制御して回避したが不確実ではある

地味な仕込み

Disable Field。映像Projectなら負荷を気にしなくていいし不要かと思いきや、これがないと床で回転し続けたりしちゃう。Threshold=100で設定した。

使用したオフィスのアセットは床モデルがめっちゃ薄いというか表面しか無いので、Blocking Volumeで破片やダンボールが埋まらないようにしている。

だが、積み上がったダンボールの下に仕込むの忘れてて実は何個か埋まってる(確認してみよう!)。審査員のみんなには内緒だ!

所感

Chaos道は長く険しい

  • 挙動安定化する設定したの実は締め切り4日前ぐらい

    • 👺✋💥

    • 一瞬だけforceかける分には問題ないので気が回らなかった

      • 広がる破壊で継続的にforceをかけてみて初めて気づいた

        • 焦った

          • 既に満身創痍だ(締切と体力的な意味で)

    • 設定に気づけたのは物理挙動を自作した経験のおかげかも

  • 結局、地道な仕込みの積み重ねという事もわかってきた

    • VFX制作の講演など参考に、効率よく仕込んでいけるようになりたい

  • 映像ProjectだとLevel-Setな破片を遠慮なく使えるのは良い!

    • けど展開が早すぎて別にコレBox判定でもよくね感もある

    • 最後の広がる破壊とか、Niagaraでもできそうじゃね?

      • 床がゆっくり破片になっていく様を見せる時以外は、Disolve系のテクニックでも行けそうではある

        • 逆にいえば、そういうテクが必要な所を計算力でゴリ押せるのがChaosという事でもあるか

      • まぁリファレンス自体は必要

      • 必要に応じてBoxにしたりLevel-Setにしたり、UE内で完結するのは本当に有難い

みなさんも…やりましょうね!