ue5-pcg-building について
UE5.6~UE5.8向けに、PCGを使った建物生成グラフの設計を案内するスキルです。敷地のフィルタリング、シェイプグラマー、ランタイムスケジューリング、出力方式、検証を扱います。
主な機能
- 01PCG建物生成ワークフロー
- 02敷地のフィルタリングと変換
- 03シェイプグラマーによる配置
- 04ランタイム生成とクリーンアップ
- 05スタティックメッシュまたはActor出力
- 06デバッグと検証
活用シーン
- 01プロシージャル建物グラフの設計
- 02敷地データからの建物生成
- 03範囲を限定したランタイム生成
- 04文法や生成失敗の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ unrealxu/ unrealengine5-skills --skill ue5-pcg-buildingインストール後、Claude Code で/ue5-pcg-buildingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/pcg-building-graph-patterns.mdproject-adapter.mdruntime-generation-validation.mdshape-grammar-building-pattern.md詳細
クイックスタート
- 生成対象を定義します:ブロックアウトタワー、モジュール式ファサード、または区画ベースの建物セット。
- 決定論的な入力を定義します:区画のスプライン/ポイント、地区タグ、スタイルプリセット、シード。
- 実行時モードを定義します:静的ベイク、オンデマンド、または実行時のスケジュール生成。
- 出力モードを定義します:まず Static Mesh インスタンスを使用し、Spawn Actor はインタラクティブまたは状態を持つ部分にのみ使用します。
API の要点(UE5.6-UE5.8)
- 実行時のトリガーと半径は
UPCGComponentにあります:EPCGComponentGenerationTrigger::GenerateAtRuntimebOverrideGenerationRadii、GenerationRadii、SchedulingPolicyClass、SchedulingPolicyGenerateLocal(...)、Cleanup(...)
- 実行時スケジューラーの更新は
UPCGSubsystemにあります:- UE5.6/UE5.7:
RefreshRuntimeGenComponent(...)、RefreshAllRuntimeGenComponents(...) - UE5.8:
RefreshRuntimeGenExecutionSource(...)、RefreshAllRuntimeGenExecutionSources(...) - UE5.8 の遅延更新:
DirtyRuntimeGenExecutionSources(...) - 共通のクリーンアップ API:
CleanupLocalComponentsImmediate(...)
- UE5.6/UE5.7:
- 出力選択の要点となるクラス:
- 高密度の描画には
UPCGStaticMeshSpawnerSettings - インタラクティブまたは状態を持つ出力には
UPCGSpawnActorSettings
- 高密度の描画には
- Shape Grammar の要点となるクラス:
UPCGSubdivisionBaseSettings::GrammarSelection- 非推奨の文法フィールド(
bGrammarAsAttribute_DEPRECATED、Grammar_DEPRECATED)には依存しないでください。
グラフステージの要件
- 各ステージで、以下を明示的に宣言する必要があります:
- 入力データ型(
EPCGDataTypeまたはアセットソース) - コアノード/クラス(最低 2 つ)
- 必須パラメーター(シード、タグ、範囲、半径、またはスタイルキー)
- 出力データ型
- デバッグ方法(ノードレベルの確認、デバッグノード、またはログ/アサートの手順)
- 入力データ型(
- これら 5 項目を満たせない場合、グラフ設計は未完成として扱ってください。
ワークフロー
1) 入力
- 入力データ型:アクター/スプライン/ポイントソース。
- コアノード/クラス:
UPCGDataFromActorSettings、UPCGGetActorPropertySettings、UPCGCreatePointsSettings。 - 必須パラメーター:区画タグフィルター、地区/スタイルタグ、シードソース、ソースの境界。
- 出力:順序が安定した、正規化済みの区画ポイントまたはスプラインデータ。
- デバッグ方法:入力ステージの後に
UPCGDebugSettingsを実行し、ポイント数と境界を確認します。
2) フィルター
- 入力データ型:入力ステージからのポイント/スプラインデータ。
- コアノード/クラス:
UPCGAttributeFilteringSettings、UPCGDensityFilterSettings、UPCGFilterByTagSettings。 - 必須パラメーター:傾斜範囲、除外タグ、区画の最小面積/幅、占有制約。
- 出力:建設可能な区画/候補のみ。
- デバッグ方法:フィルター前後の候補数を比較し、除外されたタグの分布を確認します。
3) 変換
- 入力データ型:フィルター済みの建設可能な候補。
- コアノード/クラス:
UPCGCopyPointsSettings、UPCGCreateSplineSettings、UPCGApplyScaleToBoundsSettings。 - 必須パラメーター:階高、ピボット規則、ファサードの向きの基準、ローカル軸。
- 出力:フットプリントのトランスフォームと各階のトランスフォーム。
- デバッグ方法:出力ポイントのトランスフォーム軸と階インデックス属性を確認します。
4) 文法
- 入力データ型:変換ステージからのセグメント/スプライン/ポイントデータ。
- コアノード/クラス:
UPCGSubdivideSplineSettings、UPCGSubdivideSegmentSettings、UPCGSelectGrammarSettings。 - 必須パラメーター:
GrammarSelection、モジュールサイズの制限、スタイルベースの文法キーのマッピング。 - 出力:文法によって解決されたモジュール配置/属性。
- デバッグ方法:
UPCGPrintGrammarSettingsを使用して、文法の解析とトークンを検証します。 - ルール:
GrammarSelectionのみを使用し、非推奨の文法フィールドは避けてください。
5) 出力
- 入力データ型:文法解決済みの配置。
- 中核となるノード/クラス:
UPCGStaticMeshSpawnerSettings、UPCGSpawnActorSettings、UPCGCreateTargetActor。 - 必須パラメーター:
- 静的メッシュ経路:メッシュセレクター、インスタンスパッカー、ISM/HISM ポリシー。
- アクター経路:アクタークラス、スポーン属性、状態/インタラクションの要件。
- 出力:生成された建物と、オプションのインタラクティブな建物要素。
- デバッグ方法:出力をレイヤー/タグごとに分割し、各レイヤーの数を検証します。
- デフォルトポリシー:Static Mesh Spawner を優先し、状態を持つ動作が必要な場合にのみ Spawn Actor を使用します。
6) 検証
- 入力データ型:最終的なスポーン結果と実行時の生成状態。
- 中核となるノード/クラス:
UPCGDebugSettings、UPCGComponent、UPCGSubsystem。 - 必須パラメーター:セルの想定範囲、更新ごとの最大スポーン予算、ナビゲーション/コリジョンの想定。
- 出力:合否のシグナルと修正アクション。
- デバッグ方法:オーバーラップ、ナビゲーションへの影響、セルごとの生成時間、決定論的な再生について、段階的なチェックを実行します。
制約
- バージョン固有の注記が必要な場合を除き、メインのパイプラインは UE5.6-UE5.8 と互換性を保ちます。
- 実行時生成では、次の項目を明示的に設定する必要があります。
GenerationTrigger = GenerateAtRuntime- 明示的な
GenerationRadii(暗黙のデフォルトに依存しないでください) - 予測可能なスケジューラー動作のための明示的な
SchedulingPolicyClass
- 大量の出力には ISM/HISM スタイルを優先し、小さなパーツごとに負荷の大きいアクターをスポーンしないでください。
- 範囲を制限しないワールド全体の再生成を避けるため、実行時生成の境界を明示してください。
- 実行時生成を想定している場合は、エディター専用データへの隠れた依存を避けてください。
- 実行時のスコープでは、World Partition の境界を厳格な制約として扱ってください。
障害への対処
- 症状:建物がスポーンされない。
- 確認箇所:入力ステージの出力数、ソースの境界、区画タグ。
- 修正:ソースアクター/スプラインの取り込みと区画フィルターのタグを確認し、候補セットが空でないことを確かめます。
- 症状:エディターのプレビューには出力されるが、実行時には出力されない。
- 確認箇所:
GenerationTriggerと、実行時の半径/スケジューリング設定。 - 修正:
GenerateAtRuntime、半径のオーバーライド、有効なスケジューリングポリシーを設定します。
- 確認箇所:
- 症状:実行時の更新で広すぎる範囲が再生成される。
- 確認箇所:実行時の半径と生成ソースの移動。
- 修正:生成/クリーンアップの半径を縮小し、ソースの境界を狭めます。
- 症状:ルールを縮小した後も、古い生成パーツが残る。
- 確認箇所:クリーンアップ経路とローカルコンポーネントのライフサイクル。
- 修正:コンポーネントの削除動作でクリーンアップを実行し、必要に応じてローカルクリーンアップを強制します。
- 症状:実行時生成中に大きな一時停止が発生する。
- 確認箇所:セルあたりのポイント数、アクターのスポーン数、更新ごとの作業負荷。
- 修正:セルごとの複雑さを軽減し、アクターのスポーン数に上限を設け、インタラクティブでないパーツを静的メッシュのインスタンスに移します。
- 症状:同じシードで決定論的な再生結果が一致しない。
- 確認箇所:上流のポイント順序が不安定、またはシードを使用していないランダム分岐。
- 修正:ランダム選択の前に順序を正規化し、すべての確率的な経路を明示的なシード入力に結び付けます。
- 症状:ファサードの文法でエラーが発生する、または空のモジュールが生成される。
- 確認箇所:文法の解析ログとモジュールのトークンマッピング。
- 修正:文法文字列、モジュール辞書、セグメントサイズの制約を検証します。
- 症状:オーバーラップとコリジョンの問題が発生する。
- 確認箇所:フィルターのしきい値と最終配置の制約。
- 修正:出力ステージの前にクリアランス/傾斜フィルターと占有拒否を追加します。
- 症状:生成された建物の周辺でナビメッシュの品質が低下する。
- 確認箇所:スポーンされた出力のコリジョンプロファイルとナビゲーションに影響するフラグ。
- 修正:ナビゲーションに影響する出力と影響しない出力を分け、必要な場所でのみナビゲーションを再構築します。
- 症状:パラメーターを編集しても実行時に変更が反映されない。
- 確認箇所:スケジューラーの更新フロー。
- 修正:変更したコンポーネント、またはすべての実行時コンポーネントについて、実行時スケジューラーの更新を要求します。
ランタイムスケジューラーの運用
- 1つのランタイムコンポーネントでスタイル、角丸、スケジューリング入力が変更された場合は、コンポーネントの更新を使用します。
- 多数のランタイムコンポーネントでスタイルやグローバルルールが変更された場合は、グローバル更新を使用します。
- 境界が縮小した場合やパーティションの所有権が変更された場合は、ローカルのクリーンアップを直ちに実行します。
- クリーンアップ後は、影響を受けるランタイム範囲に限ってローカルの再生成をトリガーします。
UE5.6~UE5.8 の互換性に関する注意事項
- 上記のコアランタイムトリガーおよび文法 API は、UE5.6~UE5.8 で安定しています。
- UE5.8 では、非破壊的な手動編集と複雑なメタデータ属性値が追加されています。これらは、バージョンをまたいでグラフを使用するための必須要件ではなく、UE5.8 固有のオプション機能として扱ってください。
- サブシステムのヘッダーパスの違い:
- UE5.6 では、一般に
Public/PCGSubsystem.hを使用します。 - UE5.7/UE5.8 では、
Public/Subsystems/PCGSubsystem.hを使用し、Subsystems/PCGSubsystem.hをインクルードします。
- UE5.6 では、一般に
- UE5.8 では、コンポーネント名を使用するスケジューラー更新呼び出しが非推奨になっています。UE5.8 のコードでは
IPCGGraphExecutionSourceベースの API を使用し、コンポーネントベースの呼び出しは UE5.6/UE5.7 の分岐でのみ保持してください。
エスカレーション
- アーキテクチャでカスタム C++ PCG 要素やエンジンプラグインの拡張が必要な場合は、エスカレーションしてください。
- 都市規模の生成を World Partition のストリーミングポリシーと統合する必要がある場合は、エスカレーションしてください。
- 生成されたレイアウトをセーブ/ロードやマルチプレイヤーの権限ルールと同期する必要がある場合は、エスカレーションしてください。
コメント
Markdown 対応