![]() |
本稿ではその中から,ポリフォニーデジタルによる「Realistic Real-Time Sky Dome Rendering in 'Gran Turismo 7'」を取り上げたい。講演を担当したのは,同社の鈴木健太郎氏と,安冨健一郎氏とである。
![]() 鈴木健太郎氏(グラフィックスチーム リードエンジニア,ポリフォニー・デジタル) |
![]() 安冨健一郎氏(福岡アトリエ グラフィックスチーム テクニカルアーティスト,ポリフォニー・デジタル) |
講演のおおまかな内容は,GT7で実装した「空の情景」(天球)を生成するシステムについての技術解説である。興味深い話題が満載であったものの,今回は講演の中から,比較的理解しやすいテーマである「リアルタイム雲生成」のパートのみを取り上げたい。
リアルタイムに3DモデリングしているGT7の雲
GT7の空には,時間経過とともに形を変える,立体的でリアルな雲が描かれている。しかも,太陽光が密度の低い雲を透過する様子や,重なった雲がほかの雲に影を落とす様子も描かれているので,リアリティは相当に高い。
GT7における雲生成は,ゲーム実行中にリアルタイムで生成しているそうだ。
現実の雲には様々な形をしているが,GT7では,とくに「積雲」(Cumulus)に限定して生成したという。雲のモデリングは,いわゆるプロシージャル生成的なアプローチを採用しており,「タネ」ともいえる3種類のテクスチャをもとに生成している。
![]() |
まず,2Dテクスチャの「Cumulus Map」は,いうなれば「水蒸気の密度」を表したもので,積雲の初期形状のようなものだ。Cumulus Mapは,わずか256×256テクセルの2Dテクスチャだが,240×240kmの地上をカバーする積雲分布図に相当する。
GT7には天候システムがあり,晴れやくもり,雨といった天気の変化もある。Cumulus Mapは,天気ごとに初期状態が違うようだ。また,GT7の天気システムには風の概念があるので,Cumulus Mapは,風によって変移(移流)しながら形を変えていく。
![]() |
次の低周波ノイズテクスチャは,128×128テクセル×128レイヤーの3Dテクスチャで,1辺あたり5kmスケールの正方形である。ノイズ自体は「Perlin-Inverted Worley noise」(逆Perlin-Worleyノイズ)をもとに,雲らしい雲ができるように手動でチューニングしているとのこと。GT7で大きな雲の周りにできる小さなちぎれ雲は,低周波ノイズのチューニングによるものらしい。
![]() |
一方の高周波ノイズテクスチャは,32×32テクセル×32レイヤーの3Dテクスチャで,1辺あたりは300mの縮尺となっている。ノイズ自体はWorleyノイズをベースとしているそうで,生成した積雲の輪郭付近に見えるごちゃごちゃした高周波なディテール生成に,大きく貢献するテクスチャだ。
![]() |
そのほかにも中周波ノイズテクスチャを用いているそうだが,これは,低周波ノイズを4分の1に縮小して再利用しているそうだ。
![]() |
最後のCoverage Textureは,2Dテクスチャだが,関数的な役割を果たすテクスチャである。解像度は256×128テクセルで,各テクセルには,事前に計算した値が仕込まれているという。
Cumulus Mapは,水蒸気密度に相当する2Dテクスチャだが,Cumulus Mapから取りだした値をCoverage Textureの横軸座標値としたうえで,生成する積雲の高度値(Altitude)を,Coverage Textureの縦軸座標値として与えて,内容値を作り出す。この値は,「積雲の各高度における水蒸気密度」に相当するので,256×256テクセルの2DテクスチャであるCumulus Mapに高度軸が加わる。これにより,各テクセル値に水蒸気密度の情報が加わるので,3次元的な水蒸気密度を持った立体の積雲(群)を構成するボリュメトリックデータに変身するわけだ。
解像度についてはとくに言及はなかったが,この時点で積雲群(の分布)は,256×256×128ボクセルのボリュメトリックデータになっていると思われる。
![]() |
そのうえで,積雲の各高度に対して,ディテールを付与する意味で,3Dテクスチャである低周波/中周波/高周波の各ノイズテクスチャをかけ合わせる。この時点での積雲は,まだ「立体的な水蒸気の密度分布データ」にすぎず,まだ描画はしていない。
仮定として,Cumulus Map×Coverage Textureだけで作った積雲と,低周波/中周波/高周波の各ノイズテクスチャまでかけ合わせた積雲を描画した場合の画像を次に示そう。リアリティが全然違うことが分かるだろう。
![]() |
![]() |
GT7における雲のライティング手法
ここまでで,雲の形状は決定した。続いてはライティングだ。
鈴木氏によれば,「既存の手法と同じく,レイマーチングを用いている」とのことであった。
ここでいうレイマーチングとは,積雲の水蒸気密度分布データに向けてレイを投げて,積雲を突き抜けるまでにどのくらいの水蒸気と衝突したかを積分して雲の濃淡を決定したり,レイと水蒸気の衝突点から太陽(=光源)に向かってレイを投げて,雲にどれくらいの陽光が届いているかなどを算出したりすることで,雲のライティングを行うことに相当する。ちなみに,一般的にはレイトレーシング用ハードウェアは使わずに,Compute Shaderを駆使して処理することが多い。
![]() |
GT7のみならず,一般的なゲームでは,空や雲は無限遠に存在すると仮定しているので,レイマーチングによる雲のライティング結果は,ドーム型の半球とみなしたバッファに出力する。
ただ鈴木氏によると,レイマーチングの処理負荷が高いことから,複数フレーム時間にまたがって処理を進める実装を採用したとのこと。雲のライティングにおける途中演算経過を記録するバッファとして「Cloud G-buffer」の概念を導入したそうだ。
![]() |
GT7のCloud G-bufferは,「無限遠にある半球状の空に浮かぶ雲」という想定である。ただ,実装の都合上,Cloud G-bufferを複数の正方形テクスチャに割り当てたうえで,ライティングの途中結果を要素ごとに分解して収納する実装としたそうだ。
![]() |
なお,Cloud G-bufferの解像度は,PlayStation 4版が768×768テクセル,PlayStation 5版では1024×1024テクセルとなっている。
![]() |
GT7の場合,空模様はメインのレース画面だけでなく,バックミラーや静的な映り込み用環境マップ,環境光ライティングなど,さまざまな用途(≒多様な視点やアングル)で活用する。要素ごとに分解したCloud G-bufferのほうが,用途に応じた雲情景を個別に生成しやすいという事情もあるようだ。
![]() |
Cloud G-bufferは,4種類の要素からなる。
![]() |
「Opacity to the background(sky)」は,空(天球)に対する透過率を表したもので,具体的には雲の後ろに空がどのくらい透けて見えるかのパラメータになる。レイマーチングでこれを計算したうえで,Cloud G-bufferに出力するわけだ。
次の「Distance to clouds」は,原点となる世界の中心座標から最も近い雲までの距離である。
「Lighting by the Sun(In-Scatter)」は,太陽によるライティング結果に相当するものだ。
4つめの「Ambient Lighting」は,雲のさらに奥にある天球(空)全体で雲を照らす「環境光」に相当するものになる。鈴木氏によると,かなり作為的なものになっているそうで,「もう少しチューニングしていくべきだと考えている」と述べていた。
1回のレイマーチングによって得られたライティング結果は,光が水蒸気に衝突して1回だけ散乱したライティング演算を行ったに過ぎない。つまり,リアルな雲の陰影を求めたいのであれば,レイマーチングによるライティング計算を何度も行うべきだ。とはいっても,1回のレイマーチングでも重い処理系なので,これを1度にたくさん行うなどできるわけがない。
そこで,4種類のCloud G-bufferは,ゲームのフレームレートとは非同期に,ゆったりとしたペースで複数フレーム分の時間を消費して更新する実装としている。いうなれば,遅延をともなうライティング処理系である。
![]() |
![]() |
ちなみに,各ピクセルの単一サンプルを計算するために使用するフレーム数は,PS4で64フレーム,PS5では32フレームとなっている。また,1ピクセルあたりの平均サンプル数は,PS4が5サンプル,PS5では10サンプルとなっているそうだ。
![]() |
![]() |
GT7の雲生成システムでは,雲がほかの雲に落とす影も表現している。
鈴木氏によると,先述したボリュメトリックデータ化した積雲群のコピーとも言える,同等の構造を持った別のボリュメトリックデータにある各ボクセルから,太陽の位置までのレイマーチングを行って求めた「太陽光の透過率」パラメータから生成しているそうだ。
![]() |
![]() |
最終的には,半球形状の2D画像となるGT7の雲描画は,かなり簡略化しているとはいえ,パイプライン的には水蒸気の密度情報からボリュメトリックレンダリング風の処理系で生成しているので,ここまでリアルに見えるのだ。
GT7でリプレイを鑑賞をするときには,ぜひとも雲の表現にも注目してほしい。雲ひとつひとつに,こんな技術を活用しているのかと,感心したくなるはずだ。


















![画像ギャラリー No.002のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/002.jpg)
![画像ギャラリー No.004のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/004.jpg)
![画像ギャラリー No.003のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/003.jpg)
![画像ギャラリー No.005のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/005.jpg)
![画像ギャラリー No.006のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/006.jpg)
![画像ギャラリー No.007のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/007.jpg)
![画像ギャラリー No.008のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/008.jpg)
![画像ギャラリー No.009のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/009.jpg)
![画像ギャラリー No.010のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/010.jpg)
![画像ギャラリー No.011のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/011.jpg)
![画像ギャラリー No.012のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/012.jpg)
![画像ギャラリー No.013のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/013.jpg)
![画像ギャラリー No.014のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/014.jpg)
![画像ギャラリー No.015のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/015.jpg)
![画像ギャラリー No.016のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/016.jpg)
![画像ギャラリー No.017のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/017.jpg)
![画像ギャラリー No.018のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/018.jpg)
![画像ギャラリー No.019のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/019.jpg)
![画像ギャラリー No.020のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/020.jpg)
![画像ギャラリー No.021のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/021.jpg)
![画像ギャラリー No.022のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/022.jpg)
![画像ギャラリー No.023のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/023.jpg)
![画像ギャラリー No.024のサムネイル画像 / [GDC 2023]「グランツーリスモ7」でリアルな雲を表現したリアルタイム雲生成の秘密](/games/512/G051215/20230322092/TN/024.jpg)
