ゲーム開発者の「大規模シムの最適化」談義が盛り上がる。大量キャラをぬるぬる動かすノウハウ、ベテランが語る“数千体からが本番”

「コロニーシムはどうやってフレームレートを落とさずに500以上のユニットをシミュレートしているのか」という素朴な疑問を開発者に訊くスレッドが注目を集めている。

Googleでお気に入り登録

海外掲示板のRedditにて、「コロニーシムはどうやってフレームレートを落とさずに500以上のユニットをシミュレートしているのか」という素朴な疑問を開発者に訊くスレッドが注目を集めている。コメント欄には、『Dwarf Fortress』のプログラマーや、『Dota 2』の人気カスタムゲーム「Crumbling Island Arena」の作者など、ベテラン開発者たちが参加。大規模なシミュレーションを実現するためのノウハウが共有されている。

発端となったのは、海外掲示板Redditのゲーム開発者向けコミュニティ「r/gamedev」にて、ユーザーのLink_AJ氏が投じたポストだ。同氏は、Steamで高い評価を得ている大規模戦闘・都市建設シミュレーション『Songs of Syx』に着目。同作では数百人規模の住民が街を行き交い、物流や生産活動をおこなっていることを挙げつつ、このような大規模なコロニーシミュレーションをどのように実現しているのか、開発者たちに意見を求めた。


意外と500体くらいなら“普通に動く”

このRedditの投稿には、ゲーム開発者を中心に多くのユーザーが反応を示している。最適化のノウハウも共有されるなかで、印象的なのは「500体くらいであれば特別な対応は必要ない」といった見解が多く挙げられている点だ。たとえば、今年2月にリリースされた人気ローグライト・シミュレーションゲーム『Mewgenics』のプログラマーであり、Glaiel-GamerのハンドルネームをもつTyler Glaiel氏は、「500体程度なら特殊な最適化は必要なく、基本設計さえまともなら普通に動く」とコメント。ここでの“まともな基本設計”とは、処理を管理しづらいプラグインへ過度に依存したり、全ユニットに対して毎フレーム何度も経路探索を実行したりといった明らかに非効率な実装をしなければ、というものだ。その上で同氏は、「500ではなく数千の処理を扱う段階になって初めて、他の開発者たちが挙げているような最適化手法が重要になる」と説明。現代のゲーム開発においては、基盤設計が適切であれば500体規模のユニット処理自体は特別難しいものではないとの見方を示した。

『Dota 2』の人気カスタムゲーム「Crumbling Island Arena」の作者であるDoctorGester氏も、「NPCが5万体になっているなら話は別だが、500体ならそこまでの対策は不要」との考えを伝えている。また他のユーザーがデータ処理の高速化について、データを種類ごとにまとめて管理することで効率が向上すると説明した際には、「それが常に最適解とは限らない」と指摘。どのようにデータを配置すべきかは実際の処理内容によって異なり、場合によっては構造化されていないデータでも十分な性能を発揮すると説明している。


ベテランの知見

また、『マインクラフト』や『RimWorld』などに影響を与えた名作コロニーシム『Dwarf Fortress』のプログラマーPutnam3145氏も、「コンピュータは想像以上に高速だ」とコメント。あわせて『Dwarf Fortress』の最適化やデータ構造について紹介している。同作は、数百人のドワーフたちを管理して地下や地表に巨大な構造物を作り上げるシミュレーションゲームだ。プレイヤーは自動生成された独自の歴史を持つ世界でドワーフたちを管理しつつ、さまざまな発展の過程を楽しむことができる。

そんな『Dwarf Fortress』では、400体のユニットが互いの視界判定や経路探索をおこないながらも、おおむね50fpsで動作していると説明。また、ゲームの処理速度を分析したところ、複数のCPUコアで処理を分散させる手法では約20%の高速化が実現したものの、安定性が損なわれる兆候が見られたという。一方で、メモリ上に散在していたユニットのデータ配置を見直した際には40~50%もの性能向上が確認されたとしている。

Putnam3145氏は、重要なのはデータがどのように配置されているかだと指摘。最適化前はCPUがRAMへのアクセスを繰り返していたものの、データを密集配置することで効率が向上。大幅な性能改善につながったとしている。同氏は「まずデータ構造やメモリ配置を意識すべき」との見解を示している。

そのほかスレッド内では、500のユニットを500個のデータとしてそのまま処理せず、画面外の処理を簡略化したり、更新頻度を下げたりすることで負荷を抑えるべきといった知見も寄せられている。また、複雑な経路探索の多用を避けることや、グラフィック面での描画負荷を低く抑えることも最適化において重要となるようだ。上述したような数千体のユニットを扱う際には重要となるのだろう。

グラフィック面だけでなく、内部的な計算処理の最適化も重要になるシミュレーションゲーム。過去にも最適化に関してさまざまな業界人の知見が語られてきたジャンルだ。たとえば経路探索における最適化についての知見は、『RimWorld』の開発者や、今回のスレッドのきっかけとなった『Songs of Syx』の開発者が紹介していたことがある。またゾンビの大群からコロニーを守るRTS『They Are Billions』は当初Unityで試作されたものの、ゾンビ400体でスムーズな動作が難しくなったため、最適化された独自エンジンを開発してブラッシュアップを続け、3万体ものゾンビを処理できるようになったことが語られていた(GamesBeat

一方で今回の投稿では現役開発者たちから、数百体、あるいは数千体の処理であっても現代のハードウェアでは必ずしも特別な工夫を必要としないという見解が示されたのは興味深い。ユーザーが用いるハードウェア性能の全体的な向上も背景としてあるのかもしれない。その一方でスレッド内では、プレイヤーの目に触れない部分の簡略化やデータ構造の見直し、並列処理の活用など、ゲームを快適に動作させるためのさまざまな最適化手法も紹介されている。プレイヤーが普段当たり前のように目にしているスムーズで美しいゲーム世界は、こうした地道な努力によって実現しているようだ。

この記事にはアフィリエイトリンクが含まれる場合があります。

Googleでお気に入り登録
Kei Kano
Kei Kano

キャラクリが出来て没入感のあるゲームが好きです。ゆっくり歩いて世界観を味わったり、自分なりに脳内設定を組み上げたりして遊んでます。

記事本文: 25