ステラリス 開発者日記 第267回 3.5 Fornax パッチノート、AI、パフォーマンス、改造

スポンサーリンク
更新情報

2022/9/22 フォーラム内のやり取りを更新。
台風の影響で日・月と停電してて更新が遅くなってしまいました😥


パラドックス社の公式フォーラムにステラリスの開発者日記 第267回が掲載されています。

今回は3.5 Fornaxパッチを中心としたゲームアップデートに関するお話です。

お断り:以下はパラドックスフォーラムの内容を意訳したものとなります。
リリース後数年を経てStellarisに公式日本語が実装されたことに伴い、管理人が翻訳した開発日記登場の用語と実際にゲーム中に登場する用語・表現が一致しない事があるかと思いますがご了承下さい。
※画像等はParadoxフォーラムより引用しています。
スポンサーリンク

ステラリス 開発者日記 第267回 3.5 Fornax パッチノート、AI、パフォーマンス、改造

今回の担当は@PDX-Lokeさんと@Caligula Caesarさんです。

冒頭の挨拶

みなさんこんにちは!

Stellaris Ver3.5のFornaxアップデートは、Toxoids Species Pack DLCとともに9月20日火曜日にリリースされます。
これらの予備パッチノートを提供するために、変異原性スパから@PDX-Lokeを引っ張り出してきました。まだ少ししっとりしていてすみません。

以下、3.5.1 Fornaxパッチノートがありますが、量が膨大なため紹介はカットします。
詳細を確認したい方は元サイトにて御覧ください。

しかしちょっと待ってください、まだ日記はあります!
9月19日 (月)、1700 CESTにStellaris Official Discordにて、Toxoidsの開発に関するQ&A会を開催します。

そして以下は@Caligula Caesarが引き継ぎ、AI、パフォーマンス、Mod製作に関するいくつかの内容を紹介します。


私(@Caligula Caesar)は開発日記に忍び込んできました。
Custodianチームで行ったことの中で、皆さんが本当に気に入るであろうと思うことがあるからです。

AI

まずAIについてです。
今回AIについては特に注力したわけではありませんが、それでもかなり大規模でインパクトのある改善リストを達成することができました。

私たちはAIが欠陥ある論理ループに陥り合金を無駄にしていることに注目しました。それは宇宙基地をアップグレードしてダウングレードしたり、船を建造して解体したりすることです。いずれの場合も論理を改善しましたた。

スターベースに関しては、AIはスターベース全体をアップグレードする際により賢明になるでしょう。
例えば、現在スターベースをアップグレードしている場合において、カウントを間違えて上限オーバーと勘違いしてしまうロジックを修正しました。
一方、アップグレードされたステーションをダウングレードする代わりにアップグレード自体をキャンセルするようになり、総力戦中に大幅にキャップオーバーした場合はスターベースのダウングレードも検討するようになりました。
またスパムのように要塞をあちこちに設置することはなくなり、むしろ有用と思われる場所にのみ設置するようになりました。

Ver3.4では、AIは防衛プラットフォームを建設しませんでした。
これは現在修正され、要塞の周辺にのみ建設するようなパラメータが追加されました。
またAIはオービタルリングの機能を使うのが苦手だったので、アップグレードして最適なモジュールや建物を使うようにしました。

艦船に関しては、AIは艦隊許容量の上限を超えた場合、実際に維持する余裕がない場合にのみ船を解散させるようになりました。
この修正により、AIの予算がどのように機能するかについてしばし長い間検討することになり、その結果いくつか連鎖的に修正がなされました。

  • AIが積極的に無視する支出にリソースを割り当てることができました。これによりエラーログが生成され、今後は発生しません。
  • AIがある支出に割り当てる最大値を指定した場合、その支出をその値で上限を設定しますが、余剰分を他の場所に割り当て直すことはありませんでした。現在では再割り当てが行われます。

これらの結果は、合金の支出に顕著に現れています。
AIはしばしば6万個の合金を上限としていましたが、実際にはその約半分しか使うように割り当てていませんでした。
こういったことはもう発生しませんし、AIが実際に合金を使う可能性がはるかに高くなりました。

もうひとつの特別な変更点は、ミニマックス派の皆さんのために、要塞が良いものであることをAIに認識させることでした。
ゲームの後半(AIが繰り返し可能な領域をヒットし始めたら)では、艦隊能力を持つ建物が望ましいと考えられるようになります。
まずしっかりとした収入を得る必要があるので、高難易度ではより起こりやすいのですが、私のテストでは以前は1~1.5k程度だったのが、グランドアドミラルの難易度設定において4kを超える艦隊許容量を達成することがよくありました。

これはAIが巨大構造物、特にハビタット(生息地)やオービタルリングをより積極的に建設するようにしたことと対をなしています。
AIは新しい巨大構造物を建設する際にいくつかのブロックが用意されており、例えば一度に1つしか建築できないようになっていました。
また過去には特定の状況下で居住地の建設が禁止されていたこともありました。
ほとんどの制限は現在解除されているので、一般的には可能であればすぐに生息地を建設しますが、入植可能地がある場合は新たに建設しないなどのいくつかの常識的な制限は残ります。
同様にAIは可能であれば常に惑星の上に軌道リングを作りたがるようになりました。
また、AIが行き詰まる可能性のある箇所もありました。
例えばもしどれかをアップグレードできるなら、新たなメガストラクチャーを構築することはないでしょうが、これにはメガアートアセンブリも含まれます。
メガアートアセンブリは、最終的な形にアップグレードするために大量の小規模な遺を必要とするため、もしAIがメガアートアセンブリを構築すれば基本的にメガストラクチャーの建設を止めてしまうのでした。
いまやこのようなことはなくなりましたが、AIはメガストラクチャーをアップグレードできるのであれば、そのために(遺物を)保存しておくことを優先します。

Ver3.4でAIが家臣を嫌って連盟を離脱することや、AIが安易に家臣になりたがっていることなど、いくつかのAI問題がコミュニティに波紋を投げかけました。
幸いなことに私たちは両方の問題に対処することができました。

艦隊のAIロジックの面では、戦争中にAIが艦隊を編成するロジックを改良し、AI艦隊がダラダラと動き回ることが格段に少なくなりました。
またPrethorynがコロニーをどう乗っ取るかを考えるのが上手になりました。

さらにAI帝国同士の戦争でお互いが相手まで到達できない場合、現状維持の和平交渉に双方がより積極的になるようになりました。
これにより、AI帝国が和平に至るまでに戦争で消耗が100%に達するまで非常に長い間立ち往生することがしばしばあった問題が解決されます。
これは特に戦争消耗の軽減が大きい大量虐殺帝国にとって大きな問題でした。

最後に面白いことに、あるAIが傭兵の飛び地を作って、すぐに攻撃することがわかりました。もはやこれはもう起こりません。

パフォーマンス

さて、パフォーマンスの話に移りましょう。
私自身もそして何人かの人たちも、ステラリスでのゲーム終盤のパフォーマンスに満足していませんでした。
そこで様々な方法で改善を試みました。
そして正直なところ結果はかなり有望です。

一般にパフォーマンスを向上させるには、煩雑なロジックの修正、キャッシュの使用、マルチスレッドの3つの方法があります。
ただし後者の2つのソリューションに対して不愉快に感じる仲間がいるため、簡単ではありません。
キャッシュはOut Of Syncsや計算ミスを好みますし、マルチスレッドはCTDとOOSの両方を好みます。
しかし我々は様々な問題に対して前進することができました。

何よりもまず修正値の更新にはかなりのコストがかかりました。
例えば自国の法令を有効にすると、その国が所有するすべての惑星、艦隊、船舶、ポップの修正値の再計算がトリガーされます。
これは最終的には多くの再計算になりますが、修正値の更新は簡単ではないため、時間がかかる場合があります。
ポップの詳細にある、すべての効果がどこから来たのかを示す素敵なツールチップを実現するには、かなりの処理能力が必要です。

Ver3.5では二つの改善がありました。
まず修正値の更新をマルチスレッド化します。
以前はすべて連続して行われていたため、フリーズが長くなり、他のものよりも長い時間がかかる毎日のティックが発生する可能性がありました。
これには理由があり、多くの相互依存関係を解消しクラッシュを防止する必要がありました。
しかしながらこれはかなり大きな効果をもたらしました。

さらにPOPにメガストラクチャーのコスト修正値のような無関係な修正値が追加されていることに気づきました。
そのため経済カテゴリにパラメータが追加され、その中の修正値がどこに配置されるかを指定できるようになりました。
これにより、修正値の再計算に要する時間がさらに20%短縮されました。

これとは別に私たちのマルチスレッドシステムが時々バグを起こして、すべてのスレッドがお互いを数ミリ秒待っていることに気付いたとき、かなり大きな改善がありました。
このためマルチスレッドで比較的高速な処理を行うと、平均して遅くなりまだ価値がある場合でも必要以上に遅くなってしまうのです。
幸いなことに、私たちの技術ディレクターはこの狂気の沙汰を止めることができ、私たちのプレイヤーのゲーム体験を計り知れないほど改善することができました。

これは私たちが行ったことのほんの一例です。
基本的には、意図的に不条理なセーブゲームの分析に多くの時間が費やされました。
人口増加、テクノロジー進歩、銀河サイズ、居住可能惑星を最大に設定し、2730年まで危機や没落帝国なしに実行するというものです。
ゲームはかなりもたつきましたが(つまり1年間進めるのに11分かかりました)、主な原因はストライククラフトの動きであることがわかりました。
これを通常のセーブで再現することはできませんでした。これはおそらく戦闘中にのみ発生し、非常に大規模な戦闘がいくつか行われていたと思われますが、マルチスレッドによって、実際にプレイするのがある程度合理的になりました。

そこから少しずつ修正できることがたくさんありました。
たとえばこのゲームでは1日に何度も、システムにコロニーがあるかどうかを調べるのにかなりの時間を費やしていましたが、これはかなり簡単にキャッシュ化することができました。
(これは簡単にキャッシュ化できることです。と、私は思っていたのですが、2回のOOS修正で後悔しました)。
もう一つの大きな違反は戦争です。国は戦っている戦争のキャッシュセットを持っておらず、代わりに戦っている戦争の情報を知る必要があるときはいつでも、戦っているすべての戦争を再計算していました。
言うまでもなくこれは非常に非効率的で、幸いなことにキャッシュ可能でした。
それからゲームが、ある宇宙基地の種類(たとえば「Bastion」)を調べるときは毎度毎度アウトライナーで数フレームごとに、あらゆる種類の宇宙基地を調べ、どれがここに最もふさわしいかを決定していました – その答えは?キャッシュ、キャッシュ、キャッシュです。

またAIが支店オフィスの設置場所を決定するまでの時間を短縮しました。
それから私たちは国を順番に更新するのに費やされる時間のほとんどが、その国の政策の妥当性を評価することに費やされていることに気がつきました。
(ええ、これはそれほど簡単ではありません。計算をスレッド化して結果をキャッシュし、その結果を次のシリアルアップデートで実装すれば、基本的にその直後から実行できます)。
最後に、月単位のティックは少し速くなります。
これはポップが組み立て、増加、減少する計算に同様のロジックを使用し、自動移行中のジョブキャッシュの再計算の約50%を削除したためです。

全てが順風満帆ではありません。少なくとも3つのOOSと2つのクラッシュが導入され、この作業で修正されたことを除けば、しばらくすると、ゲームが期待していたほど速くないことに気づきました。
実際、数日おきに一時的にフリーズしていました。
これは意図せぬ結果を招くいくつかのロジック修正のおかげで、AIがメガストラクチャーをどこに配置すべきかを非常に難しく考えていたためです。
ですので、より高価なチェックを配置するためにいくつかの変更が必要でした。

では以上により、どれくらいのインパクトがあるのでしょうか?
様々な理由から、特定の数字を約束することはできません。
ひとつには、これらの改善のほとんどは7月に行われたもので、その間に新たな非効率性をゲーム内に追加した可能性があります(たとえば、メガストラクチャーの件など)。
また特にAIゲームの場合、Ver3.4のセーブは3.5のセーブとあまり比較できません。
なぜなら、そのセーブを作成する際にAIはかなり異なる挙動をするからです(しかし一方で、ほぼ確実にクラッシュするので3.5のセーブを3.4でロードできません)。
そのほか、特定のセーブが、特定の事柄によってラグを起こすこともあります(たとえば、前述したストライク・クラフトの問題は、判明するまでは問題ではないと思われていました)。
またコンピュータが気まぐれで、ゲーム以外のことにリソースを割いてしまうこともあります。
とはいえ前回、Ver3.4のセーブデータに基づいてテストを行ったところ、30%以上速くなりました。
最新のゲームにおける後期キャンペーンでは、正確に高速というわけではありませんが(ゲーム後期はゲーム初期ほど速くなることはなく、ゲーム初期にはほとんど何も起こらないので、パフォーマンスは主にフレームのレンダリングにかかる時間で決まります)、確実に遅くは感じません。
でも、みなさんがどう思うか、もっと努力が必要だと感じるか楽しみです。

Mod可用性

最後に伝統に従って改造についてです。
私たちが行ったクールな追加機能がいくつかあります。
一番大きいのはインラインスクリプトで基本的にゲーム内のどこかでinline_script = my_scriptと指定することができます。
(ほとんどの場所で動作しますが、すべてではありません)。
そうするとゲームはcommon/inline_scriptの中からmy_scriptというファイルを探し、指定した場所にそのファイルの内容を貼り付けて使用します。

これによりスクリプトを再利用できるため、コピー・ペーストの回数を減らすことができます。
特にパフォーマンスに関する懸念はありませんが、際立って大規模に使用した場合、起動時間やメモリ使用量に影響を与える可能性があります。
(残念ながら「際立って大規模」が何であるかについてはまだ試していません。確実に何百回も使うことに関しては大丈夫です。しかしおそらくあなたが数十万回行うと物事を遅くするでしょう)

Mod製作者にとっての第2の大きなポイントは、スクリプトプロファイラです。
現在はコンソール・コマンドscript_profilerを使用して一般に公開されています。
プロファイリングを開始するには1回終了し、結果を出力するにはもう一度使用します。
これでmodがパフォーマンスの問題を引き起こしている理由を正確に知ることができます。
スクリプトのカバー率は100%ではなく90%程度でUIの問題はあまりカバーされていないので、良いものではありますが絶対にすべてのケースで役に立つというわけではありません。

これ以外に注目すべき点は次のとおりです:

  • イベントターゲットで@を使用できるようになりました。
    したがってsave_event_target_as=something@rootとなります。
    注意してほしいのですが、このツールはドットスコーピングをうまく処理できないので、something@root.ownerのようなものを試しても、おそらく望みどおりにはならないでしょう。
  • 現在、惑星フィーチャのcustom_tooltipを貼り付けることができます。
    そのため適切な方法で表示されるカスタム効果を持つことができます。
  • 終了値が100以外の状況を作成できない問題をいくつか修正しました。
    これで、思い通りに拡張できるようになりました。
    つまり、固定ポイントの最大境界まで拡張できます。
  • country_navial_capacity_contribution_from_subjects_mult修飾子とcountry_navial_capacity_contribution_to_overlord_mult修飾子が追加されました。
    これらの修飾子は、家臣の艦隊力を低下させることなく、家臣の艦隊力の割合を君主に追加します。
    これらの修飾子は負であることを意図していないことに注意してください。
  • リーダーを不死身にする効果と、リーダーが不死身かどうかを確認するトリガーが追加されました。
  • 惑星に特定タイプの優先順位の低いジョブがあるかどうかをチェックするhas_forbidden_jobsトリガーが追加されました。
  • owned_starbaseはプライマリースターベースのみを返すため、own_nonprimary_starbaseのスクリプトリストを追加しました(軌道リングがないため)。
  • 小惑星帯に幅と密度の値が追加され、既定が1に設定されていることが宣言されていない場合に、より詳細な制御が可能になりました。
  • check_economic_production_modifier_for_jobは、特性(特に労働者、スペシャリスト、奴隷のもの)から誘発されるポップ修正を正しく考慮するようになりました。また、若干高速化されるはずです。
  • スターベースモジュールのon_finished/aborted/queued/unqueuedが修正されました。
  • 居住性の上限と下限の修正が、(種族だけでなく)惑星に直接適用できるようになりました。
  • modify_speciesで複数のadd_traitまたはremove_traitエントリを正しく指定できるようになりました。
  • スクリプト化されたlocエントリ内の値としてスクリプト値を定義することにより、loc内のスクリプト値を使用できます。
  • 艦隊作成後に艦隊の設定を設定/更新できるようにする効果が追加されました。

次週予告

ToxoidsとFornaxは来週の火曜日にリリースされ、その後は通常の開発スケジュールに戻る予定です。


以上

フォーラム内のやり取り(Q&A)

フォーラム内のやり取りで気になったものを紹介(全てを紹介するものではありません)。

Q:新しいテラフォーミングの候補と同じ様に、前駆体を発生させる計画はありますか。

A:時間があれば将来のパッチでやりたい内容です。


Q:HoI4で追加されたようなGUIを備えたプロフィール画面が将来導入される事はあるのでしょうか?

A:内部ビルドに開発作業中のバージョンがあります。
コミュニティがそれにアクセスできるかどうかは、開発に取り組む時間が取れるかどうかによるでしょう。


Q:メガストラクチャを解体可能にする事についてはどうでしょうか?
それは素晴らしいゲーム品質の改善になることでしょう。

A:これについてはカストディアンチームのウィッシュリストに入っていますので、今後のアップデートで行われる可能性があります。
また私たちはこれに関してはとてもやりたいと思っています🙂


Q:機械帝国がZroniの前駆体を見つけて遺物を手に入れた場合、それを採掘することは保証されるのでしょうか?

A:いいえ。チャンスがあるかどうかはゲーム開始時に判定されます。
通常の帝国はアークサイトを取得し、機械帝国はアークサイトと、1つもしくは2つの選択肢を有した独自の相互作用との両方を手に入れます。


今回は以上とします。

感想・まとめ

以上、Stellaris 開発者日記 第267回の紹介でした。

Fornaxアップデートで様々なバグ修正や新要素の追加だけではなく、AIの挙動修正、ゲームパフォーマンスの向上、そしてMod製作に関わる更新など様々な内容が盛り込まれるようですね。

パッチは来週火曜日に実装とのことなので、その後はパッチ後のバグ修正にまた数週間作業期間が当てられるのではないかと思われます。

とりあえず今回で週二回の開発者日記は終わりのようなのでホッとしました😅

それでは( ✧Д✧) カッ!!