「Stellaris」の開発日記#232が公開されていましたので、その内容をご紹介。今回は3.2のバランス変更とパフォーマンスの改善について。「Aquatics Species Pack」リリース前の開発日記です。
開発日記
開発日記#232は、3.2のバランス変更とパフォーマンスの改善について。
- 今回は「Aquatic Species Pack」と同時リリースの、SF作家フランク・ハーバートちなんで名付けられた3.2「ハーバート」パッチの変更点についてご紹介する。
バランスの変更
- バランスの変更では以下のようなことを行った。
- 機能的建築様式(Functional Architecture)と建設ロボット(Constructobot)で無償の建造物スロットを2→1に減らした。
- 牧歌的農業(Agrarian Idyll)の帝国は農業区域を4つ建設するごとに惑星建造物スロットを1つ獲得できるようになった。
- クローン軍団(clone army)の提督の艦船維持コスト補正はディシジョンに基づいて5/10/20%に引き下げた。
- 発掘地点「Ruins of Shallash」はゲーム終盤の危機を打ち負かせるほどの統合力をもたらさなくなった。
- 適切な原始種族介入政策を設定していない場合、国境内の原始種族に惑星破壊兵器を使うことはできなくなった。
- 家畜の職にあるPopは政治力が10%低下するようになった。
- 多くのアノマリーで社会学研究点3を産出するようになるのが報酬となっていたが、これを多様にした。
- 覚醒帝国が伝統を使うようにした(アセンションパークは使わない)。
- 生産性を向上させるいくつかの技術は利益があるか疑わしいものではなくなった。というのは、維持費(と生産)の効果が主に資源を産出する職にのみ適用されるようになったためだ。
- 神経ステープラーを持つ集合意識は複雑ドローンにはなれなくなった。
- 歓楽アーコロジー(Leisure Arcology)区域で追加される職業枠を減らし、他のエキュメノポリスの区域と同じにした。
- イオンキャノンの維持費が無料→エネルギー8となった。
- ネクロファージの集合意識について
- ネクロファージのPop製造ペナルティを75%→50%に引き下げ。
- Pop出力補正(プラスのものもマイナスのものもどちらも)を集合意識に適用しないようにした。
- 光栄養について、有機生命体の維持費-50%をエネルギーにも適用するようにした。
- ネクロファージの貪食する群れは昇格の間(Chamber of Elevation)がないことを考慮して追加のインフラを持った状態でスタートする(?生まれる?)。
- 注目すべきは機能的建築様式の変更で、追加の建造物スロットがこの国是の最大の長所だったことは承知しているが、最初のリリース熱狂の後でさえあまりにも大きな比率を占めていた。
- 「レム」パッチのように事前に計画されたバランス取りではないが、それでもいくつかの調整箇所が見つかり、今後のパッチでも続けていく予定だ。
スクリプトのパフォーマンス
- スクリプトのパフォーマンスへの影響は未知のものだったが、効率的なスクリプトを書くことによる効果はどれほどのもので、効率の悪いスクリプトを修正することでどれほどの効果があるのか?
- EU4のスクリプトプロファイラーをStellarisに移植するというプロジェクトを進めていたが、その情報は非常に不完全で、提示された情報を読むのも困難だった。しかしCustodiansイニシアティブによってこれができることを確認できるようになった。
- スクリプトプロファイラーを有効にしてゲームを走らせた結果を2つ添付した(注:気になる方は該当スレッドをご覧ください)。ひとつは初期の実行時のもので、カバレッジが包括的になる前(特にトリガー補正と経済テーブルが欠けている)、かつ最適化作業も行われる前のものだ。もうひとつは現在の3.2ベータ版のものだ(なお、各オブジェクトに費やした時間の数値はプロファイラーをオンにした最適化されていないデバッグモードでゲームを実行したことにより、大幅に増加している)。
- 前もって述べておくが、技術的理由から3.2アップデートでスクリプトプロファイラーを公開することはできない。このプロファイラーを使ってゲームを実行すると動作が約50%遅くなるため、オンオフを切り替えて使えるようにするには作業が必要だ。しかし将来的にはMod制作者が使えるようにしたいと思っている。
初期の成果
- 最初の大きな発見は特定のゲームルールの再計算をPopごとに毎日大量に繰り返しており、それがパフォーマンスに不釣り合いな影響を与えているということだった。最大の原因は「can_vote_in_democratic_election」で、すべてのPopの派閥支持率を毎日計算していたことだ。これは毎日キャッシュを作ることで解決した。
- スクリプト面ではトップヒット1を解析することで簡単に最適化できるスクリプトがいくつか見つかった。graygoo.555はGray Gooが活動しているときにのみ発生するはずのイベントを何度も発生させようとしていた。評価補正「triggered_opinion_galactic_community_in_breach」は他の評価補正よりもはるかに多くのパフォーマンスを消費しており、問題は銀河コミュニティの構成国を確認する前に「is_in_breach_of_any」をチェックしていたことだった。
- crime.1というイベントはもっと複雑で、このようなスクリプトが主な問題だった。非常に非効率的で、アーリーアウトの原則(注:検索してもヒットしないが、チェックする範囲を早い段階で絞っていくというような意味と思われる)を適用することで大きな利益があった。「Count_owned_pop」は比較的高価な計算方法で、スクリプトをコードに変換して計算する際に効率が大きく下がる。
- 新たなバージョンではこのようになった。
さらなる分析による成果
- さらなる効率化のために表計算ソフトを取り入れ、「すべての作業の影響の合計」や「Popの派閥の潜在的なトリガーの影響」などの内訳を表示するピボットテーブルを作った。これにより、さらなる修正点を発見できた。
- 「ai_resource_production」では非常に高いパフォーマンスコストが発生していた。ここで使われている「planet_resource_compare」が非常に高価であったためだ。問題は修正したが、それでもかなり高くつくため、Mod制作者のみなさんも使いすぎないようにしてもらいたい。
- もうひとつは職業枠、特に重み付けと「possible」のチェックが非常に高価であることだ。重み付けについては改善のアイディアがある(3.2パッチの対象とするには遅すぎた)。「possible」はほとんどの職業の最初にチェックしていることで、このトリガーをPopが最初に計算してその結果を適切な職業枠にマッチさせるようにするだけで非常に大きな改善(ほぼ2/3程度)が可能であることがわかった。
- Mod制作者への注意として、現在はフォーマットが少し変わっている。スクリプト化されたトリガー「worker/specialist/complex_specialist/ruler/drone_job_check_trigger」を使用していた場合、例えば「possible_precalc = can_fill_ruler_job」と定義する必要がある。また、そうしたものを変更した場合はgame_rulesで新しいバージョンを変更する必要がある。
- 最後に、Popの派閥のパフォーマンスの問題にさらに改善可能なところがあった。ひとつは派閥が存在できるかどうかに関する部分、2つ目はPopが派閥に所属するかどうかを決める部分、3つ目は派閥の毎日のチェックに法外なものがあったことだ。
さらなるパフォーマンスの話題
- 今回の作業がゲーム後半のスローダウンを少しでも軽減する形で実感できるようになることを願っている。テストでは成功したが、その程度を数値化するのは困難だ。今回の作業はスクリプトのパフォーマンスに注目したものだが、他にも検討すべき点がたくさんある。3.3ではさらに改善する時間があることを期待している。
- ゲーム後半でのUIの遅延に関する苦情については、確かに惑星画面、種族画面、入植地選択画面などは私たちが望むほど早くはなく、高速化を検討している。
Mod制作に関する内容は省略します。
コメント
「トップヒット」というのは、単にゲーム中で多く実行されているスクリプトのことを指してるんだと思います。
プロファイラによる解析でどんな命令がたくさん実行されているのかを可視化して、その「トップヒット」のスクリプトを最適化すれば
より効率的にゲームパフォーマンスを改善できるよね的な話かと。
ありがとうございます。記事に追記しました。
こういう記事が出るとなると水棲パックの発売と3.2近いのかな
翻訳乙です!