Chaos Destruction の概要

Chaos Destruction ツールの概要、どのように機能して UE4 で破壊を作り出すのかを説明します。

Windows
MacOS
Linux

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

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

Chaos Destruction を設定する

以下の手順に従って、Unreal Engine のソースコードをダウンロードし、エンジンをビルドして、必要とされる Chaos Destruction を有効にします。

  1. 最新の 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 」ファイルに追加して保存します。

    BuildEnvironment = TargetBuildEnvironment.Unique;
    bCompileChaos = true;
    bUseChaos = true;

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

    public class UE4EditorTarget :TargetRules
    {
        public UE4EditorTarget( TargetInfo Target ) : base(Target)
        {
            Type = TargetType.Editor;
            BuildEnvironment = TargetBuildEnvironment.Unique;
            bBuildAllModules = true;
            ExtraModuleNames.Add("UE4Game");
    
            bCompileChaos = true;
            //Note that the following line is not needed for 4.23 or previous versions.
            bUseChaos = true;
    
        }
    }
  5. エンジンのルート フォルダで「Setup」バッチ ファイルを実行します。完了したら「GenerateProjectFiles」バッチ ファイルを実行します。

    SetupAndGenerate.png

  6. UE4.sln」ファイルをダブルクリックして、ソースコードからエンジンをビルド します。

  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ジオメトリ コレクション を作成し、ジオメトリ コレクションの破砕とクラスタリングを制御することができます。

ジオメトリ コレクション

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

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

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

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

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

モジュールの構築の際には、ピボットを Unreal のグリッド システムに合わせることも推奨します。グリッドを念頭に置いて幅と高さを標準化すると、この先さらに複雑なコンテンツを開発する場合に作業が楽になります。

もう 1 つの考慮していただきたい概念は マテリアル の割り当てです。モジュールが同じテクスチャを共有している場合でも、マテリアル タイプごとに一意のマテリアル 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

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

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

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

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

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

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

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

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

破砕とクラスタリング

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

破砕する

ジオメトリ コレクションを取得したら、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 で展開ビューの割合を減らすことができます。

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

Subfractured_Pillar.png

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

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

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

クラスタリング

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

以下のサンプル ビデオでは、ジオメトリ コレクションに変換された 2 つのスタティック メッシュを取得し、各レベルをステップ スルーします。最初、レベル 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 として動作します。以下の例では、破壊中に個々の柱を制御するために、さまざまなダメージしきい値設定が使用されています。

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

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

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

CollisionParticlesFraction.png

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

Field

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

FieldSystemCreation.png

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

FieldSystemComponent.png

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

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

ブループリントでは、フィールドの影響を受ける属性のタイプを指定するのに Add Field CommandApply 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 Field

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

Chaos Destruction Demo プロジェクトからの例を以下に示します。

Cluster Strain Field

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

Force Field

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

Angular Torque

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

Noise Field と Culling Field

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

Sleep Field と Disable Field

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

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

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

Internal Strain Field

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

ジオメトリ コレクションのキャッシュ化

大規模なシミュレーションでは、パフォーマンスを向上するためにランタイム シミュレーションからキャッシュされたシミュレーションに変更できます。 キャッシュされたシミュレーションは、バックグラウンドで発生する破壊や、プレイヤーの操作を伴わない破壊に適しています。今後の 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 Debug アクタ を使用して関連するプロパティを切り替えることで、ジオメトリ コレクション アクタの情報を視覚化できます。

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

詳細は「Geometory Collection Debug アクタ 」を参照してください。

ケイオス ソルバ

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

ChaosSolver.png

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

ChaosSolver_03.png

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

ChaosSolver_02.png

Niagara 統合

ChaosNiagara.png

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

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

  1. 必要な Niagara エミッタ を作成します。

  2. Niagara システム を作成し、それをエミッタに対して指定します。

    Chaos_Niagara_01.png

  3. Niagara システム内で [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. Niagara システムをレベルにドラッグすると、システム アクタで [Details (詳細)] パネルの Data Source (データ ソース) をオーバーライドできます。

    Chaos_Niagara_05.png

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

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

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

ケイオスとゲームプレイ

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

Chaos_NotifySettings.png

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

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

Chaos_OnBreakEvent.png

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

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

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

Chaos_OnCollisionEvent.png

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

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

その他のケイオス関連のトレーニング

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

Select Skin
Light
Dark

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

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

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

フィードバックを送信