[GDC 2017]「Forza Horizon 3」の美しすぎる空はどのように作られたのか
最近のゲームでのグラフィックスがフォトリアルになっているのは皆さんご存じのことだろうが,とくに自動車はCGと親和性が高く,スクリーンショットを見て実写と判別するのがだんだん難しくなってきている。とくに近年は自動車以外の部分の画質改善が目覚しい感じだ。
2016年9月に3作めが発売された「Forza Horizon」はForzaシリーズのスピンアウト作品ながら,本編に並ぶくらいの人気を博しているシリーズだ。ストイックにサーキットを走るMotor Sportに対し,世界各地の公道を走るHorizonでは景観も見どころの一つであり,とくにHorizon 3では空の表現が劇的に改善されている。今回の講演は,ますますフォトリアルになっていくクルマゲーを構成する要素から「空」をピックアップして語るものとなっていた。
その冒頭で提示されたのは,次のムービーだ。
ということで,上の動画を「もうかなり実写レベルに近づいてるよね」と上から目線で見ていた人には悲しいお知らせがある。
悲報「Forzaさん実写だった」
GDCの壇上でシリーズの展開を説明していたJamie Wood氏は,このシリーズにとって空がいかに重要な役割を占めているかを語った。クルマ,道,空がHorizonでの3大要素となるという。
氏は,いかに空に対して力を尽くしていたのかの例として,Forza Horizon 2の空の映像を流しつつ,この映像を実現した技術,すなわち大気シミュレーションを行って,128個のパラメータで云々と,その努力をアピールしていた。
しかし,続いて表示されたのは実写での空の写真だった。まあ,なんというか,本物にはかなわない。大気シミュレーションはかなり難度の高い演算処理であり,実際の空を完全再現しようとすれば,それこそ地球シミュレータクラスの演算能力が必要になるだろう。
といった議論が行われたようだが,結局Horizon 3では実写データを扱うことが検討された。冬のイングランドで行われたというロケハンでは,朝から晩までひたすら空を撮影していたという。撮影地を決めるにあたっては,全方位でクリアな視界や大気汚染の少なさといった景観の条件とともにアクセスのしやすさやセキュリティなども考慮に入れて選定されている。
機材の写真を見ると,普通のデジイチを3台使っているようである。画角120度ちょっとで全周を狙う感じだ。露出は7段のブラケットでHDRデータを生成するとのこと。自動制御により撮影は30秒間隔で行うという。撮影時間を見ると20時間撮影しているので,カメラ1台あたり16800枚の撮影を行うというハードな撮影現場になっていたようだ(設置したら放っておくだけだが)。
画像は,1回の撮影でI.2TBくらいのデータになるという。これをなんとかして圧縮しなければならないわけだが,目標値は2GB以下であるとのこと。ディスク容量を考えるとこれでもまだ多いくらいかもしれないのだが,厳しい目標であるのは間違いない。
まずデータの加工である。色収差と歪み集さはレンズのプロファイルを使って補正し,全体的な色補正にはカラーマネジメントの専門企業X-Riteの製品が使われている。そのほかごみを取るなどの下処理をしておく。
次にノードベースの合成ツールNukeを使って,多段露出で撮影されたデータをHDRデータに統合する。3台のカメラで撮影されたデータをつなぎ合わせて1枚の全天周データにし,雲の部分は地の空の部分から分離してマスクデータも作成しておく。このあたりは手作業での工程が多く,1種類の空に対して,最大1か月かけているという。幸い,分業できる工程なので,外注なども使って乗り切ったようだ。
Horizon 2のシステムとHorizon 3のシステムの比較ムービーが流された。
Horizon 2のほうは前述のものと同じものだが,これはシステムでは雲をシミュレートしているので,ほぼ同じ雲の状態で太陽の位置を変えれば景観が変わっている。逆光状態の描写や影などを見ると雲の厚さを推定して処理をしていることが分かるだろう。実写ベースのHorizon 3では太陽の位置を動かすことはできないが,すべての太陽の位置で雲の状態を撮影してあるといった感じだ。技術的に見ればHorizon 2の方向性もすごいのだが,本物に近づくにはまだ道は遠いようだ。
光源の移動に対応していない代わりに,新しいシステムの目玉となるのは雲が動くことだ。1日中雲の動きを撮影していたのだから当然ではあるが,動的な雲は景観を彩ってくれる。
元画像の撮影感覚は30秒ごとなので,場合によっては適度に間をつなぐ必要がある。ではどうやって雲を動かすのかという問題だが,基本的に雲の流れは直線方向なので,それをベースに補間されている。このあたりでもNukeのベクトル生成機能が使われている。動きの生成自体は縮小された4分の1サイズで算出されており,それを実画像に適用する。かなり離散的なデータであり補間は難しいのだが,矛盾した動きを解くことがキーになると氏は述べている。
こうしてできた空の画像には,ゲーム実装時にさらに光学効果が加えられ,空にある太陽の位置を光源としてゲームのライティングを行われる。
また,空の画像自体をライトプローブとして使い,日陰や日向を表したり,間接光として使ったりといったことも行われている。もちろん車体にも映り込む。
デモムービーでは固定カメラのまま雲の動きに応じて地上に落ちた影が移動する様子などが示されていた。どちらかというと,レースゲームではなく,もっとゆったりしたゲームで楽しみたいフィーチャーかもしれない。
さて,Horizon 3での空の描写はHorizon 2とはまったく別方式になったわけだが,それまでに作っていたシステムが無駄になったわけではない。空の撮影は雨のときには行われていないのだが(機材が濡れるのはともかく,雨粒でまともな絵が撮れなくなるため),レース中には雨天になることもある。そこで天候システムなどはHorizon 2のシステムを統合して運用されているわけだ。
そこからのデータ処理に掛かった時間と手間は推して知るべしといったところだが,その甲斐のある出来栄えになっているのではないだろうか。考え付いても普通は誰もやりそうにないことを完全に達成したという意味でも面白い技術だといえるだろう。