Chaos Destruction (カオス破壊) の概要

利用可能なカオス破壊ツールと、その連携によって UE4 で破壊を作成する方法の概要。

Windows
MacOS
Linux

Chaos Destruction (カオス破壊) システムは Unreal Engine 4 (UE4) のツールのコレクションであり、これを使用するとシネマティック品質のレベルで破壊をリアルタイムで実現できます。素晴らしいビジュアルに加えてシステムはパフォーマンスに対して最適化されており、アーティストやデザイナーはコンテンツの作成をより細かく制御できます。 このシステムは、Geometry Collections (ジオメトリ コレクション) (破壊されるアイテム)、Fracturing Editor (破砕エディタ) (ジオメトリ コレクションを破壊する方法を定義するために使用するツール)、Clustering (クラスタリング) (ジオメトリ コレクションを分解するさまざまなレベルを定義) に依存しています。Connection Graph (接続グラフ) (ジオメトリ コレクションの割れた破片がどのように相互に結合するか) と Fields (フィールド) (割れた破片と直接相互作用して制御する方法) など、ジオメトリ コレクションの破壊方法を制御するために使用できる追加のツールがあります。

カオス破壊ツールを有効にして、4.23 ソース ビルドを使用してコンパイルする必要があります (以下をご覧ください)。現在、Chaos は Epic Launcher のプリコンパイル済みビルドでは動作しません。

カオス破壊の設定

以下の手順に従って、Unreal Engine のソースコードをダウンロードし、エンジンをビルドして、必要なカオス破壊プラグインを有効にします。

  1. 4.23 Unreal Engine ソースコードをGitHub から ダウンロードします。

    GitHubDownload.png

    GitHub Desktop を使用してリポジトリを複製する際に、プラグインが見つからない問題が発生する可能性があるため、.ZIP ファイルとしてダウンロードすることを推奨します。

  2. ZIP ファイルを任意の場所に展開します。

  3. Engine/Source フォルダ内で、Visual Studio、Notepad ++、または同様のテキスト エディタを使用して UE4Editor.Target.cs ファイルを開きます。

    EditUE4EditorTarget.png

  4. 以下を UE4Editor.Target.cs ファイルに追加して保存します。

    bCompileChaos = true;

    UE4Editor.Target.cs ファイルは次のようになります。

    public class UE4EditorTarget : TargetRules
    {
        public UE4EditorTarget( TargetInfo Target ) : base(Target)
        {
            Type = TargetType.Editor;
            BuildEnvironment = TargetBuildEnvironment.Shared;
            bBuildAllModules = true;
            ExtraModuleNames.Add("UE4Game");
    
            bCompileChaos = true;
    
        }
    }
  5. 4.23 のルート フォルダで 「Setup (設定)」 バッチ ファイルを実行し、完了したら 「GenerateProjectFiles」 バッチ ファイルを実行します。

    SetupAndGenerate.png

  6. [UE4.sln]、[build the Engine from the Source code (ソースコードからエンジンをビルド)] の順にダブルクリックして、プロジェクトを Visual Studio に読み込みます。

  7. 新しいプロジェクトを作成して開き、[Edit (編集)] > [Plugins (プラグイン)] メニューから次のプラグインを有効化します。

    • Chaos Editor (カオス エディタ)

    • Chaos Solver (カオス ソルバ)

    • Chaos Niagara (カオス ナイアガラ)

    • Planar Cut (平面カット)

    • Editable Mesh (編集可能メッシュ) Geometry (ジオメトリ)

    • Geometry Cache (ジオメトリ キャッシュ)

    • Field System (フィールド システム)

  8. エディターを再起動します。

エディタを再起動すると、[Modes (モード)] パネル内で利用可能な [Fracture Editor (破砕エディタ)] にアクセスできるようになります。

FractureEditorEnabled.png

Fracture Editorジオメトリ コレクション を作成し、ジオメトリ コレクションの破砕とクラスタリングを制御できます。

Geometry Collections (ジオメトリ コレクション)

Chaos システムの破壊は ジオメトリ コレクション と呼ばれる新しい種類のアセットから始まります。このアセットは、ブループリントやネストされたブループリントにまとめられたものも含めた 1 つ以上のスタティック メッシュからビルドできます。 ジオメトリ コレクションを取得したら Fracture Editor (破砕エディタ) を使用してバラバラにして、分離方法を決定する設定を定義できます。Chaos ツールで物体をバラバラにして破砕する前に、バラバラにする対象と、最高の結果を得るためにジオメトリ コレクションを構築する方法を考えるのが最善です。

構築のベスト プラクティス

ジオメトリ コレクションを作成する場合、コンテンツをモジュール方式でセットアップされ、相互侵入のないウォータータイトであるのが理想です。そうすることでジオメトリ コレクションを破砕する際の柔軟性と制御が向上します。1 つのアプローチは、以下に示すように Blueprint (ブループリント) と複数の Static Mesh Components (スタティック メッシュ コンポーネント) を使用することです。

このサンプルと、このページで説明する概念の実践的なアプローチについては、[Learn (ラーニング)] タブ の下の Epic Launcher から入手可能な Chaos Destruction Demo (カオス破壊のデモ) プロジェクトで詳細を確認できます。

上記のビデオでジオメトリ コレクション アセットは単一のブループリントで構成されています。このブループリントは建物の窓部分を構成するすべてのメッシュを含んでいます。 以前に破壊システムを使用したことがある場合、相互侵入のないウォータータイトとモジュール方式の重要性はおなじみかもしれません。破壊システムを初めて使用する場合、本質的にこのピースの破砕はごまかせません。 各破片は Mass (質量) をもち、破砕するよう要求されたときに何をすべきか知っている必要があります。

モジュールを構築するときは、ピボットを Unreal のグリッド システムに従わせることも推奨します。グリッドを念頭に置いて幅と高さを標準化すると、より複雑なコンテンツを開発し続けるにつれて物事が簡単になります。

考慮すべきもう 1 つの概念が Material (マテリアル) 割り当てです。モジュールが同じテクスチャを共有している場合でも、マテリアル タイプごとに一意のマテリアル ID を適用する必要があります。これにより、破砕時に 2 番目のマテリアル ID が生成され、これに適切な内部マテリアルを割り当てることができます。 以下のビデオには、2 つのメッシュで構成されるジオメトリ コレクションがあります。このメッシュは同じテクスチャを共有しますが、2つの異なるマテリアル タイプを使用します。これにより、石造りとコンクリートの両方が内部の面に一意のマテリアルを使用できるようになります。しかし 1 つのマテリアルが使用された場合、1 つのマテリアル ID を内部の面に割り当てることができます。

モジュールやモジュールのコレクションを取得したら、次にジオメトリ コレクションへの変換を検討します。以下の例で、建物の側面は複数のマテリアル インスタンスがそれぞれ適用された 5 つの異なるモジュールで構成されています。 ジオメトリ コレクションへの変換ではすべての共有マテリアルが単一の ID に統合され、描画呼び出しを削減します。

Construction_BuildingPack.png

メッシュは任意の組み合わせでジオメトリ コレクションに変換できます。小さなモジュールは配置の点でより柔軟性がありますが、構造全体に複製されると、頻繁な描画呼び出し、目立つ継ぎ目、反復のリスクがあります。 結合されたモジュールが大きくなると柔軟性が低下しますが、分割してクラスタ化することで継ぎ目を隠すことができます。以下の画像で、左側の 4 つの柱は個々のジオメトリ コレクション アセットで、右側の大きい柱は単一のジオメトリ コレクションです。

Construction_BuildingDetails.png

個々の破片のそれぞれを破砕するとき、破壊が似通ったりハード エッジになるリスクがあります。大きな破片では破砕が破片全体に広がり、より良い結果が得られます。

ジオメトリ コレクションの作成

コンテンツを構築する推奨アプローチの一般知識があれば、以下に示す [Generate Geometry Collection (ジオメトリ コレクションの生成)] ボタンを選択して [Fracture Editor (破砕エディタ)] メニューからコンテンツをジオメトリ コレクションに変換できます。

GeoCollection_01.png

新しいジオメトリ コレクション アセットの名前と保存場所を入力すると、ビューポートでメッシュが更新されて破砕を示す描画図が表示されるため、どのように見えるか把握できます。

GeoCollection_02.png

ジオメトリ コレクション アセットを開く場合、Content Browser (コンテンツ ブラウザ) 内で Material Elements (マテリアル要素) (以下の写真 1 を参照) や Collision Settings (コリジョン設定) (以下の写真 2 を参照) を定義できます。

GeoCollection_03.png

上記の [マテリアル] セクションの画像には、外側のマテリアル (要素 0)、内側の素材 (要素 1)、そして適用するマテリアルを選択するデバッグ描画マテリアル (要素 2) があります。

コリジョン設定 を使用してジオメトリ コレクションのコリジョン動作を定義できます。選択できるオプションがいくつかあり、それぞれに長所と短所があります。 通常は [Particle-Implicit (パーティクル - 暗黙)][Implicit-Implicit (暗黙 - 暗黙)][Collision Type (コリジョン タイプ)] を定義します。

次に、コリジョン構造を初期化する方法である [Implicit Type (暗黙タイプ)] を選択できます。これらは主に 2 つの形式 Analytic Collision Volumes (分析コリジョン ボリューム) もしくは Level Set Volumes (レベル セット ボリューム) で提供されます。

  • 分析コリジョン ボリューム - 剛体の単純な表現を提供し、ボックス、球、カプセルで構成します。 ボックスは、バウンディング ボックスと同様の方法でボディをラップしますが、球体とカプセルは剛体に収まるように配置されます。 これらは低メモリ フットプリントで高速な演算を提供しますが、シミュレーション中の精度が低下します。 分析コリジョンを使用するもう 1 つの欠点は、シミュレーションがボディの交差から始まり、シミュレーションの開始時にボディを押し広げることです。 Collision Object Reduction Percentage (コリジョン オブジェクト削減率) プロパティを調整してこの動作を改善することが可能で、期待する結果を得るためには調整が必要な場合があります。

現時点でカプセルは機能が制限されているため、使用しないでください。

  • Level Set Volumes (レベル セット ボリューム) - これらのタイプのボリュームは、ボクセル (体積要素) 化されたグリッドを使用して剛体をサンプリングし、ジオメトリの符号付き距離フィールドを生成します。 レベル セット ボリュームの解像度は、アセットの Min (最小) または Max level Set Resolution (最大レベル セット解像度) 設定を使用して指定できます。 レベル セット ボリュームは非常に正確で、パフォーマンスを調整できますが、メモリ フットプリント (メモリ上の立体的ボリューム スケールの精度) が大きくなります。

レベル セットを使用する場合は、Collision Setting (コリジョン設定)Particle-Implicit (パーティクル - 暗黙) に設定する必要があります。これを Implicit-Implicit (暗黙 - 暗黙) に設定することはできますが、実際には暗黙サーフェスに対してコリジョン パーティクルをチェックしています。

想定通りにジオメトリ コレクションを設定したら、Fracture Editor (破砕エディタ) でメッシュの破砕とクラスタリングを開始します。

破砕とクラスタリング

いくつかの異なるタイプの破砕方法を利用可能であり、さまざまなテクニックを組み合わせることでよりインパクトのある破壊を表現できます。思い通りの結果を得るには、さまざまなオプションと設定を試してみる必要があります。

Fracturing (破砕)

ジオメトリ コレクションを取得したら、Fracture Editor (破砕エディタ) で実行する破砕タイプ (下記を参照) と破砕の実行に使用する設定を選択できます。

FractureSettings.png

破砕する方法

説明

Uniform Voronoi (均一ボロノイ)

標準の均一ボロノイでは、サイトの最小数と最大数を定義して、破砕の cell volume (セル ボリューム) を作成できます。

Clustered Voronoi (クラスタ化したボロノイ)

クラスタ化したボロノイ破壊により、基本ボロノイ パターンの周りに追加のポイントが作成され、より多くのバリエーションが作成されます。

Radial Voronoi (放射状ボロノイ)

放射状のボロノイ破砕は、中心点 (たとえば、壁に衝突する剛球) からボロノイ セルの放射状分布を作成します。

Planar Voronoi (平面ボロノイ)

このタイプの破砕は、ジオメトリ コレクションの平面に沿ったカットに使用できます。より自然な結果を得るために、平面カットにノイズを適用できます。

Slice Voronoi (スライス ボロノイ)

スライス ボロノイ破砕法では、X、Y、Z のスライス数を定義し、ランダムな角度とオフセットの変動を提供できます。

Brick Voronoi (レンガ ボロノイ)

このタイプの破砕では、破砕を行う前軸と上軸によって破砕を実行するパターンを定義できます。また、レンガの長さ、高さ、深さを調整して多様な結果を得られます。

Epic Launcher から入手できる Chaos Destruction Demo (カオス破壊のデモ) プロジェクトでは、ChaosExamples_02_Fracture マップを参照して、クラスタ化のテクニックとともに破砕タイプのさまざまな例を見ることができます。

破砕のタイプと設定を選択した後、[Fracture (破砕)] ボタンをクリックしてジオメトリ コレクションを破砕します。

GeoCollection_04.png

[Fracture Editor (破砕エディタ)][View (ビュー)] セクションで、展開ビューの割合を増減してボーンを表示できます。

GeoCollection_05.png

ボーンはジオメトリ コレクションによって色分けされます。Shift + B を押すとオンとオフを切り替えることができます。Shift + E で展開ビューの割合を増やしたり、Shift + Q で展開ビューの割合を減らすことができます。

必要に応じて個々の破片を sub-fracture (二次破砕) して、よりインパクトある結果を作ることもできます。

Subfractured_Pillar.png

上記の例では、最小/最大サイト数を 8 に設定したまばらなボロノイ破砕を使用して柱を破壊しました。そして次に、上部と下部を大きな塊を維持しながら、中心部を小さな断片に再破壊しました。

[Levels (レベル)] ドロップダウンをクリックすると、[View (ビュー)] セクションから [Fracture Editor (破砕エディタ)] でさまざまなレベルの破壊を表示できます。

Shift + W (レベルを下げる) と Shift + S (レベルを上げる) を押して、レベル間を移動することもできます。

クラスタリング

[Fracture Editor (破砕エディタ)][Clustering (クラスタリング)] オプションは、破砕したメッシュの視覚的な品質とパフォーマンスを制御する方法を提供します。 [Auto Cluster (自動クラスタ)] オプションをクリックすると、(設定に応じて) 破断したメッシュの断片が自動的にグループ化され、ジオメトリ コレクションの Fracture Level (破砕レベル) に割り当てることができます。

以下のサンプル ビデオでは、ジオメトリ コレクションに変換された 2 つの Static Mesh (スタティック メッシュ) を取得し、各レベルをステップ スルーします。最初、レベル 0 はエンティティ全体を表し、レベル 1 は 2 つのボーンをそれぞれ表します。 ジオメトリ コレクションを破砕すると、それぞれの柱には個別の破片のセットがあり、それぞれの柱から生じた破片を表す新しいレベル 2 が作成されます。次に、すべてのボーンをレベル 1 にフラット化し、Outliner (アウトライナー) のボーンを更新する [Auto Cluster (自動クラスタ)] を選択します。(別個の 2 つのピースの代わりに) レベル 2 には、大きめの破片を含む基本破砕が適用され、レベル 2 は小さなピースを含んでいます。

通常、建物などを破壊する場合はレベル 1 の少数のクラスタ (または大きな破片) が必要です。そしてレベルが上がると、より多くの破砕 (小さい破片) が起ります。 最適化のために最初の破壊で数千もの破片を必要としない場合があります。しかし代わりに、建物が崩壊するにつれて個々の破片を破砕します。 最適化に利用できるもう 1 つのオプションは、破砕に対して Max Cluster Level (最大クラスタ レベル) を定義する機能です。

MaxClusterLevel.png

このオプションは、個別のレベルのジオメトリ コレクションで設定でき、破壊を制限する破砕レベルを定義できます。一度設定すると、ジオメトリ コレクションは定義されたレベルを超えません。

クラスタリングの場合、各クラスター内の破片の数を確認すると役立つ場合があります。選択したジオメトリ コレクション アセットで次のコンソール コマンドを使用して統計をログに出力できます。

GeometryCollection.PrintDetailedStatistics

Output Log (出力ログ) に、選択したジオメトリ コレクション アセットに関する情報が記録されます。

PrintDetailedStats.png

階層の各レベルに含まれる剛体の数に焦点を合わせた簡易バージョンを取得するには、次のコマンドを使用します。

GeometryCollection.PrintDetailedStatisticsSummary

また、アクタごとに Damage Threshold (ダメージしきい値) を定義して、連続する各レベルの破壊に必要な歪みの量を定義できます。このオプションは [Details (詳細)] パネルの [Clustering (クラスタリング)] セクションにあります。

DamageThresholds.png

上記の例では、各レベルでバラバラになるのに必要なダメージのしきい値は、レベルが上がるごとに小さくなるように設定されています。 これはつまり、レベル 4 が最初に破砕を開始して、さらにダメージが増えると、それ以前のレベルも破砕しはじめることを意味します。 下の画像を見ると、レベル 1 で破片がより大きな塊になっていることがわかります (Shift + B でオン/オフを切り替えます)。

DamageThresholds_01.png

以下に、実際に実行されたシミュレーションを示します。

ここでは大きな破片が落下しており、この時にしきい値は、コリジョンと力がどのくらい簡単にさらなる破壊を起こすかどうかを制御します。 通常、クラスタが倒れるとコリジョンで速度が低下します。これは小さな破片がさらに破砕されるには、より低いしきい値が必要であることを意味します。

クラスタ グループ インデックス

ジオメトリ コレクションのグループでクラスタリングの制御に使用できるもう一つのツールは、個々のアクタの Cluster Group Index (クラスタ グループ インデックス) プロパティです。

ClusterGroupIndex.png

各アクタを同じクラスタ グループに割り当てると、そのクラスタ化されたグループはレベル 0 として動作します。以下の例では、破壊中に個々の柱を制御するために、さまざまなダメージしきい値設定が使用されています。

クラスタ グループ インデックスを使用する場合、適用されるフィールド データは同じインデックスを持つすべてのジオメトリ コレクションで共有されます。

コリジョン パーティクルの割合

ジオメトリ コレクション アセット内の [Chaos Physics (カオス物理)] セクションで、[Collision Particles Fraction (コリジョン パーティクルの割合)] プロパティを増やしてコリジョンに使用する三角形のサーフェスでパーティクルの数を増やすことができます。

CollisionParticlesFraction.png

このプロパティは重要で、特にクラスタ グループ インデックスの値を共有する場合は、数値が小さいと意図しないコリジョン動作 (たとえば、床を転がるなど) が発生します。

Fields (フィールド)

カオス破壊ツールの Fields (フィールド) システムは、さまざまな動作や破壊エフェクトを生成するために、空間の領域を (さまざまなパラメータで) 占有して物理シミュレーションに直接影響を与える手法です。 フィールドは Content Browser (コンテンツ ブラウザ) 内に作成できる純粋なデータ コンテナです (アセットとして開くことは出来ません)。

FieldSystemCreation.png

その後、使用するフィールドシステムを設定する Field System Component (フィールド システム コンポーネント) を含む Field System Actor (フィールド システム アクタ) クラスのブループリントを作成できます。

FieldSystemComponent.png

これはフィールド システム ブループリント内にあり、フィールドのロジックを定義できます。

Field System Actor (フィールド システム アクタ) ブループリントを作成するたびに、作成するフィールド システムのデータを含めるために一意の Field System (フィールド システム) アセットが必要です。

ブループリントでは、フィールドの影響を受ける属性のタイプを指定するのに Add Field Command (フィールド コマンドの追加)Apply Physics Field (物理フィールドの適用) を使用できます。

AddFieldCommand.png

  • Add Field Command (フィールド コマンドの追加) は、ブループリントの Construction (構築) フェーズで使用します。これはシミュレーションを開始する前にプロパティを積み重ねます。Anchor (アンカー) などの初期化フィールドは、この良い例です。

  • Apply Physics Field (物理フィールドの適用) を使用するとシミュレーション中に属性を指定できます。力と速度を使用した外部クラスタのひずみによる爆発は、この良い例です。

それぞれの簡単な概要は、以下の表でご確認ください。

フィールド タイプ

説明

DynamicState

ジオメトリ コレクションのステートを、スリープ、キネマティック、スタティック、ダイナミック、またはユーザー定義ステートに更新するために使用します。

LinearForce

ジオメトリ コレクション内のユーザー定義の場所と方向に、力を適用するために使用します。

ExternalClusterStrain

ジオメトリ コレクションの Damage Threshold (ダメージしきい値) がクラスタ化した破片を放つ場合、与えられたボリューム内でひずみを適用するために使用します。

Kill

このタイプのフィールドは、剛体が指定したボリューム内に収まった場合に、剛体のシミュレーションを停止するために使用します。

LinearVelocity

始点と終点に沿って衝撃速度を生成するために使用します。

AngularVelocity

与えられた半径の範囲で衝撃速度を生成するために使用します。

AngularTorque

指定された (またはランダムな) 量のトルクを剛体に適用し、より興味深いシミュレーションを実現するために使用します。

InternalClusterStrain

フィールド内のすべての剛体にひずみ値を設定するために使用します。

DisableThreshold

定義したしきい値を超えた場合に剛体のシミュレーションを無効化するために使用します。無効化された剛体はシミュレーションから完全に除外されます。これは削除された後、(衝突ではなく) フィールドによって再アクティブ化できます。

SleepingThreshold

定義したしきい値を超えた場合に剛体をスリープ状態にするために使用します。スリーブ状態の剛体は活性化して、フィールドや衝突によってシミュレートを続けることができます。

DynamicConstraint

ジオメトリ コレクションの一部を制約するために使用します。

CollisionGroup

指定したコリジョン グループ内のジオメトリ コレクションに影響を与えるために使用します。

ActivateDisabled

無効化されたパーティクルを再アクティブ化します。

次のセクションでは、より一般的なフィールドの概要をいくつか説明しますが、異なるフィールドを組み合わせることでさまざまな結果を得ることができます。

Anchor Fields (アンカー フィールド)

Anchor Fields (アンカー フィールド) を使用すると、ジオメトリ コレクションの一部を所定の位置にロックして、残りのジオメトリ コレクションをバラバラにすることができます。 アンカー フィールドが大部分のフィールド システム ノードと異なるのは、シミュレーションの前に接続グラフも確立する必要があるため、構築フェーズ中に確立する必要があるという点です。 したがって、このロジックは Field System Actor (フィールド システム アクタ) ブループリントの Construction Script (コンストラクション スクリプト) 内で定義され、Add Field Command (フィールド コマンドの追加) ノードを使用して適用されます (Apply Physics Field (物理フィールドの適用) は機能しません)。シミュレーション時に Clustering (クラスタ化) が有効になっている場合、Strain Field (ひずみフィールド) を使用して Strain (ひずみ) の力が適用されるまで、固定されたジオメトリ コレクションはスタティックのままです。

Chaos Destruction Demo (カオス破壊のデモ) プロジェクトからの例を以下に示します。

Cluster Strain Fields (クラスタひずみフィールド)

Cluster Strain Field (クラスタひずみフィールド) を使用してジオメトリ コレクションの Damage Threshold (ダメージしきい値) を超える値に達すると、ジオメトリ コレクションのセクションを減衰させ、分離することができます。 以下のビデオでは Anchor Field (アンカー フィールド) (黄色いボックス) を使用して建物の一部を所定の位置にロックして、Cluster Strain Field (クラスタひずみフィールド) (ピンクの球体) でひずみを適用する場所を示しています。 結果は以下のサンプルのように、建物の一部が砕け散り、他の部分はそのまま残るという効果を得られます。

Force Fields (力のフィールド)

Force Field (力のフィールド) は指定した量の力を指定したボリューム内の剛体に適用します。以下のビデオでは、Anchor Field (アンカー フィールド) (黄色いボックス) と Force Field (力のフィールド) (青い球体) の組み合わせにより、適用される力に基づいて建物が外側に爆発します。 この特定の例には減衰もありません。つまり、ブループリントがトリガーされるたびに、シーン内のすべてのアクティブな剛体が影響を受けます。

Angular Torque (角度トルク)

前の Force Field (力のフィールド) の例と同様に、この例では球状の減衰ボリュームとともに Angular Torque (角度トルク) を使用して、適用される力の量を制限します。 ランダムなベクターを角度トルクに適用することで、この例の建物は外側に爆発し、より多様で興味深い効果を実現できます。

Noise (ノイズ) と Culling Fields (カリング フィールド)

NoiseField コンポーネントを追加し、Set Noise Field (ノイズ フィールドの設定) 関数を使用して最小と最大の範囲を決定することで、任意のフィールドにノイズを適用できます。 Culling Field (カリング フィールド) コンポーネントを追加してカリングを適用する減衰を指定することで、カリング フィールドを同様の方法で追加できます。 カリング フィールドは、指定したボリュームへの操作を制限し、パフォーマンスを最大化して、不要なフィールド漏れを防ぐ良い方法です。

Sleep (スリーブ) と Disable Fields (無効化フィールド)

Sleep Field (スリーブ フィールド)Disable Field (無効化フィールド) は指定されたボリュームに入ると剛体を静止させます。 無効化フィールドはスリープ フィールドと異なり、無効ノードがコリジョンによって再アクティブ化できなくなるため、シミュレーション中にとてもチープになります。 ただし、他のフィールドにより再アクティブ化できます。

無効しきい値、スリーブしきい値、Kill フィールドを使用する場合は、その外側にカリングを適用することが重要です。 カリングの適用に失敗すると、マップ内の他の同様のフィールドが潜在的に無効化され、現在のしきい値以外に設定された他のしきい値を無視するよう効果的に指示します。

以下、左側のスリープ フィールドは剛体を停止するために使用します (コリジョンは剛体をアクティブ化するため、シミュレーションを継続します)。右側の無効化フィールドは、シミュレーション全体を停止するために使用します。

Internal Strain Fields (内部ひずみフィールド)

Internal Cluster Strain (内部クラスタ ひずみ) はフィールド内のすべての剛体の値に影響を与える方法を提供し、時間の経過とともにバラバラに崩壊する建物のような効果を実現するために使用します。 これを実現するには、(スケーリングのパラメータの) ノイズ フィールドから以前の値が減算される Tick ごとにひずみ値を更新します。また、カリング フィールドはシミュレーション中にエフェクトを含めるためにも使用します。

Geometry Collection Caching (ジオメトリ コレクションのキャッシュ)

大規模なシミュレーションでは、パフォーマンスを向上するためにランタイム シミュレーションからキャッシュされたシミュレーションに変更できます。 キャッシュされたシミュレーションは、バックグラウンドで発生する破壊や、プレイヤーの操作を伴わない破壊に適しています (今後の Chaos のバージョンでは、シミュレーションとキャッシュされたシミュレーション間の動的な変更のサポートが、より実行可能なオプションになる予定です)。 キャッシュされたシミュレーションを再生するには、まず最初に記録する必要があります。

キャッシュされたシミュレーションを記録および再生する方法:

  1. 破砕したジオメトリ コレクションを選択し、[Details (詳細)] パネルで [Cache Parameters (キャッシュ パラメータ)] の下の [Cache Mode (キャッシュ モード)][Record (記録)] に変更します。

    GeoCache_01.png

    記録するデータを定義するために、追加のパラメータを使用できます。

  2. ジオメトリ コレクションが崩壊するように、エディタでシミュレートや再生を行います。

    上のビデオでは、シミュレーションが発生するとパフォーマンスが少し影響を受けます。エディタ セッション中に停止すると Target Cache (ターゲット キャッシュ) が保存されたデータで更新されます (アセットも作成されて Content Browser (コンテンツ ブラウザ) に追加されます)。

  3. ジオメトリ コレクションを [Kinematic (キネマティック)] に変更して Target Cache (ターゲット キャッシュ) を割り当て、[Cache Mode (キャッシュ モード)][Play (再生)] に設定してから エディタで再生 (またはシミュレート) します。

    上記のビデオでは、最初に完全な動的シミュレーションを実行します。これはパフォーマンスに影響します。その後、選択した Target Cache (ターゲット キャッシュ)[Kinematic (キネマティック)][Play (再生)] に切り替えます。 ランタイムで計算を実行せずキャッシュしたアニメーションを再生しているので、パフォーマンスが向上して建物を破壊するときに処理落ちしなくなりました。

キャッシュを再生するようにジオメトリ コレクションを設定することに加えて、Blueprint (ブループリント) を使用して再生モードや Sequencer (シーケンサ) を変更し、再生コントロールを追加できます。

GeoCache_02.png

上記では、ジオメトリ コレクション コンポーネントやジオメトリ コレクションとともに、ジオメトリ コレクション アクタをレベル シーケンスに追加します。[Properties (プロパティ)] で、シーケンスで再生する Geometry Collection Cache (ジオメトリ コレクション キャッシュ) を割り当てることができます。 さらに、[When Finished (終了時)] ステートを [Keep State (ステートを維持)] に設定して、キャッシュが再生され建物が崩壊した後、そのステートを維持するようにします。 シーケンサを使用すると、再生速度を制御したり、キャッシュされたアニメーションを前後にスクラブできます。

Geometry Collection Debugging (ジオメトリ コレクション デバッグ)

Geometry Collection Debug Actor (ジオメトリ コレクション デバッグ アクタ) を使用して関連するプロパティを切り替えることで、ジオメトリ コレクション アクタの情報を視覚化できます。

Geometry Collection Debug Draw Actor (ジオメトリ コレクション デバッグ アクタ) は、[Details (詳細)] パネルのプロパティやコンソール コマンドを使用して、階層、クラスタリング、剛体に関する情報などの情報の表示を切り替える方法を提供します。

Chaos Solver (カオス ソルバ)

デフォルトで、Chaos は Chaos World Solver (カオス ワールド ソルバ) を自動的に生成して Chaos に関連する計算を処理します。 負荷を軽減するために、レベルに配置されたカスタム Chaos Solver (カオス ソルバ) にジオメトリ コレクションを割り当てることができます。 Chaos Solver (カオス ソルバ) を作成するには、Content Browser (コンテンツ ブラウザ)[Add New (新規追加)] ボタンをクリックし、Physics (物理)[Chaos Solver (カオス ソルバ)] を選択します。

ChaosSolver.png

このアセットは直接開けないため、プロパティにアクセスするにはレベルにドロップして [Details (詳細)] パネルに移動します。

ChaosSolver_03.png

このソルバを使用する必要があるジオメトリ コレクションは、[Chaos Physics (カオス物理)] > [Chaos Solver (カオス ソルバ)] オプションの下で個別のアクタに割り当てることができます。

ChaosSolver_02.png

Niagara Integration (ナイアガラ統合)

ChaosNiagara.png

Chaos Destruction (カオス破壊) システムのカオス ソルバは、シミュレーションの実行中にコリジョン、破壊、トレイル イベントのリストを保存できます。 Niagara (ナイアガラ) エフェクト システム内で、これらのイベントは Chaos Data Interface (カオス データ インターフェース) を介してリッスンされます。 カオス データ インターフェースを (デフォルトで) 実装するナイアガラ システムは、ワールド カオス ソルバによって駆動するすべての剛体に対してアクティブです。ただし、ナイアガラ システムをカスタム カオス ソルバに対して指定することもできます。

以下の手順は、ナイアガラ システム内で、コリジョン、破壊、トレイル イベントにカオス データ インターフェースを実装する一般的な概要を示します。

  1. 必要な Niagara Emitter (ナイアガラ エミッタ) を作成します。

  2. Niagara System (ナイアガラ システム) を作成し、それをエミッタに対して指定します。

    Chaos_Niagara_01.png

  3. ナイアガラ システム内で System Exposed Parameters (システム公開パラメータ) の下に Chaos Destruction Data (カオス破壊データ) パラメータを追加します。

    Chaos_Niagara_02.png

    Data Source (データ ソース) プロパティを使用すると、追跡する Collision Data (コリジョン データ)Breaking Data (破壊データ)、または Trail Data (トレイル データ) を定義できます。

    Chaos_Niagara_03.png

  4. Particle Spawn (パーティクルのスポーン)Apply Chaos Data (カオス データの適用) モジュールを追加します。

    Chaos_Niagara_04.png

  5. ナイアガラ システムをレベルにドラッグすると、システム アクタで Details (詳細) パネルの Data Source (データ ソース) をオーバーライドできます。

    Chaos_Niagara_05.png

    ナイアガラ システム アクタの複数のバージョンを作成して、データ ソースをコリジョン、破壊、トレイル データにオーバーライドできます。

例については Chaos Destruction Demo (カオス破壊のデモ) プロジェクトと ChaosExamples_04_Niagara マップを参照してください。

以下は、コリジョン、破壊、トレイル イベントの例です。

Chaos & Gameplay (カオスとゲームプレイ)

ジオメトリコ レクションは、ゲームプレイのトリガーに使用可能なコリジョンと破壊イベントを送信できます。 ジオメトリコ レクションがこのイベントを送信するには、ジオメトリコ レクション アクタで (コリジョン イベントの) Notify Collisions (コリジョンの通知) または (破壊イベントで) 破壊通知 を有効にする必要があります。 これらのオプションは、General (一般) セクションで選択したジオメトリコ レクション アクタの [Details (詳細)] パネルで有効にできます。

Chaos_NotifySettings.png

また、ブループリントを介して SetNotifyBreaks もしくは SetNotifyCollisions を呼び出して、このプロパティを有効化/無効化することもできます。

ジオメトリコ レクション アクタ (および含まれるジオメトリコ レクション コンポーネント) への参照を使用して、ジオメトリコ レクションを破壊したときに起動する OnChaosBreakEvent にバインドできます。

Chaos_OnBreakEvent.png

Chaos Break Event (カオス破壊イベント) 構造体は、プリミティブ コンポーネント、位置、速度、角速度、質量など、ジオメトリコ レクションの破壊に関するすべての関連情報をレポートします。

それぞれの破壊は、独自の破壊イベントを作成します。

破壊イベントと同様に、ジオメトリ コレクションが別のオブジェクトと衝突したときに起動する OnChaosPhysicsCollision を使用して、コリジョン イベントにバインドできます。

Chaos_OnCollisionEvent.png

Collision Info (コリジョン情報) 構造体を分解して、コリジョンに関するプリミティブ コンポーネントやその他のコンポーネント、位置、法線、速度値、質量などのコリジョンに関する情報を取得できます。

フィールドとともに破壊イベントとコリジョン イベントを組み合わせて使用すると、武器の発射などゲームプレイ イベントを通じて破壊を引き起こすことができます。 以下のビデオで示すように、コリジョン イベントからの情報を使用して、衝撃の場所にフィールドをスポーンして破壊を引き起こすことができます。

追加のカオスに関するトレーニング

このページで取り上げた情報に加えて、このトピックのいくつかに関する詳細情報を以下の Twitch ストリーミング 「Chaos Fundamentals (カオスの基礎)」でご確認いただけます。

Select Skin
Light
Dark

新しい Unreal Engine 4 ドキュメントサイトへようこそ!

あなたの声を私たちに伝えるフィードバックシステムを含め、様々な新機能について開発をおこなっています。まだ広く使える状態にはなっていないので、準備ができるまでは、ドキュメントフィードバックフォーラムで、このページについて、もしくは遭遇した問題について教えていただけると助かります。

新しいシステムが稼働した際にお知らせします。

フィードバックを送信