ゲーム

人気都市開発シムの続編として待望の登場を果たした「Cities: Skylines 2」はなぜこれだけパフォーマンスが悪いのかをエンジニアが分析


Cities: Skylinesの続編となる都市開発シミュレーションゲーム「Cities: Skylines 2」が、2023年10月25日に発売されました。人気都市開発シミュレーションの正式続編ということで期待されていたCities: Skylines 2ですが、Steamでのレビューは記事作成時点で2万件以上投稿されているものの「賛否両論」となっており、バグを含む複数の問題が指摘されています。そんなCities: Skylines 2のパフォーマンスがなぜ一定の水準に達していないのかを、エンジニアのパーヴォさんが分析しました。

Why Cities: Skylines 2 performs poorly - paavohtl's blog
https://blog.paavo.me/cities-skylines-2-performance/


Cities: Skylines 2の出来栄えについては、発売の1カ月前のタイミングで最低システム要件が引き上げられたり、コンソール版のリリース日程が2024年に延期されたりという不吉な兆候があって、発売前から明らかだったそうです。

また、発売前のタイミングでYouTuberや配信者に対してゲームのアーリーアクセス版が提供されましたが、ゲームのパフォーマンスに関するレビューなどは禁止されていました。発売前のゲームではリリース直前のタイミングでパフォーマンスの最適化やその他の修正が行われるケースが頻繁にあるため、この種の制限が課されるのは例外的なことではないものの「良い兆候でもない」とパーヴォさんは指摘しています。


さらに、Cities: Skylines 2の開発元であるColossal Orderはゲームのパフォーマンスの低さに対する謝罪声明を発売1週間前のタイミングで発表しており、「出来の悪さ」は開発元も認めるところだったことがうかがえます。

Updates on Modding and Performance for Cities: Skylines II | Paradox Interactive Forums
https://forum.paradoxplaza.com/forum/threads/updates-on-modding-and-performance-for-cities-skylines-ii.1601865/


そんなひと波乱あった後に発売されたCities: Skylines 2ですが、ゲームプレイ時のフレームレートが安定しないという問題を抱えています。この種の都市開発シミュレーションでは高いフレームレートで動作するのが難しいケースはままあるそうですが、Cities: Skylines 2の場合は「ほとんどの状況でGPUに過剰に負荷をかけるため」と、理由が他とは微妙に異なる模様。前作のCities: Skylinesを含め、ほとんどのシミュレーションゲームはCPUに多くの負荷をかけるような設計になっており、GPUに高い負荷をかけるシミュレーションゲームはかなり珍しい部類に入るそうです。

GPUに高い負荷がかかるとはいえ、Cities: Skylines 2のグラフィックが非常に優れているというわけでもありません。確かに前作のCities: Skylinesと比べれば大幅なアップグレードがみられるものの、競合タイトルのAnno 1800(2019年リリース)などと比べるとグラフィックは明らかに劣っており、それにもかかわらずフレームレートが異様に低下してしまうというのは「非常に不可解」とパーヴォさん。

また、Cities: Skylines 2では1000~2000ユーロ(約16~32万円)程度のグラフィックカードを使ってようやく1080p・60fpsでのゲームプレイが可能になるそうです。しかし、ほぼ同時期にリリースされた非常に精細なグラフィックで知られるAlan Wake 2の場合、パストレースを含むすべてのグラフィック設定を有効にしたままであっても、同じグラフィックカード・同じフレームレート(60fps)で解像度1440pで難なくゲームをプレイできます。これはCities: Skylines 2のシステム要求が異様に厳しいことを示す良い例であると、パーヴォさんは指摘。

実際、パーヴォさんはグラフィックカードにNVIDIAのRTX3080、CPUにAMDのRyzen 7 5800X、モニターに5120×1440ピクセルのスーパーウルトラワイドモニターを使用した「ミドルスペックのゲーミングPC」でCities: Skylines 2をプレイしたそうですが、ゲームの起動画面の時点でGPUの使用率が100%でありながら、フレームレートは7fpsと異様に低かったそうです。パーヴォさんは設定から被写界深度・モーションブラー・ボリュームエフェクトなどを無効化し、ようやくフレームレートを90fpsまで戻すことに成功したとしています。


Cities: Skylines 2はUnityで制作されているため、.NET逆コンパイラを使うことで簡単にゲームを逆コンパイルすることができる模様。パーヴォさんはdotPeekを使ってコードを分析したそうですが、静的分析ではゲームのレンダリングパフォーマンスのどこに問題があるのかは、具体的には何もわからなかったそうです。そこで、ゲーム画面のレンダリングで何か問題が起きていると推察したパーヴォさんは、オープンソースのグラフィックデバッガーであるRenderdocを使用しています。

Renderdocによると、Cities: Skylines 2は1フレームをレンダリングするのに約87.8ミリ秒もかかっており、これによりフレームレートが平均11.4fpsになってしまっていたそうです。


この他、レンダリング時に出力される数字をRenderdocでチェックすると、描画コール「6705回」、APIコール「53361回」など、一部の数字が多すぎるように思えたそうですが、限られた情報のみでは「何が悪さをしているのかを断定することはできなかった」とパーヴォさん。また、VRAMを6.7GBも使用しているというのも不可解な点のひとつだった模様。

Cities: Skylines 2は独自の仮想テクスチャリング(テクスチャストリーミングシステム)を実装しています。仮想テクスチャリングは「テクスチャアセットごとに1つのGPUテクスチャを使用する」という従来の方法よりも潜在的にメモリ効率の高い方法でテクスチャデータをロード・管理するための手法です。仮想テクスチャリングは理論的には非常に洗練されていますが、多くのトレードオフが伴うもので、実装にはいくつかの問題がつきまとうものだそうです。


複数の分析を踏まえ、パーヴォさんは「Cities: Skylines 2がGPUに過剰な負荷をかける原因は、簡単にまとめると『ゲームがGPUに不必要なジオメトリを大量に投げるため、利用可能なラスタライズパフォーマンスによりゲームが大幅に制限されてしまうため』だと言えます」と言及。また、Cities: Skylines 2はUnityの組み込みソリューションの代わりに独自のカリング実装を採用しており、「UnityのDOTS統合により、Colossal Orderがグラフィックスのかなりの部分を自分自身で実装する羽目になり問題が起きたのでは」と推測しています。

パーヴォさんは「Colossal OrderはUnityの新しい技術(DOTS)に賭け、これは莫大な利益をもたらしたものの、別の頭痛の種(GPUに過剰な負荷をかけてしまう問題)をもたらしてしまったようです。こういったことはソフトウェア開発においては珍しいことではなく、ウェブ専門の開発者である私自身も本業で経験したことがあります。Colossal Orderはこれまでのゲームが苦しんできた『CPUのボトルネック』を修正し、シミュレーションの規模を増やすためにアーキテクチャとしてDOTSを選択し、これはほとんどの面で大きな成功につながりました。しかし、Colossal Orderは開発を進める中でUnity公式のソリューションでは対応できない問題に気づき、カリング・スケルトンアニメーション・テクチャストリーミングなどのカスタムソリューションに切り替える必要があったのだと思います。そして、システムがまだ洗練されていないにもかかわらず財政的あるいはパブリッシャーからの圧力により、ゲームをリリースする必要性に迫られたのだと思います」と述べ、なぜCities: Skylines 2がGPUに過剰な負荷をかけるようになってしまったのかを推測しています。

この記事のタイトルとURLをコピーする

・関連記事
130種以上のゲームエンジンを「価格」「言語」「プラットフォーム」などで絞り込んで検索できる「Game Engines Database」 - GIGAZINE

「Unity」の移行先の候補になるゲームエンジンまとめ - GIGAZINE

70万行以上のコードを20年かけて1人でコツコツ開発してきたゲームプログラマーへのインタビュー - GIGAZINE

Steamで販売されているゲームで最も多く採用されているゲームエンジンは何なのか?がわかる統計データが公開 - GIGAZINE

in ゲーム, Posted by logu_ii

You can read the machine translated English article here.