【UE5】非同期物理シミュレーション「Tick Physics Async」をいろいろいじってみる
UE5の強力なパワーには驚かされるばかりなのですが、実験的機能リリースで気になる設定があるのです。[物理(Physics)]の[ティック物理非同期(Tick Physics Async)]っていう設定です。
・ゲームスレッドで物理シミュレーションの終了を待たないモード とのことで、
・CPUリソースに余裕があれば1Tickの全時間をシミュレーションに充てることも可能 だそうで、
・固定デルタタイムが設定できたり
と、物理機能をフルに使う場合は相当有用そうです。ということでちょっといじってみようと思います
まあ建築でゴリゴリの物理シミュレーションってそうそう無いのでいつ使うんだ? ってところではあるんですが、興味あるので仕方がない
UE5ドキュメントにも特に記載がなくて謎が多い実験的機能の中でも気になるのです。
Physics – Unreal Engine Document
動画版
やってみよう
じゃあどうやって実験しようかという話ですが
5秒毎に2倍に増殖するオブジェクトでパフォーマンス測定してみようと思います
本来は某都市開発シミュレーションゲームのように、
メインスレッド、成長判定用スレッド、人物乗物シミュレーション、流体シミュレーション
といったように、最初からスレッド分けしてあるゲームを準備するべきだと思います
UE5はわからないですが、UE4って物理演算をメインスレッドでしか処理されなかった
気がしたんですが、どうでしたっけ?
ちょっと実験の意義が怪しくなってきたけど進めます
結果だけ言っちゃうと、Async=ONの方が相当パフォーマンス上がったんですよ
それじゃあ準備します
2倍にメッシュを増殖するブループリントです
倍増させるメッシュはこんなグラスです
Playしてみます
常に動いててほしいので、地面に勾配を付けてみます
Eキーでセグメントを追加できます
これで実験をしてみますか
この検証方法だとちょっと違うのかな
[固定時間Async Fixed Time Step]を0.033から1.0にしてみるとどうなるのか
お、スローモーションになった
[最大物理時間]を0.033から1.0にしてみるとどうなるのか
こっちはデフォルト設定と同じ動きをするみたいで
[固定時間Async Fixed Time Step]を0.033から0.1にしてみるとどうなるのか
すり抜けちゃうみたいです
[サブステップ]と[サブステップ非同期]ってなんでしょうね
やっぱ物理演算をもうちょっと勉強してくるか、
高校/大学物理と衝突判定ロジックくらいしかわからないので色々足りてなさそう
またスローモーションになりましたね
ちょっとですね検証機能を変えようと思います。シーケンサーでやってみます
今までPlayしてリアルタイムで観察していたものを、
シーケンサーで60FPSで60秒出力してみます
[Tick Physics Async]をONするだけで、あとは初期値にしました
さきほど結果を言っちゃったんですけど、シーケンサーはすごい早くなるんですよ
ちなみにUE5起動後2発目のPayを測定します
1発目は初期ロードやキャッシュの都合があるようで、すごい悪い数字が出ます
じゃあやってみます
実はバイバインの動画でも比較しているんですが、やっぱりAsync=trueのほうが速く終わります
たった60秒の動画出力ですが、約24秒も短縮できました
いかがでしたか
物理演算の設定に対し、直接的で明瞭な検証結果は少なかったのですが、
物理演算が負荷になっていそうだとわかっていれば
[Tick Physics Async]をONにする価値はあるのではないかと思います
今日はここまで!
参考サイト
・Physics – Unreal Engine Document
・Unreal Engine 5 早期アクセスの注目機能総おさらい Part 2 – SlideShare