UE5.7より、新たに「PCGエディタモード」が搭載されました。ゲームデザイナー・アーティストフレンドリーがPCGの「使用」に徹することができるようワークフローを再構成した実用性の高い編集モードです。
詳しくは、公式ドキュメント「PCGエディタツールモード」やEpic Games Japanの講演スライド「ノンゲームで使える!40分で理解するPCG」を御覧いただくとして、本記事ではカスタマイズの勘所を押さえるために、異なる角度からエディタモードを解説します。
ツールとパレットの関係性
PCGエディタツールモードでは、まず①でツールのカテゴリを選択し、「上段パレット」(②)から実際に使用するツールを選択する仕様となっています。②で選択するものがツールの本体であり、①はメニュー上の仕分けにすぎません。ツールカテゴリは内部的にはコンテキストと名づけられており、ラインコンテキスト(表示名:Spline)、ペイントコンテキスト、ボリュームコンテキストの3種があります。
各コンテキストにぶらさがるツールの指定は、PCGEdModeCommands.cppでハードコードされており、エンジン改造なしの拡張は困難です。それでも拡張の必要がある場合は、FPCGEditorModeToolkit::RegisterPalettes()からの実装を追いかけてみるとよいでしょう。
②にリストされるツール(内部的にはインタラクティブツールと呼ばれる)は、全部で4種類あります。
- Draw Spline(ツールタグ:”SplineTool”)
- Draw Spline Surface(ツールタグ:”SplineSurfaceTool”)
- Paint(ツールタグ:”PaintTool”)
- Volume(ツールタグ:”VolumeTool”)
上段パレット(②)でツールを選択すると、選択したツールと”互換性”のある「プリセット」のPCGグラフ(ツールグラフ)が下段パレットにリストアップされます。
開発者は任意のPCGグラフをパレットに登録できます。パレットへの登録は、PCGグラフ側からの「自己申告式」となっており、PCGグラフエディタの詳細パネルで Tool Data > Is Preset にチェックを入れ、 Tool Data > Compatible Tool Tags 配列に対応するツールタグを登録することで完了します。
PCGグラフインスタンスのパレット登録
パレットへの登録はPCGグラフだけでなく、PCGグラフインスタンスで行うこともできます。「フェンス設置ツール」「植林ツール」のように具体的なパラメータやメッシュが登録された状態のグラフを、まさにプリセットとしてパレットに登録できますので、かなりの効率が期待できます。積極的に利用しましょう。
ただし、PCGグラフインスタンスからはIs Presetをオーバーライドすることはできても、Compatible Tool Tags を編集できない点に注意してください。Compatible Tool Tags はグラフロジックの特性として大元たるグラフ側で設定しておく必要があります。
ツールデータの取得
ツールで引いたスプラインや、ペイントツールで塗布したポイント情報などは、対応する入力ノードを通じてPCGグラフで取得します。
このうち、DrawSplineTool、DrawSurfaceToolでは引いたスプラインがSplineコンポーネントとして保存され、VolumeToolでは設置したボリュームはBoxComponentとして保存される仕組みとなっているため、PCGの経験のある開発者であればいつも通りのやり方(Get Spline DataやSurface Sampler)でデータにアクセスできます。
一方、ペイントツールで塗布したポイント情報は少し特殊で、UE5.7で新たに追加されたPCGコンポーネントのプロパティ「ToolDataContainer」に直接格納される実装となっています。
PCGグラフ側では、Tool Data Containerに格納されたデータを取り出す専用ノード「Get Tool Data」を通じて、この点群を取得できます。
Get Tool Data ノードの取得設定(Data Retrieval Settings)と合致する「Working Data Identifier」を持つデータ(ここではポイント情報)がゲットできるという仕組みです。Working Data Identifierは{ToolTag}.{PaintLayer}というフォーマットで記述されます。
実際には、Get Tool DataノードのData Retrieval SettingsからWorking Data Identifierが決まる仕組みになっているため、Identifierを合わせる意識を持つ必要はありません。ツール側が自動的に合わせてくれると考えておけばよいです。
ただし、グラフ側で Get Tool Data のData Instance名を途中で変更してしまうと、既存の Tool Data Container のWorking Data Identifierと一致しなくなり、データを読みだせなくなります。このときだけは手で Working Data Identifier を変更して回る必要がありますので、頭の片隅に置いておいてください。
(注:また、ToolTagは自由命名ではなく、対応させるツールのツールタグと一致させる必要があります)
なお、複数の Get Tool Data ノード(正確には複数の Data Instance 識別子)をもつツールグラフをPaintToolで扱うと、ツール設定で点群の書き込み先を選択できるようになります。この特性は標準のプリセットツールグラフである LayeredPlaceTool で利用されています。
複数ツール互換グラフ
以上の特性を理解すると、複数のツールに互換性をもつPCGグラフを記述できるようになります。たとえば、標準ツールグラフのScatterToolは、PaintツールとVolumeツールの両方に対応しています。
実装方法は比較的シンプルで、
PaintToolから流し込まれた情報をSurface Samplerの結果とGatherで合流させるだけの内容となっています。
このような複数ツールに対応したツールグラフは、1つのグラフで複数の使い方をカバーできるだけでなく、スプラインとポイントの合わせ技で動くグラフをPCGエディタツールモードで効率よく編集できるという利点をもちます。
以上、エディタツールモードのカスタマイズについて、公式ドキュメントでカバーされていない範囲をいくつか説明しました。まずはPCGグラフインスタンスのプリセット登録から開始し、ペイントツールに対応したグラフを作り、徐々に使い勝手を上げていけるとよいと思います。究極的には独自のインタラクティブツールを開発することになるかもしれませんが、現時点ではエンジン改造が必要な点に注意です。







