Language:
Page Info
Engine Version:

物理サブステップ機能

物理 サブステップ 機能を使うことで、物理シミュレーションの精度と安定性を高めることができますが、パフォーマンスが犠牲になります。ラグドール ジッターやその他の複雑な物理アセットが、最もわかりやすい改善点でしょう。

サブステップ機能を有効にする

サブステップは、Project Setting -> Physics タブで有効にすることができます。

SS_Enabled.png

この機能は開発段階なので、APEX の破壊表現は完全にサポートされていません。また、モバイルデバイス上でも現在はサポートされていません。しかしながら、この機能によって外見と感覚が大幅に向上されるため、私たちはその完成に向けて鋭意努力しています。

プロパティ

説明

Substepping

現在のプロジェクトでサブステップを有効 / 無効にします。

Substepping Async

非同期の物理シミュレーションをサブステップするかどうかです。

Max Substep Delta Time

サブステップにかけることのできる最大の秒時間です。ステップ全体が 0.5 秒かかり、 Max Substep Delta Time を .025 に設定すると、ステップ全体は 2 つのサブステップに分割しますステップ全体にかなりの時間、例えばまるまる 2 秒かかるとしたら、ステップは Max Substeps の値に基いて均等に分割され、80 (2.0/0.025=80) サブステップとはなりません。Max Physics Delta Time は、物理ステップにかかる時間をどのくらい制限するのか気をつけてみてください。

Max Substeps

ステップ全体を分割することができるサブステップの最大数です。

技術的な詳細

UE4 では可変フレームレートを使っています。可変フレームレートは、ハードウェアの拡張性に対応できる点が長所ですが、物理エンジンにとっては問題です。物理エンジンは短い固定した時間のステップで最もよく機能するからです。サブステップ機能は、トータルのフレーム時間をサブステップに分割します。そして、物理シミュレーションが、フレーム毎に複数回ティックします。サブステップの数は、サブステップのデルタタイムがどれくらい小さく設定されているかということによります。最大サブステップ時間が小さくなるほど、シミュレーションが安定します。ただし、CPU のコストは大きくなります。

サブステップ機能は、ユーザーからは完全に隠蔽されています。したがって、物理エンジンへのコールが、補間または維持される必要があります。たとえば、ユーザーがアクタに 1 つのフレームの間に力を加え、そのフレームが内部的に N 回サブステップされるとします。その場合は、N 回連続するシミュレーションのステップの間に力を加えることによって、同じ加速を実現する必要があります。また、ユーザーがアクタのターゲット位置をセットしたとします。その場合は、複数のサブステップに渡ってそのターゲット位置を補間することによって、望ましい速度を維持しなければなりません。これらの細かな事柄はすべて、UE4 によって内部的にすでに処理されています。ただし、必要なブックキーピングに関連して CPU とメモリのコストがかかります。

もう一つ注意したい技術上の詳細があります。それは、サブステップ中におけるコリジョンのコールバックの動作です。UE4 では物理サブステップが別の物理スレッドで実行されることによって、ゲームスレッドが継続して稼働できるようにしています。最高のパフォーマンスを実現するために、最後のサブステップが実行されるまでコリジョンのコールバックを遅らせます。つまり、同一のコリジョンについて複数のコールバックを受け取る可能性があるのです。たとえば、A が B と衝突して跳ね返った場合、A と B がオーバーラップした時のコールバックと、A と B がオーバーラップしなくなった時のコールバックの 2 つを同じフレームで受け取る場合があります。内部的には、すべてのコールバックがキューにプッシュされます。そのため、サブステップ 1 からのコールバックが、サブステップ 2 からのコールバックより前に処理されることになります。

使用方法

サブステップは、ラグドールで使用されるものを始めとして、複雑な物理アセットの質を大幅に改善します。ただし、品質の改善と CPU 負荷を常に天秤にかけて考えることは、ゲームにとって非常に大切です。