BlenderのCell Fractureアドオンで瓦礫のオブジェクトを作り、UnityのTreeとして利用する方法をの紹介です。
Blenderで瓦礫を作る
まずは瓦礫のもとになるCubeオブジェクトと床となるPlaneオブジェクトを用意します。カメラとライトはいらないので削除しておきましょう。Cubeオブジェクトはデフォルトのサイズでz=2の位置にしておきます。Planeオブジェクトもスケールを大きくしておきましょう。
Cubeオブジェクトを瓦礫にするために Cell Fracture というアドオンを有効にしましょう。アドオンの設定はEdit->Prefarencesから行うことが出来ます。Edit->Prefarencesをクリックすると新しいウインドウが現れるので、Aoo-onsを選択して検索バーから「Cell Fracture」と検索しましょう。一覧に出てきたCell Fractureのチェックボックスにチェックを入れると設定完了です。
Cell Fractureアドオンを有効にするとオブジェクトモードでObject->Quick Effects->Cell Fractureを選択できるようになります。Cell Fractureをクリックすると設定用のウインドウが開くので、パラメーターをいい感じにいじった後にOKを押すと新たに破片となったオブジェクトが生成されています。すごい!
ここからは物理シミュレーションによって破片を床に落下させます。Original_cell(Originalは元のオブジェクト名)というオブジェクトのPhysics PropertiesのRigidbodyを有効にしましょう。
その後残りの破片オブジェクト全てを選択(Shift+Click or Ctrl+Click)した状態でOriginal_cellをCtrl+Clickすることでもう一度Original_cellをアクティブにします。この状態でF3ボタンを押し検索バーに「Copy」と打つとObject->Rigid Body->Copy from Activeが見つかると思うのでそれをクリックします。するとなんとOriginal_cellのRigid Bodyの内容がほかの破片オブジェクトにも適用されます。
あとはPlaneオブジェクトにもRigid Bodyを適用し、Settings->Dynamicsのチェックを無効にします。こうすることでPlaneオブジェクトは位置が固定されたコライダーとして機能します。
ここまで来たらスペースボタンを押してシミュレーションを実行しましょう。するとPlaneオブジェクトに衝突した破片が良い感じにばらけてくれます。より乱雑にしたければ破片をより高いところから落とすとよいでしょう。
現時点では破片はそれぞれ独立したオブジェクトなので、お好みでオブジェクトを結合して一つのオブジェクトにしましょう。1つのオブジェクトとしてまとめたい破片を選択し、Ctrl+jを押すことで1オブジェクトとして結合することが出来ます。最後に、結合したオブジェクトを.fbx形式でエクスポートしましょう。必要なオブジェクト以外すべて削除したのち、File->Export->Fbx (.fbx)をクリックすれば完了です。
場合によってはImport-Export FBX Format アドオンを有効にする必要があるかもしれませんが、方法はCell Fracture アドオンと同じです。
無事.fbx形式でエクスポートすることが出来ました。
瓦礫をより細かくしたい場合はあらかじめCubeオブジェクトの頂点をSubdivideしておきましょう。
UnityのTerrain Treesで利用する
ここからはUnity上での操作になります。適当なプロジェクトを作成し、ヒエラルキーウインドウ上で右クリック->3D Object->TerrainでTerrainを新規に作成します。
InspectorからTerrainを見てみると5つの項目があります(Unity 2019.4f)が、これらの項目は左から順にCreate Neigbor Terrains, Paint Terrain, Paint Trees, Paint Details, Terrain Settingsとなっています。それぞれ、隣接するTerrainの作成、地形の高さ編集、3Dオブジェクトのペイント、表面のペイント、サイズや解像度などの設定に利用されます。
お好みですが、Terrain SettingsのMesh ResolutionからWidthとLengthを100程度にしてデフォルトよりも小さくしておきましょう。その方が操作がしやすくなります。
さて、ここで先ほど作成した瓦礫の.fbxモデルをUnityにインポートしましょう。続いてヒエラルキーウインドウ上で右クリック->3D Object->TreeによりTreeオブジェクトを作成します。そうするとOptimizedTreeという名前のTreeオブジェクトが作成されるので、このオブジェクトのInspector->Mesh(Mesh Filter)のMeshにインポートしたモデルのメッシュをドラッグ&ドロップします。注意点ですが、ドラッグ&ドロップするのはモデル内のメッシュであって.fbxモデルそのものではありません。その後Inspector->TransformのScaleをお好みで調整した後、このオブジェクトをプロジェクトウインドウにドラッグ&ドロップしてプレハブ化しておきましょう。Scaleですが、私の場合100くらいがちょうどよかったです。
再びTerrainのInspectorに戻りPaint Trees->Edit Trees->Add Treeを選択するとオブジェクトを選択する画面が出てくるので、先ほどのOptimized Treeのプレハブを選択します。
ブラシサイズや密度を適当に決めてTerrain上でクリックすると以下のように瓦礫をペイントすることが出来ます。
瓦礫というよりテトラポッドですね。ありがとうございました。