Skip to content

4_5_内装を生成する

Shun Moriya edited this page Sep 27, 2024 · 1 revision

InteriaDecoratorとは

編集中の記事です。

InteriaDecoratorシステムはベータ版の機能です。基本的なアルゴリズムはできていますが、パラメータの持ち方はデザイナーの方々のご意見を反映したいと思っています。

HOW TO PROCEDURALLY GENERATE AND DECORATE 3D DUNGEON ROOMS IN UNITY C#を参考にした内装を自動生成するシステムです。

このシステムはデザイナーやアーティストの意見を取り入れるためのベータ版です。仕様は予告なく変更する可能性があります。 我々はデザイナーやアーティストの助言を求めています。ぜひディスカッションにご記入ください。

DungeonInteriorDatabaseについて

DungeonInteriorDatabaseはインテリアになるアクターの属性を定義したDungeonInteriorPartsを抽選します。

DungeonInteriorDatabase

図のようにDungeonInteriorPartsを複数登録する事ができ、入力されるInqueryInteriorTagsが一致するアクターをスポーンします。 InqueryInteriorTagsが複数のアクターで一致した場合は、パーツの属性に応じて抽選されます。

DungeonInteriorPartsについて

DungeonInteriorPartsはインテリアになるアクターの属性を定義します。

Class

スポーンするアクターのクラスを指定して下さい

InteriorSystemTagsとInteriorTags

アクターを象徴するタグ名を設定して下さい。InteriorTagsのタグにInqueryInteriorTagsのタグがすべて含まれていると、このパーツがスポーンの候補として選択されます。

DungeonRoomSensorクラスのInqueryInteriorTagsに'kitchen'を指定すると、kitchenタグのあるアクターがスポーンされ、 その後DungeonInteriorLocationComponentInteriorTagscupが設定されている場合、タグにcupがあるパーツがDungeonInteriorLocationComponentの位置にスポーンされます。この繰り返しによって部屋には台所にふさわしい内装が生成されます。

装飾システムが予約しているタグの一覧

InteriorSystemTagsはDungeonInteriorDecoratorシステムが設定するInteriorTagsです。以下のタグを予約しています。

  • 優先度 : major
  • 部屋の種類 : aisle, slope, hall, hanare, start, goal
  • 位置 : center, wall

majorを有効にすると優先的にスポーンの対象に選ばれます。centerは部屋の中央付近に置きたいときに、wallは壁沿いに置きたいときに使います。

Additional Extent to prohibit placement

生成するアクターのメッシュの範囲に他のアクターがいる場合はスポーンをしません。このパラメータはメッシュの範囲に配置を禁止する範囲を追加します。

配置後、重なりチェックが行われ、重なりがあればアクタは破棄される。

OverlapCheck

このパラメータが有効になると、アクターのメッシュとその他のアクターがオーバーラップしているならスポーンをしません。

Frequency

このパラメータはスポーンの頻度を1%から100%で指定できます。 InteriorTagsを含むクエリの後、スポーンが可能か抽選が行われます。

PercentageOfErrorInPlacement

スポーンするアクターの位置の誤差です。 コリジョンの中心からコリジョンの端までの位置を比率で指定します。 0%はコリジョンの中心、100%はコリジョンの端を意味します。 このパラメータは高さには影響しないので、スポーンする高さはコリジョンの中心になります。

DungeonAngleTypeOfPlacement

配置時にアクタを回転させるタイプです。 回転しない(None)、180度毎の回転(Every180Degrees)、90度毎の回転(Every90Degrees)、自由な回転(Free)から選んでください。

DungeonInteriorLocationComponentについて

スポーンする内装アクターがDungeonInteriorLocationComponentを持っていると、DungeonInteriorDecoratorシステムが再帰的にアクターをDungeonInteriorLocationComponentの位置にスポーンを試みます。

InqueryInteriorTags

DungeonInteriorLocationComponentの位置にスポーンしたいアクターのタグを設定して下さい。InqueryInteriorTags内のタグがすべて一致したアクターがDungeonInteriorDatabaseから抽選されます。

例えばテーブルの上に古風なコップが置いてある場合、テーブルアクターのDungeonInteriorLocationComponentInqueryInteriorTagscupantiqueを設定すると、DungeonInteriorDatabase内にcupantiqueが登録されたアクターがスポーン対象に選ばれます。

テーブルの上の蝋燭の例

DungeonInteriorLocationComponent

テーブルの横に立つ敵の例

DungeonInteriorLocationComponent

Vegetation Parts

Meshes

生成するStaticMeshを指定して下さい

Density

1平方メートル当たりの密度を指定して下さい

CollisionChannel

地形を検出するコリジョンチャンネルを指定します。 通常はPawnとして他のコリジョンに衝突するか調べます。必要に応じて変更して下さい。

AlignToNormal

葉のインスタンスが、描かれている面の法線に合わせて垂直から角度を調整するかどうか。 AlignToNormalが有効でRandomYawが無効の場合、インスタンスは+X軸が斜面下を向くように回転します。

RandomYaw

選択した場合、葉のインスタンスは垂直軸を中心にランダムに回転する。

GroundSlopeAngle

フォリッジ・インスタンスは、水平から指定された角度範囲で傾斜している面にのみ設置される。

CullDistance

PerInstanceFadeAmountマテリアルノードを使用した場合に、インスタンスがフェードアウトし始める距離。0は無効。 クラスタ全体がこの距離を超えると、クラスタは完全にカリングされ、まったくレンダリングされなくなります。

Clone this wiki locally