>   >  Luminous Engineが目指す、自然で効率的なオープンワールド構築〜CEDEC 2020(3)
Luminous Engineが目指す、自然で効率的なオープンワールド構築〜CEDEC 2020(3)

Luminous Engineが目指す、自然で効率的なオープンワールド構築〜CEDEC 2020(3)

<4>よりシンプルな操作でより複雑な結果を

続いて、過去に『FINAL FANTASY XV WINDOWS EDITION』のプラットフォーム対応やマウス・キーボード対応などを担当してきたプログラマー・濵野翔平氏がLuminous Engine World Editor実装の背景を解説。「よりシンプルな操作でより複雑な結果を」というポリシーのもと開発が進められたという。

プロシージャルのネットワーク自体は、テクニックを組み込んでいくにつれ複雑なものになっていくが、レベル作業のアーティストは細かいことを気にすることなく「良い感じ」に配置されていれば良い。細かく指定したいパラメータ調整も、複雑なノードネットワークを開かずとも簡単に調整できる工夫が実装されている。

■データ作成のワークフロー

まずは何もない空間からプロシージャル処理で配置データが作成されるまでのワークフローを紹介。範囲指定し、プロシージャル処理を進めると地形が出現する。そこから徐々に配置が計算されていく。さらにカーブを引いたり、植生をペイントしたり任意の場所を編集することもできる。

 プロシージャル定義
(TAやEnvアーティストが事前に用意)
 ↓
 レベル上にゲームオブジェクトとして配置
(最低限必要なプロパティはネットワークのパスとプロシージャルの適用範囲)
 ↓
 パラメータ編集
(実機上で編集。編集した結果がリアルタイムに反映される)
 ↓
 出力ファイル更新

レベル作業者が編集するのはプロシージャルの入力データであり、出力データ(配置データ)ではない。作業中は結果をその場で確認しながら作業でき、確認用の出力ファイルを待つ必要がない。配置データは専用サーバで定期的にビルドされる。複数人が同時に同じ場所で作業するコンフリクト回避が行われ、特定の領域をすぐにビルドできるようリクエストできる機能もあるという。

■基本ツール

実機上で編集する基本ツールは、スカルプトツール、ペイントツール、カーブツールの3つ。

スカルプトツールは、地形を上げ下げしたり、範囲内を平らにしたり、滑らかにする処理ができる。変更した地形に追従し、勾配によって配置されるアセットが切り替わったりする。ペイントツールは、1つ1つのアセットを指定してアセットを配置するのではなく、エリアのIDをペイントするようなツール。カーブツールは、道路など左右幅が同じものは1本描くだけで十分で、川のような左右で幅を細かく調整したい場合は、マルチカーブデータを利用し細かく編集することも可能。ここで編集したデータはスカルプトデータ、ペイントデータ、カーブデータとしてネットワークをながれていく。ツールを組み合わせるのも容易だ。

▲マスクをペイントした位置にカーブをつくり、マテリアルを変更してカーブの領域にアセットを追加して畦道をつくる

■カスタムパラメータ

複雑に組まれたネットワークのうち、スカルプト、ペイント、カーブの3つだけで満足なデータがつくり出せるかというとそうではない。数値やリソースの情報など様々な情報が組み込まれており、ネットワークの外から指定できるパラメータとして扱った方が便利なものもあり、カスタムパラメータというしくみが実装された。

ノードネットワークの処理は同じだが1箇所のみパラメータが異なるといった、あるネットワークを別のエリアに適応したい場合、コピーを用意するのは無駄が多く、メンテナンスコストも高くなってしまう。そこで同じネットワークを使い回す方法を考えた。

▲Exposeパラメータというネットワークの外部から値を上書きできるようにし、バリエーションをもたせることができるようになった。カーブの編集時にも、カーブを地面に吸着させるなど座標以外のパラメータ編集が可能

■レイヤーデータ

同じエリアに対して、花のペイント用、木のペイント用のネットワークがあるところに第3のマスクを使って岩を追加したい場合、Exposeパラメータではモデルを差し替えたり、生成数を変えたりはできるが、基となる入力データそのものを新規に追加することはできない。コピーして増やすことはできるが、無駄やメンテナンスコストが高くなる。そこで、ネットワークにレイヤーという概念を追加し、ながれるデータを多階層的に処理できるようにした。

▲パラメータの異なる部分についてはメタデータ化し、メタデータ単位でデータを追加したり編集したりできる。ノードネットワークの編集なしで、新しいデータを追加することが可能になった

<5>発展性を重視した実装

ノードを組み合わせて処理を行うフレームワークをいかに実装していったのか、プログラムセクションのディレクター岩崎 浩氏から解説された。Luminous Engine World Editorが目指したのは「発展性」、中でも重視したのは次の3点とのこと。

●応用のしやすさ
●拡張のしやすさ
●メンテのしやすさ

そのために「単純さを保つ」。「単純な入力に単純な処理をすると複雑そうに見える結果が得られる」ことを目指したという。

例えば、アーティストが地形を上げ下げする操作は、実はマスクのデータを上げ下げすることで目的の出力結果を得ている。そのため、対応するマスクのデータを変更すれば、地形を上げ下げするツールを木を描くツールに応用することも可能というわけだ。

こういった構造にした目的は「エディタと結果を分離する」ことだという。

「入力、演算、出力には様々な種類があり、これらのバリエーションが重要です。バリエーションの多さは表現力や応用力につながってくるため、これらを無理にシンプルにする必要はありません」(岩崎氏)。では「単純さを保つ」にはどこをシンプルにするかというと「間をながれるデータ」であるという。扱うデータが単純であれば全体の単純さを維持できるのがその理由とした。

間をながれるデータは、マスクとポイントクラウドの2種類のみに限定。

▲マスク:画像のようなデータ。座標から値が決まる。データの総数はない(解像度の概念はない)/ポイントクラウド:構造体の配列みたいなデータ(テーブルのデータ)、インデックスから値が決まる。データの総数あり。このマスクとポイントクラウドで全ての表現をすることが可能

最後に、Luminous Engine World Editorでは「マスクとポイントクラウドの組み合わせで多くの表現を可能にし、プロシージャル処理をオープンにすることで、アーティストが意思をもって自動配置することができるようになった」と締め括られた。

特集