InteriaDecoratorとは
編集中の記事です。
InteriaDecoratorシステムはベータ版の機能です。基本的なアルゴリズムはできていますが、パラメータの持ち方はデザイナーの方々のご意見を反映したいと思っています。
HOW TO PROCEDURALLY GENERATE AND DECORATE 3D DUNGEON ROOMS IN UNITY C#を参考にした内装を自動生成するシステムです。
このシステムはデザイナーやアーティストの意見を取り入れるためのベータ版です。仕様は予告なく変更する可能性があります。 我々はデザイナーやアーティストの助言を求めています。ぜひディスカッションにご記入ください。
DungeonInteriorDatabaseについて
DungeonInteriorDatabaseはインテリアになるアクターの属性を定義したDungeonInteriorPartsを抽選します。

図のようにDungeonInteriorPartsを複数登録する事ができ、入力されるInqueryInteriorTagsが一致するアクターをスポーンします。
InqueryInteriorTagsが複数のアクターで一致した場合は、パーツの属性に応じて抽選されます。
DungeonInteriorPartsについて
DungeonInteriorPartsはインテリアになるアクターの属性を定義します。
Class
スポーンするアクターのクラスを指定して下さい
InteriorSystemTagsとInteriorTags
アクターを象徴するタグ名を設定して下さい。InteriorTagsのタグにInqueryInteriorTagsのタグがすべて含まれていると、このパーツがスポーンの候補として選択されます。
DungeonRoomSensorクラスのInqueryInteriorTagsに'kitchen'を指定すると、kitchenタグのあるアクターがスポーンされ、
その後DungeonInteriorLocationComponentのInteriorTagsにcupが設定されている場合、タグに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から抽選されます。
例えばテーブルの上に古風なコップが置いてある場合、テーブルアクターのDungeonInteriorLocationComponentのInqueryInteriorTagsにcupとantiqueを設定すると、DungeonInteriorDatabase内にcupとantiqueが登録されたアクターがスポーン対象に選ばれます。
テーブルの上の蝋燭の例

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

Vegetation Parts
Meshes
生成するStaticMeshを指定して下さい
Density
1平方メートル当たりの密度を指定して下さい
CollisionChannel
地形を検出するコリジョンチャンネルを指定します。 通常はPawnとして他のコリジョンに衝突するか調べます。必要に応じて変更して下さい。
AlignToNormal
葉のインスタンスが、描かれている面の法線に合わせて垂直から角度を調整するかどうか。 AlignToNormalが有効でRandomYawが無効の場合、インスタンスは+X軸が斜面下を向くように回転します。
RandomYaw
選択した場合、葉のインスタンスは垂直軸を中心にランダムに回転する。
GroundSlopeAngle
フォリッジ・インスタンスは、水平から指定された角度範囲で傾斜している面にのみ設置される。
CullDistance
PerInstanceFadeAmountマテリアルノードを使用した場合に、インスタンスがフェードアウトし始める距離。0は無効。 クラスタ全体がこの距離を超えると、クラスタは完全にカリングされ、まったくレンダリングされなくなります。