イベント
[GDC 2019]「Serious Sam 4」は地形生成にハンドメイドとプロシージャル技術を組み合わせたハイブリッド技法を採用
本稿ではこの中から「Serious Sam 4: Planet Badass」(以下,SeriousSam 4)の地形レンダリングを取り扱った「Advanced Graphics Techniques Tutorial: Four Million Acres, Seriously: GPU-Based Procedural Terrains in 'Serious Sam 4: Planet Badass'」(Serious Sam 4: Planet Badassにおける400万エーカーのGPUベースのプロシージャル地形生成技術)をレポートしたいと思う。登壇したのは,同作の開発を担当したゲーム開発スタジオCroteamでCTOを務めるAlen Ladavac(アレン・ラダヴァック)氏だ。
まずは,実際にセッション中にも流されたSeriousSam 4の公式プロモーション映像再生してみてほしい。
この映像からも,本作はとてつもなく広大な地形表現を実現できていることが感じ取れるのではないだろうか。この広大な地形表現をどのように実装したのか,その種明かしを行ったのが,このセッションでである。
まず語られたのはこの地形表現のグラフィックス仕様だ。
Ladavac氏によれば,本作では取り扱うゲーム世界は128×128km四方となったそうで,かなり規模が大きい。
地形表現用のテクスチャは,最高精度表現では1mあたり1024テクセルを割り当てており,1ピクセルが1mm×1mmに割り当てられるイメージだ。地形の凹凸解像度(Elevation Detail)は,1mあたり64頂点程度。つまり,分解能としては1ポリゴンの一辺が約1.5cm程度のイメージとなる。ジオメトリおよびテクスチャの分解能は相応に高いと言える。
いきなりだが,ここで余談。Ladavac氏のスライドでは距離の表現128「km」が128「kim」となっているが,これは本作におけるプログラム上では1kmを103mではなく,210(=1024)mとして扱っているためだ。同様にmmもmimと表記されている点に留意したいが,一般読者ならとくに意識をしなくても問題ないだろう。
さて,上記の仕様でそのまま地形を制作してデータ化すると,1mあたり64頂点だと,128×128kmの地形データは,約800万×800万頂点のポリゴンで表現され,総頂点数は約640億となる。ポリゴンデータに換算した場合の総データ量は100TBになる見積もりだ。
ちなみに,分解能を下げて1mあたり1頂点にしたとしても,総データ量は約32GBになるとのことなので,アクションゲーム向けの地形データとしては,これでも大きすぎるという判断になったようだ。
いっそのこと,ランタイムでリアルタイムにプロシージャル生成する方法も実験してみたが,今度は品質やパフォーマンスの面で納得がいかなかったとLadavac氏。
そこで,128×128kmの地形を階層構造で表現するデータ構造とし,実際のランタイムでの描画では,事前モデリングした地形構成パーツ(草木,岩石など)と,要所要所をプロシージャル生成した地形パーツを組み合わせて作っているという,「手動デザイン」と「プロシージャル生成」の両方を織り交ぜたハイブリッド手法の実現を目指すこととなったという。
まず,128×128km(※ただし1km=1024mとする)の地形において,これを最も粗い分解能である4096×4096テクセルへ割り当てる。すると,
128×1024÷4096=32
となる。1テクセルで32×32mのタイルを最も粗い分解能の地形データとして地形情報を表現するわけだ。以下,各解像度のタイルを地形タイルと表記する。
このとき,最も分解能の細かい地形タイルは1枚あたり25×25cmで表現される。つまり地形タイルは32×32mの粗さから25×25cmの細かさまでの階層構造で地形データを表現することとなる。この地形タイルは最も細かい分解能では33×33頂点,すなわち32×32ポリゴンで構成される。
この階層構造の実装にあたっては4分木構造(1要素が最大4要素の子ノードを持つことができる木構造:Quadtree)が採用されている。そして各ノード(≒地形タイル)は凹凸情報,植物の植生情報,テクスチャとしてのアルベド情報などのマテリアル情報を持っている。
この「テクスチャとしてのアルベド情報」は,その地形タイルが,視点から見て最も遠方になったときに,そのまま描画される「色」の情報となる。例えば,その地形タイルが森の一部だった場合は濃い緑色あたりが「テクスチャとしてのアルべド情報」として表現されるわけである。
この地形タイルが視点から近ければ,ちゃんと実体のある樹木がその位置に生成されたり,草が生やされたり,斜面として生成されたりして描画されるが,視点から超遠方にあれば,平坦な「濃い緑」色の1ピクセルとして描画される。超遠方になると32×32mという比較的大きな領域であっても1ピクセルサイズまでに小さくなってしまい,立体物としての木として描画するまでもないからだ。
この手法で地形データを取りまとめてみたところ,総データ量は約200MBとなり,この程度あれば(HDDから必要に応じて読み出す必要もなく)オンメモリで置いておくことができる。
前述したように地形タイルは複数のマテリアルデータを持つことができる仕様となっており,植物の植生情報はもちろん,砂,草地,土,岩肌,雪といった情報を持つことができる。また,異なるマテリアル同士が重なり合うことにも対応する。
また,地形タイルは凹凸情報を持つことができるので,単なる斜面だけでなく,複数の周波数のノイズが畳み込まれた算術ノイズ(※パーリンノイズなど)を種にして垂直および水平方向の凹凸表現にも対応できる。
垂直方向の凹凸表現というのは,いわば直上の空に向かって凹凸を生成するもの。水平方向の凹凸というのは例えば「張り出した崖」や「えぐられた浅い凹み(横方向の穴)」のような凹凸だ。
この地形の凹凸表現は,視点から比較的近い位置では実際にポリゴンの組み合わせで表現される凹凸として描画されるが,視点から遠くなると,法線マップによるバンプマッピングに置き換わる。実に手が込んでいる。
マテリアルデータは石畳や畑,そのほかの人間の手が入った人工物の埋め込みにも対応する。さらにフォトグラメトリで生成したテクスチャを貼り付けるような複雑な形状のオブジェクトも埋め込める。そうしたマテリアルは,アルベド,法線,鏡面反射率などのパラメータを持つことになる。
凝りに凝った樹木の生成システム
草木などの植物は,地形タイルごとに設定されている植生データに基づいてランタイム上でリアルタイム生成される。
植生データとは「どの種類の植物」が「どの向き」で「どのくらいの位置」に「何色」で生えているかなどテクセル単位でを示すものだ。「どの向き」というのは,回転を意味している。現実世界の樹木は1本1本が個別の形状をしているが,ゲームではさすがに数万本の樹木をモデリングするわけもいかないので,ハンドモデリングした樹木モデルを数バリエーション用意しておき,向きを変えて植えることで形状バリエーションがいっぱいあるかのように見せているわけだ。
1本の木を,前から見たときと左から見たときとでは形状が違って見えるのは想像がつくと思うが,それをランタイム時の植え込みの際に処理するわけである。
上で,はるか遠方の地形タイルは1ピクセルで描画されてしまうこともあると述べたが,同様に樹木を3Dモデルとして描くのは視点から近いものだけで十分だ。
本作では,ある程度距離の離れた位置にある樹木は,ビルボード(いわゆる2Dスプライト。スライドではImposter:ニセモノ)描画を行う。3Dモデルとしてモデリングされた樹木をテクスチャマップとして生成しておき,これをポリゴンに貼り付けて,プレイヤー(視点)に向けて描画するのだ。
Ladavac氏は,3Dモデルの樹木を8方向から描画したテクスチャを事前に生成しておき,プレイヤーからその樹木を見たときの角度に一番近い二つの角度バリエーションを選択し,それらをブレンドして描画していると説明していた。この手の手法は,注意深く見るとビルボードから実体3Dモデルへと描画が切り替わるタイミングに気が付くが(いわゆるポッピング現象),樹木が立ち並ぶ森の中であればほとんどポッピングは知覚されないとのことである。
というのも,確かに2Dのビルボードに描画されるフェイクな樹木ではあるのだが,各樹木のビルボードは深度情報,自己遮蔽情報,法線情報,表面下散乱材質情報などを含むため,実体3Dモデルには及ばないまでも,それに近いレベルのライティング,影生成が適用されるためだ。そう,ビルボードの中の2D樹木は,「元の3Dモデルと同等」とまではいかないものの,太陽光の向きに応じた陰影やセルフシャドウまでが再現されるのである。
こうして見てくると,本作の地形設計と実装のアプローチは「手を掛けて制作したい部分はハンドメイドで」「そこまで手を掛けなくてもよいところはプロシージャル技術で」というアプローチになっており,プロシージャル技術を作業効率アップやデータ効率改善のために使っていることが見えてくる。
おそらくこの制作スタイルが,現在のプロシージャル技術でちょうどよい使い方なのではないだろうか。
本作は,開発開始のアナウンスが行われたのが2013年で,その開発期間はかなりの長期にわたっている。2019年3月時点でも発売日は未定となっているだけに,このまま本当に完成するのかがちょっと不安なところもあるが,今回の発表は,ある意味,順調に開発が進んでいることの中間報告にもなっており,ファンはちょっと安心したのではないだろうか。
ただ,セッション中,「今のところはこういう仕様になっているが,完成版はそのままとなるかはまだ分からない」というような言い回しが何度かあったので,すぐに完成するという感じもしないのが気になるところだ。ファンは開発チームを信じて,とにかく完成を待つことにしよう。
「Serious Sam 4: Planet Badass」公式サイト
- 関連タイトル:
Serious Sam 4
- この記事のURL:
(C)2020 Croteam. All Rights Reserved.