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は無効。 クラスタ全体がこの距離を超えると、クラスタは完全にカリングされ、まったくレンダリングされなくなります。