Unreal Engine 6でオープンワールドマップを作成
【概要】
本演習では、Unreal Engine 6の機能を活用してオープンワールドマップを構築する。3 次元コンピュータグラフィックスとゲームエンジンの可能性を体験的に習得することを目的とする。
【目次】
- 前提知識
- 演習一覧
- 演習1:PCG Partitioned Generationで樹木を自動配置
- 演習2:PCG Paintツールで建築物を手動配置
- 演習3:PCGスプラインで道路と道路沿い建築物を配置
- 演習4:Hierarchical Generationで草花を高密度配置
- 演習5:Procedural Vegetation Editorで植生を作成
- 演習6:Nanite Foliageで超高密度植生をレンダリング
- 演習7:Substrateで物理的に正確なマテリアルを作成
- 付録A:Unreal Engine 6主要画面の所在
- 付録B:作業フロー全体像
- 用語集
【サイト内の関連情報】
前提知識
必須
- Unreal Engineの基本操作(レベルの作成、アクターの配置、Detailsパネルの操作)
- 3 次元グラフィックスの基本概念(メッシュ、テクスチャ、マテリアル)
- ノードベースエディタの操作経験(BlueprintまたはMaterial Editor)
あると望ましい
- Landscapeでの地形作成経験
- Foliageツールでの植生配置経験
- World Partition(大規模ワールドを分割管理する仕組み)の概念
本演習で学ぶこと
- PCG(Procedural Content Generation:手続き型コンテンツ生成)フレームワークの活用
- Unreal Engine 6の主要機能
- オープンワールド構築のワークフロー
本演習で扱うPCG Editor Mode、Procedural Vegetation Editor、Nanite Foliageは、Plugins画面やProject SettingsでExperimentalと表示される場合がある。学習目的での利用は問題ないが、本番プロジェクトへの導入は慎重に検討すること。
演習一覧
| 演習 | 内容 | 難易度 | 前提 |
|---|---|---|---|
| 演習1 | PCG Partitioned Generationで樹木を自動配置 | 入門 | Unreal Engineの基本操作 |
| 演習2 | PCG Paintツールで建築物を手動配置 | 入門 | Unreal Engineの基本操作 |
| 演習3 | PCGスプラインで道路と道路沿い建築物を配置 | 入門〜中級 | 演習1〜2 |
| 演習4 | Hierarchical Generationで草花を高密度配置 | 中級 | PCGの基本 |
| 演習5 | Procedural Vegetation Editorで植生を作成 | 中級 | PCGの基本 |
| 演習6 | Nanite Foliageで超高密度植生をレンダリング | 中級 | 演習5 |
| 演習7 | Substrateで物理的に正確なマテリアル | 中級 | マテリアルの基本 |
演習1:PCG Partitioned Generationで樹木を自動配置
PCGはルールに基づいて樹木や岩を自動配置するシステムである。Partitioned Generationによりデータをグリッド単位で分割管理し、大規模ワールドでも軽快に動作する。
《手順》
ステップ1:地形の準備
- Basic level templateで新規レベルを作成する。
- 画面左上のModesドロップダウンから「Landscape」を選択する。
- 「Manage」タブで「Create」をクリックして地形を生成する。
- 「Sculpt」タブで地形に起伏をつける。
ステップ2:PCG VolumeとPCG Graphの作成
- Window > Place Actors を開き、「PCG Volume」を検索してビューポートにドラッグ&ドロップする。
- Content Browser(Ctrl+Spaceで開閉)で右クリック > Create Advanced Asset > PCG > PCG Graph を選択する。
- 名前を付ける(例:PCG_ForestGen)。
- レベル内のPCG Volumeを選択し、DetailsパネルのPCG ComponentセクションのGraphに、作成したPCG Graphを指定する。
ステップ3:ノード接続
- PCG Graphをダブルクリックして開く。
- グラフエリアで右クリックし、以下のノードを順に追加する:「Get Landscape Data」「Surface Sampler」「Transform Points」「Static Mesh Spawner」。
- 各ノードを左から右へ接続する(OutputピンからInputピンへドラッグ)。
- Static Mesh SpawnerのOutputを、グラフ右側の「Out」ノードに接続する。
ステップ4:パラメータ設定
- Surface Samplerを選択し、Detailsパネルで設定する:
- Points Per Square Meter:0.15
- Point Extents:50
- Looseness:配置のばらつきを調整
- Transform Pointsを選択し、Detailsパネルで設定する:
- Absolute Rotation:オン
- Scale Min:0.5、Scale Max:1.2
- Static Mesh Spawnerを選択し、Mesh Entriesに「+」で樹木メッシュ(例:SM_Tree)を追加する。複数追加する場合はWeightで出現確率を調整する。
- 「Save」をクリックする。
- ビューポートでPCG Volumeを選択し、Detailsパネルの「Generate」をクリックする。
ステップ5:Partition設定
- PCG Volumeを選択し、Detailsパネルで「Is Partitioned」をオンにする。
- OutlinerでPCGWorldActorを選択する(無い場合はWindow > Outlinerで表示)。
- Detailsパネルで「Partition Grid Size」を設定する(例:
25600cm)。設定後は、レベル内の各PCGアセットで「Cleanup」を実行してから「Generate」を再実行する。
《ヒント》
- Generateを押しても何も出ない場合、Get Landscape Dataが地形を参照しているか、Surface SamplerのOutputがTransform Pointsへ接続されているかを確認する
- 密度を上げすぎるとGenerateに時間がかかる。最初は
0.15程度で動作確認する - Is Partitionedをオフのまま大量配置すると、エディタが重くなることがある
《考察ポイント》
- 1万本の樹木を手作業で配置する場合と、PCGで配置する場合では何が本質的に異なるか。再現性と編集容易性の観点から考えよ
- Partition Grid Sizeを大きくした場合と小さくした場合のトレードオフを述べよ
- ルールベース自動生成と人間によるアートディレクションは両立可能か
演習2:PCG Paintツールで建築物を手動配置
Unreal Engine 6のPCG Paintツールにより、Foliage感覚で意図した位置にオブジェクトを配置できる。重要建築物やランドマークなど、自動配置に向かない要素に適している。なお、PCG Editor Mode(Paintツールを含む)は、Plugins画面でExperimentalと表示される場合があり、本番環境への導入には注意を要する。
《手順》
ステップ1:PCG Editor Modeを開く
- 画面左上のModesドロップダウンから「PCG」を選択する。
- PCG Editor Modeパネルが画面左側に表示される。
ステップ2:PCG Graphの作成
- Content Browserで右クリック > Create Advanced Asset > PCG > PCG Graph を選択する。
- 名前を付ける(例:PCG_ManualPlacement)。
- ダブルクリックで開き、「Transform Points」「Static Mesh Spawner」を追加して接続する。
- Static Mesh SpawnerのMesh Entriesに、配置したいメッシュ(例:建築物、彫像)を設定する。
- Static Mesh SpawnerのOutputを「Out」ノードに接続する。
- 「Save」をクリックする。
ステップ3:Paintツールの設定
- PCG Editor Modeパネルで「Paint」ツールを選択する。
- パネルで設定する:
- PCG Graph:作成したPCG Graphを指定
- ブラシサイズ:用途に応じて調整
- Brush Strength:配置密度を調整
ステップ4:配置と削除
- ビューポートで配置したい場所をクリック&ドラッグする。
- 削除する場合はShiftキーを押しながらドラッグする(ブラシが赤色に変わる)。
ステップ5:パラメータの微調整
- PCG Graphを開き、Transform Pointsを選択する。
- Detailsパネルで設定する:
- Scale Min、Scale Max:サイズのばらつき
- Absolute Rotation:オンにすると地形の傾斜に関係なく垂直に配置される
- 「Save」をクリックすると、配置済みオブジェクトに自動反映される。
《ヒント》
- オブジェクトの種類ごと(ベンチ、街灯、彫像など)にPCG Graphを分けると管理しやすい
- PCG Graphのパラメータ変更は配置済みオブジェクトにリアルタイム反映される
《考察ポイント》
- 自動配置(演習1)と手動配置(演習2)を、どのオブジェクトでどう使い分けるべきか
- 従来のFoliage機能と比べて、PCG Paintツールに「グラフによるルール定義」が加わったことで何が変わるか
- プレイヤーの動線・視線誘導を考えたランドマーク配置は、ゲーム体験にどう影響するか
演習3:PCGスプラインで道路と道路沿い建築物を配置
スプライン(制御点を曲線で結んだパス)に沿って道路を描き、道路沿いに建築物を半自動配置する。Density Filterで複数種類の建築物をランダムに振り分ける。
《手順》
ステップ1:道路用PCG Graphの作成とスプライン描画
- PCG Editor Modeパネルで「Draw Spline」ツールを選択する。
- Content Browserで右クリック > Create Advanced Asset > PCG > PCG Graph を選択する。
- 名前を付ける(例:PCG_Road)。
- PCG Graphを開き、「Get Spline Data」「Spline Sampler」「Static Mesh Spawner」を追加・接続する。Static Mesh Spawnerには道路メッシュを設定する。
- 「Save」をクリックする。
- Draw Splineツールのパネルで、PCG Graphに PCG_Road を指定する。
- ビューポートで道路の開始地点・カーブ・終了地点を順にクリックし、Enterキーで確定する。
ステップ2:建築物配置用PCG Graphの作成
- Content BrowserでPCG Graphを新規作成する(例:PCG_RoadBuildings)。
- 以下のノードを追加・接続する:
a. スプラインデータの取得:「Get Spline Data」
b. 配置間隔の設定:「Spline Sampler」をGet Spline Dataに接続
- Num Samples per Segment:10
- または Distance Between Samples:5000cm
c. 道路からのオフセット:「Transform Points」をSpline Samplerに接続
- Offset Min:(X=0, Y=500, Z=0)
- Offset Max:(X=0, Y=500, Z=0)
- 両側配置の場合:Offset Min (Y=-500)、Offset Max (Y=500)
ステップ3:複数種類の建築物をランダム配置
Density Filterは0.0〜1.0のランダム値で各ポイントを振り分ける。範囲を分割すれば複数種類の出現比率を制御できる。なお、Density FilterはAttribute Filterノードにより機能面で上位互換されているが、処理効率の面では現在も有効な選択肢である。
- Transform Pointsから4つの「Density Filter」を並列に接続し、それぞれ設定する:
- 建築物A:Lower Bound 0.0、Upper Bound 0.25
- 建築物B:Lower Bound 0.25、Upper Bound 0.5
- 建築物C:Lower Bound 0.5、Upper Bound 0.75
- 建築物D:Lower Bound 0.75、Upper Bound 1.0
- 各Density Filterの後に「Static Mesh Spawner」を接続し、対応する建築物メッシュを設定する。
- 「Union」ノードを追加し、全Static Mesh SpawnerのOutputを接続する。
- UnionのOutputを「Out」ノードに接続する。
ステップ4:配置条件の追加
- 平坦な場所のみに配置
- Transform PointsとDensity Filterの間に「Normal To Density」を挿入する
- Lower Bound:0.99
- Upper Bound:1.0
- 建築物同士の重なり防止
- 各Static Mesh Spawnerの後に「Bounds Modifier」を追加する
- Bounds Min:-500, -500, -500
- Bounds Max:500, 500, 500
- 「Self Pruning」を追加し、Pruning Type:Largest または Random
ステップ5:樹木との競合回避
- 樹木配置用のPCG Graph(演習1のPCG_ForestGen)を開く。
- 「Difference」ノードと「Get PCG Component Data」ノードを追加する。
- Get PCG Component DataのDetailsパネルで、建築物配置用のPCG Componentを参照する。
- 接続する:
- Surface SamplerのOutput → DifferenceのSource(第1入力)
- Get PCG Component DataのOutput → DifferenceのDifference(第2入力)
- DifferenceのOutput → 樹木のStatic Mesh SpawnerのInput
- 「Save」をクリックし、PCG Volumeで「Generate」を実行する。
《ヒント》
- 道路の両側に異なる建築物を置きたい場合、スプラインを左右で別に作成し、それぞれ別のPCG Graphを割り当てる
- 建築物の向きを道路に揃えるには、Transform PointsのRotation Modeを
Align to Tangentにする - 道路スプラインを後から編集すると、関連するPCG出力がすべて自動追従する。これがスプライン+PCGの最大の利点である
《考察ポイント》
- スプラインを「曲線そのもの」ではなく「ポイント生成のパラメトリック空間」として扱うPCGの設計思想は、3 次元CGにどのような汎用性をもたらすか
- Density Filterによるランダム化と、デザイナーの意図的配置のバランスはどう取るべきか
- Differenceノードによる「樹木と建築物の競合回避」は、PCG Graph間の依存関係を生む。規模が大きくなった際にこの依存をどう管理すべきか
演習4:Hierarchical Generationで草花を高密度配置
Hierarchical Generationは、オブジェクトを複数の階層に分けて生成する。樹木は広範囲に、草花はプレイヤー近傍のみに生成し、視覚品質とパフォーマンスを両立する。Hierarchical Generationを使うには、PCGコンポーネント側でPartitioned Generationが有効になっている必要がある。
《手順》
ステップ1:Hierarchical Generationの有効化
- PCG Graphを開く(例:PCG_Grass)。
- ツールバーの「Graph Settings」をクリックする。
- Detailsパネルで「Use Hierarchical Generation」をオンにする。
ステップ2:デフォルトグリッドサイズの設定
- Graph Settingsの「HiGen Default Grid Size」で草花用に
3200を選択する。 - 「Save」をクリックする。
ステップ3:複数グリッドサイズの併用
樹木と草花を一つのGraphで扱う場合の設定である。Grid Sizeノードは、それより下流で生成されるデータのグリッドサイズを上書きするため、サンプラーノードの手前に配置する。
- 樹木用ブランチ:「Grid Size」ノードを追加し、HiGen Grid Sizeを
12800に設定する。Get Landscape Data → Grid Size → Surface Sampler(樹木用)と接続する。 - 草花用ブランチ:別の「Grid Size」ノードを追加し、HiGen Grid Sizeを
3200に設定する。Get Landscape Data → Grid Size → Surface Sampler(草花用)と接続する。 - 各ブランチの末尾にStatic Mesh Spawnerを配置する。
- 「Union」で結合し、「Out」ノードに接続する。
ステップ4:Generation Radiusの設定
Generation Radiusは、プレイヤーからどの距離まで生成するかを指定する値である。グリッドサイズが大きいほど大きく設定する。小さいグリッドサイズに大きいRadiusを設定すると、不要な範囲まで詳細が生成され性能が低下するため、グリッドサイズが大きいほどRadiusも大きくなるようにする。
- Graph Settingsの「Runtime Generation」セクションを展開する。
- 「Generation Radii」を展開し、各グリッドサイズに値を設定する:
- HiGen Grid Size 12800:50000cm
- HiGen Grid Size 6400:25000cm
- HiGen Grid Size 3200:12500cm
- 「Save」をクリックする。
ステップ5:PCGコンポーネントでパーティション設定
- レベル内のPCG Volumeを選択する。
- Detailsパネルで「Is Partitioned」をオンにする(Hierarchical Generationを機能させるための必須条件である)。
ステップ6:Runtime Generationの有効化(任意)
- OutlinerでPCGWorldActorを選択する。
- Detailsパネルで「Treat Editor Viewport as Generation Source」をオンにする。
- レベル内のPCG Volumeを選択し、Detailsパネルで「Generation Trigger」を「Generate at Runtime」に変更する。
- PCG Graphを開き、Graph SettingsのRuntime Generationセクションで「Cleanup Radius Multiplier」を設定する(例:
2.0)。 - 「Save」をクリックする。
《ヒント》
- 大規模グリッドに大きいRadius、小規模グリッドに小さいRadiusが基本則である。逆にすると不要な範囲まで詳細が生成され、性能が低下する
- Static Mesh SpawnerのCull Start DistanceとCull End Distanceを併用すると、表示距離をさらに細かく制御できる(例:Start
10000cm、End15000cm) - 「Density Noise」ノードを追加しDensity Functionを
Perlin、Scaleを500程度にすると、草花が自然な群落を形成する
《考察ポイント》
- 「遠くは粗く、近くは詳細に」という階層的生成の発想は、LOD(Level of Detail)と何が同じで何が異なるか
- Runtime Generationは静的事前生成と比べ、メモリ使用量と起動時間にどう影響するか
- Generation Radiusを大きくしすぎた場合、小さくしすぎた場合に、それぞれどのような問題が生じるか
演習5:Procedural Vegetation Editorで植生を作成
Procedural Vegetation Editor(PVE)は、Unreal Engine 6で利用できるグラフベースのツールである。SpeedTreeなど外部ツールを使わずに、エンジン内で樹木や植物を作成・カスタマイズできる。PVEを使うには、PCGおよびDynamic Windの各プラグインもあわせて有効になっている必要がある。
《手順》
ステップ1:プラグインの有効化
- Edit > Plugins を選択する。
- 検索ボックスに「Procedural Vegetation」と入力する。
- 「Procedural Vegetation Editor」プラグインのチェックボックスをオンにする。Experimentalと表示される場合がある。
- 同様に「PCG」「Dynamic Wind」プラグインも有効になっていることを確認する。
- 「Restart Now」をクリックしてエディタを再起動する。
ステップ2:Quixel Megaplantsのダウンロード
- Window > Fab を選択する。
- 検索ボックスに「Quixel Megaplants」と入力する。
- 使用するアセット(例:Oak、Pine、Birch)を選択し、「Add to Project」をクリックする。
- Content BrowserのQuixelフォルダにアセットが追加されたことを確認する。
ステップ3:植生のカスタマイズ
- ダウンロードしたアセット内のPVE Graph Editorアセットをダブルクリックし、Procedural Vegetation Editorを開く。
- グラフ内のノードを選択し、Detailsパネルで以下を調整する:
- 樹木の高さと幅(Scaleノード)
- 枝の数と配置(Remove Branchesノード)
- 葉の密度と形状(Foliage Distributorノード)
- テクスチャとマテリアル(Mesh Builderノード)
- 調整結果はリアルタイムでプレビューに反映される。
- 「Save」をクリックする。
ステップ4:メッシュとして出力
- グラフ末尾の「Output」ノードを選択する。
- 出力オプションで「Skeletal Mesh with Nanite(Nanite対応のスケルタルメッシュ。風による揺れなどの動きを持たせる場合に選ぶ)」を選択する。動きを持たせない場合は「Static Mesh with Nanite」を選ぶ。
- 出力先のフォルダとファイル名を指定し、生成を実行する。
ステップ5:PCGで配置
- PCG Graphを開く。
- Static Mesh SpawnerのMesh Entriesに、出力したメッシュを追加する。
- 「Save」をクリックし、PCG Volumeで「Generate」を実行する。
《ヒント》
- PVEがExperimentalと表示される場合は、重要プロジェクトでは定期的なバックアップを推奨する
- 同じMegaplantアセットからパラメータ違いの複数バリエーションを生成すると、PCG配置時に多様性が増す
- 出力に時間がかかる場合があるため、最初は低解像度設定で試すと良い
《考察ポイント》
- 「外部ツールで制作してエンジンへインポート」する従来のパイプラインと、「エンジン内完結」のパイプラインの利点・欠点を整理せよ
- パラメトリックな植生生成(PVE)と配置レベルの自動化(PCG)は、抽象度の異なる自動化である。両者を組み合わせると何が可能になるか
- Experimental機能を学習目的で使うことの意義と、本番環境で使うことのリスクを区別して論じよ
演習6:Nanite Foliageで超高密度植生をレンダリング
Nanite Foliageは、Naniteを植生に利用する機能である。LOD作成不要で、数百万〜数千万三角形の高密度植生を効率的にレンダリングできる。Project SettingsでExperimentalと表示される場合がある。
《手順》
ステップ1:Nanite Foliageの有効化
- Edit > Project Settings を選択する。
- 左側カテゴリから Engine > Rendering を選択する。
- 「Nanite」セクションの「Nanite Foliage」をオンにする。
- 「Restart Now」をクリックしてエディタを再起動する。
ステップ2:Nanite対応植生の作成
- 演習5の手順でProcedural Vegetation Editorで樹木を作成する。
- Outputノードで「Static Mesh with Nanite」または「Skeletal Mesh with Nanite」を選択して出力する。
ステップ3:PCGで配置
- PCG Graphを開く。
- Static Mesh SpawnerのMesh Entriesに、Nanite対応の植生アセットを追加する。
- 「Save」をクリックし、PCG Volumeで「Generate」を実行する。
《ヒント》
- Alpha Maskingを多用するメッシュはNaniteと相性が悪い(オーバードローが増える)。Nanite Foliageでは可能な限りジオメトリでディテールを表現する
- WPO(World Position Offset:風揺れなどの頂点変位)を使う場合、頂点数が多いほどコストが高くなる。Nanite Foliageでは、WPOに代わってNanite Skinning(骨格に基づく変形)で風表現を行うことが推奨される
- 演習5(PVE)と演習6(Nanite Foliage)は、各機能を個別にテストしてから組み合わせる
《考察ポイント》
- 従来のFoliage(手動LOD・Alpha Masking多用)とNanite Foliage(LOD不要・ジオメトリ重視)は、レンダリング哲学として何が異なるか
- 「数億ポリゴンをリアルタイムで描画する」ことが可能になった場合、ゲーム開発のワークフローはどう変わるか。アーティストとエンジニアの役割分担も含めて論じよ
- 仮想化ジオメトリ(Nanite)と仮想化テクスチャ(Virtual Texturing)に共通する設計思想は何か
演習7:Substrateで物理的に正確なマテリアルを作成
Substrateは、Unreal Engine 6のマテリアルシステムである。マテリアルを「物質のスラブ(板状の層)」として扱い、BSDF(双方向散乱分布関数:光の反射・透過・散乱を記述する関数)に基づき物理的に正確な表面を表現する。
《手順》
ステップ1:Substrateの有効化
- Edit > Project Settings を選択する。
- Engine > Rendering を選択する。
- 「Substrate」セクションの「Substrate」チェックボックスをオンにする(新規プロジェクトでは既に有効になっている場合がある)。
- 「Restart Now」をクリックしてエディタを再起動する。
ステップ2:基本マテリアルの作成
- Content Browserで右クリックし、「Material」を選択する。
- 名前を付ける(例:M_SubstrateBasic)。
- ダブルクリックでMaterial Editorを開く。
- グラフエリアで右クリックし、「Substrate Slab BSDF」ノードを追加する。
- Substrate Slab BSDFのOutput(Front Material)を、メインマテリアルノードの「Front Material」入力に接続する。
- Substrate Slab BSDFを選択し、Detailsパネルで設定する:
- Diffuse Albedo:基本色(RGB値またはTexture Sampleを接続)
- F0:金属0.5〜1.0、非金属0.02〜0.06
- Roughness:0.0(鏡面)〜1.0(マット)
- 「Apply」、「Save」をクリックする。
ステップ3:従来マテリアルからの変換
- 従来マテリアルをMaterial Editorで開く。
- ルートノードを右クリックし、「Convert to Substrate」を選択する。これにより自動的にSubstrate Slabが作成され、既存の入力(Base Color、Metallic、Specular、Roughness等)がSlabに接続される。この変換は一方向であり、元の非Substrateマテリアルへ戻すことはできない。
- 接続結果をDetailsパネルで確認し、必要に応じてDiffuse AlbedoやF0の値を調整する。
- 「Apply」、「Save」をクリックする。
ステップ4:複雑なマテリアルの作成
例1:金属と錆の混合(Horizontal Blend)
Horizontal Blendは同一層内で複数マテリアルを並列ブレンドする。金属と錆が同じ表面に混在する状況に相当する。
- Substrate Slab BSDFを2つ追加する:
- 金属用:F0 0.9
- 錆用:F0 0.05、Diffuse Albedoを茶色
- 「Substrate Horizontal Blend」ノードを追加する。
- 接続する:
- 金属用Slab BSDFのOutput → Horizontal BlendのBackground入力
- 錆用Slab BSDFのOutput → Horizontal BlendのForeground入力
- マスクテクスチャまたはノイズ → Horizontal BlendのMix入力(線形補間で混合比率を制御する)
- Horizontal BlendのOutputをメインマテリアルノードのFront Material入力に接続する。
例2:クリアコート上の汚れ(Vertical Layer)
Vertical Layerはマテリアルを上下に積層する。汚れがクリアコートの上に乗る状況に相当する。
- Substrate Slab BSDFを2つ追加する:
- ベースマテリアル用(例:カーペイント)
- 汚れ用:Roughnessを高く設定
- 「Substrate Vertical Layer」ノードを追加する。
- 接続する:
- ベースマテリアルのSlab BSDF Output → Vertical LayerのBottom入力
- 汚れ用のSlab BSDF Output → Vertical LayerのTop入力
- マスクテクスチャまたはノイズ → Vertical LayerのWeight入力(上層が下層をどの程度覆うかを制御する)
- Vertical LayerのOutputをメインマテリアルノードのFront Material入力に接続する。
《ヒント》
- Substrateでは従来のMetallicインプットが廃止され、Diffuse Albedo・F0・F90で反射特性を定義する
- Horizontal Blend(並列ブレンド)とVertical Layer(積層)は用途が異なる。実物質に当てはめて考えると選びやすい
- 従来マテリアルが多数ある場合、「Convert to Substrate」を使えば段階的にSubstrateへ移行できる
《考察ポイント》
- 従来の「Metallic + Specular」モデルとSubstrateの「Diffuse Albedo + F0 + F90」モデルは、物理的解釈において何が異なるか。後者がより正確とされる根拠は何か
- Horizontal BlendとVertical Layerの違いは、現実の物質構造をどう抽象化したものか。具体例を3つ挙げよ
- エネルギー保存則がマテリアルシステムで自動的に保証されることは、レンダリング品質にどう寄与するか
付録A:Unreal Engine 6主要画面の所在
PCG関連
- PCG Editor Mode:画面左上のModesドロップダウン → PCG。Draw Spline、Draw Spline Surface、Paint、Volumeツールを提供。Experimentalと表示される場合がある
- PCG Graph Editor:PCG Graphアセットをダブルクリック
- PCG Component設定:PCG Volume選択時のDetailsパネル。Graph指定、Generate実行、Is Partitioned等
- PCGWorldActor:OutlinerでPCGWorldActorを選択。Partition Grid Size等
- Procedural Vegetation Editor:プラグイン有効化後、Megaplantアセット内のPVE Graph Editorアセットをダブルクリック。Experimentalと表示される場合がある
Landscape関連
- Landscape Mode:Modesドロップダウン → Landscape。Sculpt、Paintタブ
- Place Actors:Window > Place Actors
World Partition関連
- Data Layer Outliner:Window > World Partition > Data Layer Outliner
- World Partitionウィンドウ:Window > World Partition
Material関連
- Material Editor:マテリアルアセットをダブルクリック
- Substrate有効化:Edit > Project Settings > Engine > Rendering > Substrate
- Nanite Foliage有効化:Edit > Project Settings > Engine > Rendering > Nanite > Nanite Foliage。Experimentalと表示される場合がある
共通
- Content Browser:画面下部、またはCtrl+Space
- Detailsパネル:画面右側
- Outliner:画面右側
付録B:作業フロー全体像
- 地形作成(Landscape Mode)
- 大規模配置(演習1:PCG Partitioned Generation)
- 道路描画(演習3前半:Draw Spline)
- 道路沿い配置(演習3後半:Spline + Density Filter)
- 特定位置配置(演習2:PCG Paintツール)
- 植生作成(演習5:Procedural Vegetation Editor)
- 詳細追加(演習4 + 演習6:Hierarchical Generation + Nanite Foliage)
- マテリアル適用(演習7:Substrate)
- 整理(World Partition Data Layers)
配置方法の使い分け
- 入門者:PCG Paintツール(演習2)。Foliage感覚で重要オブジェクトを配置
- 中級者:スプライン + PCG Graph + Density Filter(演習3)。道路沿いに複数種類をランダム配置
- 上級者:フルPCG Graph + 条件指定。Self Pruning、Difference、Normal To Densityで完全制御
用語集
- Alpha Masking:透明度マップでメッシュの一部を透明にする技術
- BSDF(双方向散乱分布関数):光の反射・透過・散乱を記述する関数
- Bounds Modifier:PCGノード。ポイントの境界ボックスを調整
- Culling:描画不要なオブジェクトを除外する処理
- Density Filter:PCGノード。各ポイントにランダム値を割り当て、指定範囲のみ通過させる
- Difference:PCGノード。あるポイント集合から別の集合の領域を除外
- Diffuse Albedo:光が表面で散乱して反射する際の色
- F0:垂直入射時の反射率
- F90:水平入射時の反射率
- Fab:Epic Gamesのデジタルアセットマーケットプレイス
- Foliage:植生、または植生配置のUnreal Engine機能
- Generation Radius:プレイヤーからどの距離まで生成するかを指定する値
- Hierarchical Generation:複数の階層に分けて生成し、距離に応じて詳細度を変える仕組み
- Horizontal Blend:同一層内で複数マテリアルを並列ブレンドするSubstrateの手法
- Instancing:同一データを複数回再利用する技術
- Level Instancing:同一レベルデータを複数回再利用する技術
- LOD(Level of Detail):距離に応じて詳細度を段階的に変更する技術
- Nanite:Unreal Engineの仮想化ジオメトリシステム
- Nanite Foliage:Naniteを植生に利用する機能。Experimentalと表示される場合がある
- Normal:サーフェスに垂直な方向ベクトル
- Overdraw:同一ピクセルへの重複描画
- Partition Grid Size:PCG生成データを分割するグリッドの一辺の長さ
- PCG(Procedural Content Generation):手続き型コンテンツ生成
- PCG Editor Mode:PCGコンテンツをレベル内に配置するためのツール群。Experimentalと表示される場合がある
- PCG Graph:生成ルールを定義するノードベースエディタ
- PCG Volume:生成範囲を定義するアクター
- PIE(Play In Editor):エディタ内ゲーム実行モード
- Point:PCGにおける配置位置の候補
- PVE(Procedural Vegetation Editor):エンジン内植生エディタ。Experimentalと表示される場合がある
- Raycast:仮想光線で衝突オブジェクトを検出する処理
- Roughness:表面の微細凹凸の度合い
- Runtime Generation:実行時にプレイヤー位置に応じて動的生成・削除
- Self Pruning:PCGノード。境界が重なるポイントを除去
- Skinning:骨格に応じてメッシュを変形させる技術
- Slab:Substrateのマテリアルの板状の層
- SpeedTree:植生モデリング専用の外部ソフトウェア
- Spline:制御点を曲線で結んだパス
- Spline Sampler:PCGノード。スプライン沿いに指定間隔でポイント生成
- Static Mesh:静的な3 次元モデル
- Static Mesh Spawner:PCGノード。各ポイントにStatic Meshを配置
- Streaming:プレイヤー位置に応じてデータを動的に読込・解放
- Substrate:Unreal Engine 6のマテリアルシステム
- Surface Sampler:PCGノード。サーフェス上に指定密度でポイント生成
- Transform Points:PCGノード。ポイントの位置・回転・スケールを変換
- Vertical Layer:マテリアルを上下に積層するSubstrateの手法
- Voxel:3 次元空間を格子状に分割した立方体単位
- World Partition:大規模ワールドをグリッドセルに分割しメモリへ動的読込する仕組み
- WPO(World Position Offset):シェーダー内で頂点位置を動的に変更する技術