mcpField
S
scenario-unreal-world-building

scenario-unreal-world-building

github.com/scenario-labsクリエイティブ・メディア1.2k202 回インストール1 日前に更新
リポジトリ

scenario-unreal-world-building について

Unreal の環境アーティスト向けに、レベル、オープンワールド、ランドスケープ、World Partition、HLOD、PCG を扱うスキルです。ルールに基づいて世界の規模を定め、スクリプトで領域ごとに生成、ストリーミング、検証します。

主な機能

  1. 01オープンワールドと地形寸法の計画
  2. 02Data Layers、HLOD、ストリーミングソースの整理
  3. 03アセットキットとNanite構築の確認
  4. 04ベイク済みPCGとランタイム草地の設定
  5. 05領域ごとのワールド構築と検証

活用シーン

  1. 01Open Worldテンプレートからレベルを作成
  2. 02領域ごとに森林、岩、草地を生成
  3. 03ハイトマップとLandscape設定を確認
  4. 04HLODを構築してワールドストリーミングを監査

MCP 対応

README には ue_run、ue_review、ue_audit、ue_stat などのツールが記載されていますが、MCP の利用については説明されていません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/scenario-labs/skills --skill scenario-unreal-world-building

インストール後、Claude Code で/scenario-unreal-world-buildingを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
critique.md
expert-notes.md
gui-paths.md
procedures.md
sources.md
scripts/
ue_world.py

詳細

Unreal のワールド構築(レベル、オープンワールド、ランドスケープ、PCG)

この分野でのエキスパートレベルとは、ルールに基づいてワールドのサイズを決め、重要度の階層に従って配置し、最初のマップからストリーミングと予算管理を行い、手作業で何千ものアクターを選択するのではなく、スクリプトで領域ごとに変更できることを意味します。環境アーティストは、何を手動のままにするか、何をベイクするか、何をランタイムに生成するかを判断し、カウント、トレース、またはスクリーンショットで各判断を証明します。ここで指定した関連スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください (npx skills add scenario-labs/skills --skill <name>)。無人の場合は、ツールのスキーマに従って進め、不足している点を明示してください。

必須の背景知識: scenario-unreal-expert(チャネル、レビューループ、5.8 の落とし穴)。ツールキット: scripts/ue_world.py (sys.path[:0] = ["<skills>/scenario-unreal-world-building/scripts", "<skills>/scenario-unreal-expert/scripts"]; import ue_world as W) には、ue_run、ue_review、ue_audit、ue_stat があります。Unreal ではまだ実行されていません: オフラインレイヤーは tests/code/unreal-world-building/test_world_offline.py に合格しています。[verify] の名前は W.probe() で解決されます。記述した計画では、各 W.* ステップの背後にあるエンジン呼び出しを指定しています(手順 P0 の表)。

方針(専門家の知見)

  • 統合済みのセットアップから始めて、測定します。 File > New Level > Open World を選ぶと、World Partition、OFPA、Data Layers、HLOD、屋外ライティングが揃います。「テンプレートをそのまま使う」(Sam Deiter、 EEf07ggFWRw [00:20:40])。ランタイムグリッドは1つにします。グリッドを増やすと「パフォーマンスに悪影響を及ぼす可能性がある」(World Partition のドキュメント)。初日から WP と OFPA を使い、100,000 個のアクターを処理しました(Sam Dark、Subnautica 2、AalP65lrtpo [00:19:20])。
  • 重要度に応じて配置します。 主役となるアセットや主要エリアは手作業で配置し、低木から樹木、岩にかけては事前にベイクします。実行時に GPU で生成するのは、草のようなディテールだけです(CD Projekt RED と Epic、icIFFlOyob4 [00:04:23]-[00:07:05])。コリジョンや遠距離での表示要件により、永続的な配置が必要になります (Unreal Sensei、5ju7wyvZGBI [00:54:16])。プレイヤーが多様だと認識しないものはベイクし、プロシージャル生成の結果はエディターでプレビューします(Dark [00:07:56])。まず何を手動のままにするか決めます(Matt Oztalay、 TbNZ4GKaTow [00:32:26])。
  • PCG はマテリアルと同じように作成します。 パラメーターを持つテンプレートグラフを作り、用途ごとに Graph Instance を使用します (Oztalay [00:12:18])。Is Partitioned は「ほぼ必須」です [00:22:34]。出力は PCG アクターの Data Layer と HLOD Layer を継承するため、生成前に割り当てます(PCG のドキュメント)。グリッドは、パラメーター用に無制限、ランドスケープ読み込み用に 128 m、散布用に 32 m とします。CPU から GPU への転送には毎回コストがかかり、レイヤーウェイトは GPU 上にありません(icIFFlOyob4 [00:08:04] [00:23:16] [00:24:12])。ポップインは生成の遅延であり、Test ビルドで評価します [00:27:10] [00:27:44]。不正なデータは明確に警告させます。Data Missing Attribute では Warn を有効にします(Oztalay、00:10:47 のフレーム)。
  • ランドスケープは選ぶのではなく、サイズを決めます。 有効なサイズは 2017、4033 で、2048 は不可です。コンポーネントは最大 1024 個、セクションは 2x2、編集レイヤーを使用します(Landscape のドキュメント)。Z スケールとアクターの Z 座標は、宣言した起伏ではなく、エクスポートした高さから決めます(Z = span / 512、アクターは中点に配置)。GREEN テストでは、書類上は 250 m だったものが 314 m に達し、123,356 ピクセルがクリップされました [added]。scenario-unreal-materials で作成したマテリアルの仕様は、ここで確認します。Opacity Mask が接続された Opaque、ベースに LB Alpha Blend を1つ、名前ごとに Layer Info を1つ使います(Landscape のドキュメント)。急斜面のレイヤーだけにトライプレーナーを使い、大きなレイヤーにはアンチタイリングを適用し、スペキュラーは低く抑えます(Sensei [00:11:12]-[00:15:36])。
  • Nanite はデフォルトで使いますが、メッシュの構成も重要です。 「可能な限り有効にします」(Nanite のドキュメント)。ただし、穴の多いキットバッシュ、ハードエッジでの分割、継ぎ目、ノイズの多い頂点カラーは簡略化を妨げます。同じ見た目でも、250 MB が 12 MB になります(Epic、6igUsOp8FdA [00:02:46]-[00:08:04])。Nanite には距離カリングが適用されません(Nanite のドキュメント)。テッセレーションにはコリジョンがありません。レイヤーごとに設定し、地面では中心を 0.5、垂直な岩では 1 にします。ダイシングレートは 2 です [00:22:58] [00:29:53]。フォリッジは不透明にし、モデルとして作成します(Quixel、aZr-mWAzoTg [00:01:46])。
  • ストリーミングの構造はコンテンツに合わせます。 ファミリーごとに HLOD レイヤーを1つ使います。フォリッジには Instancing、建物には Merged Mesh、マージしても負荷が大きい場合は Simplified を使います(ドキュメント、Deiter [00:41:13])。ゲームプレイに応じてコンテンツが変わる場合は Level Instance、静的なセットには Packed Level Actor を使います [00:30:59]。Runtime Data Layers はゲームプレイの状態に限って使います(ドキュメント)。テレポート先には Streaming Source が必要で、ランタイム PCG を使う場合は生成ソースも必要です(ドキュメント、icIFFlOyob4 [00:36:44])。
  • ワールド規模の作業は、スクリプト化し、地域ごとに行い、検証します。 Outliner で選択してドラッグするのではなく、スクリプトを使います。マップ全体を処理するジョブは、リージョンごとにビルダーの commandlet で実行します(Dark [00:20:23] [00:20:55])。ビルダーで生成した後に HLOD を生成します。生成されたアクターは changelist に含めません(Oztalay [00:26:23] [00:29:07])。ドキュメントが要求するだけのルールも、バリデーターにします(Dark [00:23:04])。
  • キットは確定事項です。 フットプリントは最大範囲とし、ピボットを固定し、ドア幅を標準化します。基本パーツを先に作り、主役となるパーツは最後に作ります(Burgess and Purkeypile、QBAM27YbKZg [00:06:14] [00:07:51] [00:22:34])。村の小道は最も近い既存の道につなげます(Oztalay [00:20:01])。フェンスにはスプラインの文法を適用します [00:18:51]。

最初に決める項目

入力変更内容未指定の場合のデフォルト
プラットフォーム、フレーム予算Nanite、フォリッジの経路、レイヤー、PCG の処理時間、草の密度PC とコンソール、Nanite 有効、60 fps(scenario-unreal-performance)
サイズ、クワッドサイズ、高さのソースレイアウト、Z スケール、アクターの ZW.plan_landscape、1 m クワッド、高さに合わせて Z を調整
最速の移動手段、テレポート読み込み範囲、ストリーミングと生成のソースゲームプレイについて確認し、不明として記録
地形の特徴、Experimental の許容度Landscape と Mesh Terrain の選択、Nanite Foliage、PVE、FastGeoLandscape を使用し、リリース時に Experimental 機能は使用しない
手動かプロシージャルか、ソース管理グラフの範囲、生成された PCG を誰がコミットするか手動:村のレイアウト、川、道路、主要エリア。生成はビルダーが担当

ワークフロー

各段階は ue_run ジョブまたはライブ呼び出しで、プロシージャ内のコード(P番号)を使用します。

  1. ワールド仕様として概要をまとめる(P1)。W.U1_EXAMPLE_SPEC のように記述します。インストールごとに W.probe() を1回実行します。ゲート: W.check_world_spec(spec)["ok"] を満たし、情報に関する指摘に回答済みであること。
  2. マップ(P2)。テンプレートから W.new_open_world_map(path) を作成します。古いレベルには、まず W.convert_args(..., report_only=True) を使用します。ゲート:W.wp_facts_check(W.world_facts()) に問題がないこと。 wp.Runtime.ToggleDrawRuntimeHash2D を使ったPIEスクリーンショットを撮影します。
  3. 地形(P3、P4)。DCCのハイトマップまたはブロックアウト用の W.valley_heightmap を使用します。W.export_heightmap でZとアクターのZを実際の範囲に合わせます。MCPツールが行わない限り[要確認]、作成はLandscapeモードで1ステップで行います(Location Z = actor_z_cm、Scale Z = z_scale)。編集レイヤーはBase、Sculpt Details、Paint、Splines、Patchesです。重いペイントを始める前に、川(Water Body RiverまたはSplinesレイヤーのスプライン)を配置します。その後、ランドスケープビルダーを実行します。ゲート:インポート前に W.heightmap_clip_gate が空(クリップされたピクセルが0)であること。W.landscape_facts() が計画、スケール、位置と一致していること。 W.landscape_material_check に問題がないこと。Layer Debug、崖のクローズアップ、日なたの草、マネキンを2、10、100 mの位置で確認します。
  4. 整理(P5、P6)。ファミリーごとにエディターのData Layerを使用します。W.hlod_plan からHLODレイヤーを作成し、テレポート先にStreaming Sourceコンポーネントを配置します。ゲート:W.data_layer_check と W.hlod_actor_check に問題がないこと。
  5. 村とキット(P7)。W.kit_piece_check と W.door_width_check を実行します。家屋にはLevel InstancesまたはPacked Level Actorsを使用し、散乱物はタグ付きアセンブリ(W.tag_actors)にします。W.village_paths でパスをランドスケープのスプラインにします。フェンスには文法文字列を使用します。インスタンスを分割する前にマップのバージョンを作成します。ゲート:キットのエラーがなく、パスにZファイティングや明らかな繰り返しがないこと。
  6. Nanite(P8)。DCCのエクスポートに対して W.nanite_construction_check(W.obj_construction_stats(obj)) を実行します。W.batch_nanite(paths, dry_run=True) を実行し、内容を確認してから本実行します。レイヤーごとの中心位置で W.tessellation_check を実行します。ゲート:半透明のNaniteメッシュがないこと。Overdrawで樹冠を確認すること。変位した地面に足が接地していること。
  7. ベイク済みPCG:森林と岩(P9)。テンプレートグラフ(データがない場合の警告を含むレイヤーフィルター、傾斜に応じた密度、パス用のExtents ModifierからDifferenceへの接続、川岸でのDistanceによる間引き、樹木との差分による下層植生、Self Pruning、種テーブル、幹のみのコリジョン)を使用し、W.pcg_graph_lint でチェックします。W.spawn_pcg_volume(..., hlod_layer=, data_layer=) を使用します。まず1つのボリュームをデバッグします(D)。ゲート:W.pcg_component_check に問題がないこと。数が W.expected_points と一致すること。俯瞰とゲームプレイ時の高さから撮影し、パスや手作業で整えたエリアには何も配置されていないこと。
  8. ランタイム草(P10)。W.grass_rings() を使用します(32 mセルで128 mまで密に配置し、128 mセルで256 mまで疎に配置し、遠端は再着色します)。メッシュのない草タイプからGenerate Grass Mapsを通じてマスクを生成します。各アセット配列にプレースホルダーを1つ配置し、エディタービューポートを生成ソースにします。ランドスケープキャッシュを使用し、pcg.FrameTime を設定します。ゲート:W.runtime_grass_check と W.find_gpu_transfers に問題がないこと。 Testビルドでレイテンシを測定し、W.generation_lead_check を実行します。
  9. ビルド(P11)。 for name, args in W.build_pipeline(map, graphs): ue_run.run_commandlet(uproject, name, args):ランドスケープ、PCG、HLOD。ゲート:各コマンドの終了コードが0であること。レイヤーごとにHLODアクター数をカウントすること。W.changelist_check の後、エディターからサブミットします。
  10. レビューと引き継ぎ(P12~P14)。W.REVIEW_CONSOLE を使った W.tour(...) をパスし、すべてのショットに対して ue_review.image_checks を実行してから目視確認します。 W.world_rules_check(W.world_census(), vocab)、W.budget_sheet、W.lighting_handoff を実行します。ゲート:批評ルーブリックに合格すること。キャプチャなしで完了と報告された項目がないこと。

数値

値設定相対値/出典
2 km のランドスケープ2017 x 2017、63 クワッド、2x2、最大 1024 コンポーネントのうち 2561 m クワッド(Landscape ドキュメント)
Z スケールスパン cm / 512 x 1.02、アクターの Z はスパンの中間点16 ビットの高さ(ドキュメント)、余裕 [追加]
テンプレートグリッドセル 25,600 cm、範囲 76,800 cmプロファイルを最初に(Deiter [00:15:32])
PCG パーティショングリッド25,600 cmPCG World Actor(Oztalay frame 00:23:16)
階層グリッド無制限、128 m、32 mランタイムグラス(icIFFlOyob4 [00:08:39])
グラスのリング128 m まで密、256 m まで疎icIFFlOyob4 [00:15:30]
32 m セルあたりのインスタンス数1 万~2 万が適切ベース PS5、5.6 デモ [00:30:26]
pcg.FrameTimeデフォルト 5 ms、デモでは 2 ms5.6 の注記、ベース PS5 [00:26:24]
高さのアップロード32 m セルあたりゲームスレッドで約 0.5 msベース PS5 [00:24:12]
ストリーミングされたインスタンスハードリミット 1600 万Nanite ドキュメント
Nanite の構築250 MB 対 12 MB、見た目は同じ6igUsOp8FdA [00:02:46]
Nanite アセンブリアセットサイズの 5~10%、風に揺れるボーン 200~1,000 本aZr-mWAzoTg [00:07:13] [00:09:51]
ダイシング率2。2 未満、および約 5 または 6 を超えると遅くなる6igUsOp8FdA [00:29:53]
ディスプレイスメントの中心地面では 0.5、垂直な岩では 1、レイヤーごとコリジョンサーフェス [00:22:58]
地形のスペキュラー0.02(Sensei)、キャビティ駆動の上限として 0.5(Cloward)5ju7wyvZGBI [00:11:12]、0L5Azq6ugyo [00:01:19]
ティックの集約配置済みインスタンスが 10~15 個を超える場合Dark [00:23:04]
モバイル向けランドスケープ3 レイヤー、16 サンプラーES3.1(ドキュメント)

品質ゲート

  • 測定可能: ワークフローのチェック(すべての W.*_check、heightmap_clip_gate、pcg_graph_lint、 find_gpu_transfers)、インポート時の ue_audit、ビルダーの終了コードが 0 であること、視点ごとの stat unit と stat gpu、Test ビルドの Insights に表示される PCG 時間、-trace=WorldStreaming、 wp.Runtime.HLOD 0/1 の A/B テスト。
  • 視覚: 失敗したセルのないランタイムハッシュオーバーレイ、黒い斑点のない Layer Debug、マネキンとの タイリング、引き伸ばしのない崖、日光の下で草にプラスチックのような光沢がないこと、ディスプレイスされた 地面に足が接地していること、樹冠のオーバードロー、Hierarchical LOD Coloration と HLOD のシルエット、 フレーム単位の動画で確認するリングの切り替わりとポップイン、道に何もなく、土手の植生がまばらであること、 岩が地面に接地していること。評価基準: references/critique.md。

よくある間違い

間違い発生する現象修正方法
宣言した起伏に基づく Z スケールインポート後に台地や窪みができるフィットした形式でエクスポート、W.heightmap_clip_gate
2048 のハイトマップインポートが拒否される、またはリサンプリングされる2017 または 4033
すべてのレイヤーが高さブレンドで、Layer Info のないレイヤーがある黒い斑点ができる、レイヤーがまったく描画されないベースレイヤーを Alpha Blend にする。同じ名前の Layer Info を設定
2 つ目のランタイムグリッドストリーミングコストが増えるが、効果はないグリッドは 1 つにし、距離に応じて HLOD を使用する
整理のために Runtime Data Layers を使い、Level Blueprint から参照するひっかかりが発生する。アクターが常にロードされるEditor Data Layers と Blueprint クラスを使用する
HLOD も Data Layer もない PCG ボリューム距離が離れるとベイク済みの森が表示されない生成前に両方を割り当てる
ランタイムグラフがエディターで見えないアーティストに何も表示されないTreat Editor Viewport as Generation Source に設定する
GPU グラフ内のレイヤーウェイト草のマスクが空になるメッシュのない草タイプを使い、Generate Grass Maps を実行する
アーティスト用アセット配列が空草のストリーミングが崩れる各配列にプレースホルダーを 1 つ設定する
Nanite にカリング距離や描画距離を設定する間引かれず、リング間で表示が切り替わらないHLOD とリングごとの生成半径を使用する
GPU 専用の木Lumen に木が表示されない小さなものに限り GPU 専用にする
草の半径をひたすら大きくするインスタンスが爆発的に増え、端が見えてしまうリングを 2 つにし、端の色を変える
隙間の多いキットバッシュの岩アセットが巨大になり、距離が離れると穴が見える土台をつなげ、タイリングテクスチャを使う
Construction Script による散布170,000 個のボディ、マップを開くのに 7 分(Oztalay [00:30:49])PCG 出力を使い、クラッターのコリジョンを無効にする
生成した PCG アクターをリポジトリにコミットする競合や古いデータが発生する生成はビルダーが担当する
大きなマップで全選択して編集するエディターが停止するW.region_batch またはビルダーを使う

引き継ぎ

  • scenario-unreal-pipeline-automation から受け取るもの: ue_audit から渡されるメッシュ、標準キットの パーツ、ハイトレンジ付きの DCC ハイトマップ。構築に失敗した場合は差し戻します(scenario-maya-expert、scenario-blender-expert にも共有します)。
  • scenario-unreal-materials から受け取るもの: Landscape インスタンスとレイヤーリスト(ブレンドタイプ、 急斜面レイヤー、アンチタイリング)、境界付きの RVT、グラスタイプ名、岩用の RVT ブレンド、オペークなフォリッジ。 スペキュラーは先方の担当です。ワールドアーティストは太陽光のキャプチャで確認した光沢を報告します。
  • scenario-unreal-lighting-rendering へ引き渡すもの: マップ、World Bookmarks または tour_viewpoints、 W.lighting_handoff(テンプレートライト、Lumen シーン外の GPU 専用ロール、HLOD の遠景および 距離フィールドのフラグ、Data Layer の状態)。
  • scenario-unreal-performance へ引き渡すもの: W.budget_sheet とツアーパス。
  • その他: scenario-unreal-gameplay(ストリーミングおよび生成ソース、Asset User Data、ティック の集約);scenario-unreal-pipeline-automation(バリデーター用のワールドルール); scenario-unreal-cinematics(pcg.FrameTime の一時停止、icIFFlOyob4 [00:28:51]);scenario-unreal-vfx (水のシェーディング)。

UE 5.8 に関する注意事項

  • 新しい WP マップではパーティション付きランタイムハッシュ(5.4)を使用します。グリッド プロパティを書き込む前に world_facts() を読み取ってください [verify]。
  • PCG はデフォルトで有効です。PCG Python Data Processor、PCG Builder Volume を使用します。Landscape Cache は 5.6 以降、オプトインです (有効にしないとランタイムの CPU 読み取りに失敗します)。
  • Edit Layer は必須です(5.7)。landscape.ForceLayersFullUpdate が ForceLayersUpdate に置き換わります。 WorldPartitionLandscapeBuilder(5.7)。水のブラシはグローバルマージを強制します。
  • HLOD:Build HLOD for Selection または Region、bForceRayTracingFarField、カスタム HLOD アクター(5.7)。 保存済みドキュメントには Approximate Mesh がありません [verify]。
  • 実験的機能:Mesh Terrain、Nanite Foliage、PVE、FastGeo、World Streaming Insights。Mac:M2 以降では Nanite と VSM Beta が有効です。クックプラットフォームは Mac です。

参考資料

  • references/expert-notes.md:タイムスタンプ付きの専門家による判断。
  • references/procedures.md:P0 から P14 までの手順、全コード、ツールキットの背後で実行される エンジン呼び出し、テスト、ステータス。
  • references/critique.md:各ゲートの評価基準。
  • references/gui-paths.md:各手順のエディターメニュー。
  • references/sources.md:ソース、認証情報、URL、タイムスタンプ、改訂履歴。

コメント