
ファイナルファンタジーシリーズにて、大規模なオープンワールドをゲームデザインに組み込んだことで知られている『ファイナルファンタジーXV』。その制作スタッフらが設立したLuminous Productionsは、最新作に向けてオープンワールドの技術を研鑽し続けています。
CEDEC 2020では、 Luminous Productionsのスタッフが「オープンワールドを、自然に意思を持って埋める。 LUMINOUS ENGINEのプロシージャルへの取り組み」のセッションにて、オープンワールドを制作していく技術についてが語られました。
オープンワールドは広すぎて、高速化したエディタでも追いつかない!新しいエディタへの道のり
セッションでは最初に、現在Luminous Productionsが開発中のワールドエディタのデモを公開。自然豊かな風景が広がっており、これから開発されるオープンワールドについて期待させるものでしょう。

今回のエディタになる以前、『ファイナルファンタジーXV』ではオープンワールドがいかに作られていたかも解説されました。その時点でも地形をリアルタイムを作れる環境は構築されてたものの、編集コストはまだまだ高かったといいます。高速でマップを作れるようになっていても、ワールドマップ全部を制作するのはそれでも広すぎて追いつかないからとその理由を明かしました。
さらに、少し優れた機能を使おうにもブラックボックス化されており、拡張にはプログラマーに依頼する必要があったそう。地形が変わったときに再編集が必要になるなど、多くの手間がかかっていたと語られました。

なので、さらなる効率化を進めたオープンワールド制作のために、さまざまな機能を自動化したいという思いがあったといいます。
細やかな手でマップを編集するミクロな作業から、マップを自動生成するマクロな作業までフォローしたものに加え、さらに機能を拡張しやすく、応用しやすくするなどさらにオープンワールド制作を効率化したい考えがありました。
自然を描くためのプロシージャルなシステムとは

続いて環境アーティストの山本健斗氏が登壇し、ワールドエディタで取り組んだ「プロシージャルを使用した、オープンワールド制作」について解説されます。
主にプロシージャル機能により、花や森といった自然を、マップ上にてペイントで塗る形で生成していく機能についてが語られました。ここでは「プロシージャル植生」と呼ばれています。

プロシージャル植生について、マップ上に花畑をつくる例を用いて解説。各種ノイズマスクと地形テクスチャーを使用して、自然な花畑を作りだす仕組みです。
花畑を自然に見せるために、いくつかの工夫が為されています。通常のマスクでは、花同士が近づきあってしまい、不自然に見えてしまう問題がありました。そこでマスクにノイズをかけ合わせることにより、花畑の配置を自然に見せられるようになりました。


森の配置にも、自然に見せるための仕掛けがあります。まずマップで森を配置したい位置のマスクを取得し、そこにノイズやスロープといった処理を加え、最終的にアーティストの作成したマスクペイントを作成することで、木を配置するマスクを作成します。

続いて森を自然に配置する工夫について解説。先のマスクからだと、木の密集自体が不自然になってしまう問題が発生。そこで解決として木のポイントから取得し、ノイズなどを減算させることで森の植生を自然にするようにします。

さらに木のポイントから、マスクを生成。木のポイントマスクは、範囲拡大するなどうまく利用することで、自然な木々の配置などが可能になるといいます。
以上のマスクを利用したノードのネットワークを形成することで、様々な植生表現が可能に。作った風景をエンジン上でリアルタイムで確認できるようにすることで、非常に便利なエディタに仕上げているそうです。
しかしマスクベースによるリアルタイム表示をもってしても、まだプロシージャルに課題が残されています。そのひとつは部分的な対応に弱いこと。たとえば黄色い花畑に白い花が混ざってしまうような問題に対応しきれないといった例を挙げました。

そもそも、植生を形作るノードのネットワークを作成する難しさもあります。そこでネットワークからプロシージャル処理が入るプロセスにて、環境アーティスト側が編集することで、問題に対応したそうです。

ここではアーティストがマスクペイントで、森や草原といった各エリアを描くキーとなるマスクを上書きしていくという手法を取っています。

たとえば数多くのエリアマスクにおいて、森や花畑のマスクをオフにしたものでマップをペイントすることで、様々な地域に合わせたマップ作りが可能になるそうです。

さらに森エリアと土エリアを併用したり、マスクをブレンドしたり、マスクの塗り分けたりすることで、そのエリア専用の景色を生み出すことができるのです。

そのほか、マップのレイアウトと連携した開発手法も紹介されました。マップモデルのコリジョンからマスクを取得し、そこから土やいわば、森といった属性のキーマスクを取得。さらにその属性キーマスクとプロシージャル植生が組み合わせることで、細やかなマップ作りも可能になるといいます
山本氏は、この仕様により「アーティストのセンスと自動化を組み合わせることでマップ制作のクオリティが上がる」と語り、プロシージャル開発についてまとめました。
ツールをどのように用意し、使いやすくするか

さて山本氏の語った、「プロシージャル植生」をどのように構築されたのでしょうか? その内容について、プログラマーの浜野翔平氏(※ “浜”は旧字体表記)が登壇して解説します。
浜野氏は「レベル作業者目線」と前置きしながら、ワールドエディタが目指したものについて「よりシンプルな操作で、より複雑な結果を」と挙げています。
まずレベル作業をする全員が、ネットワークのノード処理を把握するのは大変なことを説明。ざっくりと「良い感じになっていればOK」で、細かいパラメーターも簡単に調整できることを目標としたそうです。

そんな目標を達成するための、データ作成におけるワークフローについて解説。まず必要なのはノードのネットワークのパスと、プロシージャルをゲーム内における適用範囲の座標でした。
続いて、プロシージャル植生に必要なマスクや、道づくりのために使うカーブなどのパラメータ編集については、リアルタイムに結果を確認、編集できるように仕上げたそうです。
そして最後に作業した結果である出力ファイルの更新です。編集しているのは、あくまでプロシージャルの入力データであって、出力データ(つまりマップに配置するデータ)ではないと説明。
配置データは専用のサーバーによって定期的にビルドしており、その理由はデータのコンフリクトを回避するほか、特定領域の即時ビルドリクエストもできるようにしたとのことです。
ではそうしたデータをどのように編集しているのでしょうか?続いてレベルデザイナーが使う、基本ツールについても解説についてもまとめていきます。


地形の高さをかえたりするスカルプトツールのほか、先ほど紹介した「プロシージャル植生」を実現するペイントツール、そして道を作ったり、複数のカーブから川を作ったりするカーブツールについて解説。以上のツールをネットワークに流しているそうです。
またツールの組み合わせについても紹介。カーブとペイントを組み合わせて、あぜ道をつくるなど、多様なマップ作りを実現しています。

この3つのツールをネットワークに実装したほか、外からパラメーターを調整する仕組みも導入。それがカスタムパラメータです。このネットワークは同じ処理で動いており。リソースや整数だけを変更したいと考えたとき、ネットワークを使いまわす方法にしたそう。

続いてはレイヤーデータについても解説。ひとつのグラフに同じようなネットワークが複数存在していることは無駄な処理が多くなるため、メンテナンスのコストが高くなったり、追加対応に弱い問題があったりします。
そこでグラフのネットワークにレイヤーという概念を導入しました。ネットワークをひとつにまとめ、多階層的な処理を実現。カスタムパラメータをメタデータとしてまとめ、レイヤーごとに追加するかたちに落とし込んだのです。
ワールドエディタはどのように処理をしているのか?
最後にLUMINOUS ENGINE開発にとりくんだプログラムセクションディレクターの岩崎浩氏が登壇。ワールドエディタの処理について解説します。
まずワールドエディタで目指したことは「発展性」だと一言で説明。応用や拡張、そしてメンテナンスのしやすさを考えていたそうです。処理の目標は、「単純なことを、単純な処理で、複雑そうに見える結果」を生み出すことでした。

例として、地形を変えるスカルプトツールの動画を見せます。これは地形自体のモデルを上げたり下げたりしているように見えますが、実は入力しているのはマスクのデータの変更でした。
つまりマスクデータを変更する入力を元に、内部で処理が行われ、モデルの高低差が変更される結果に出力される、という仕組みとなっていたのです。
主な入力がマスクのデータを変更するという構造なので、先ほどのプロシージャル植生のメカニズムで語られていたような、マスクのデータ自体を変えることで木や森の高低差を作ることもできる構造でもあると語られました。

岩崎氏は「実際にそんなふうに使うかは置いておくにしても」と前置きしながら、「マスクのデータを変更する入力」を応用した例も紹介。たとえばカーブエディタを使って地形モデルを変更することにも使えると説明。

なぜこんなふうに、入力をマスク変更にしたのかというと、その目的は「エディタと結果を分離」することだと説明。ワールドエディタとはマップを作るアーティストやレベルデザイナーの入力に特化し、シンプルに使いやすくしたい意図があり、これが先ほど語られた「単純さ」を目指した結果なのでしょう。
岩崎氏は「単純さ」のあるエディタにするための演算や処理について紹介し、今回のワールドエディタについてのセッションをまとめました。
このように、元『ファイナルファンタジーXV』の広大なオープンワールドに取り組んだメンバーは、今あらたにワールドエディタを改良し、次のオープンワールド『PROJECT ATHIA』に取り組んでいるようです。あらたなオープンワールドがどのような世界になるかの期待を持てるセッションとなりました。