「Crusader Kings II」開発日記#18――最適化とMOD

ck2-dd20160809

CK2開発日記#18が公開されていましたので、その内容をご紹介。今回はパフォーマンスとMODについて。

前回:開発日記#17――十字軍の猫

2016/08/17 #19へのリンクを追加。

スポンサーリンク

概要

開発日記#18は、パフォーマンスとMODについて。今回の開発日記は、CK2のプログラマーでパラド社公式Wikiの管理人でもあるMeneth氏によるものです。

パフォーマンスについて

  • 知ってのとおり、このゲームは時間経過とともにどんどん重くなっていく傾向がある。これは段階的にキャラクターの数が増えていくことによるものが大きい。スペックの高くないコンピューターを使っていると特にイライラさせられるだろうが、スピード5を使っている人なら誰でも感じることだろう。
  • その他に、ゲームが数秒間停止するところもある。この最たるものがオートセーブで、1年の終わりに停止するか、月末により短時間停止する。
  • 私たちはこうしたゲームが止まるところを減らすだけでなく、ゲームの速度全般を向上することもやってきた。これは大きな成功を収めてきたと言える。
  • 2.6パッチでは、私たちのテストにおいてゲーム後半のオートセーブはこれまでより2倍早くなった。年末のラグも月末のラグとほとんど変わらないくらいにまで大幅に減少した。
  • 1日ごとにかかる時間が減り、ゲーム全般の日々のパフォーマンスも格段に上がった。
  • 全体として、テストにおいては、同じ時間でゲーム内の期間が30~50%長く経過するようになった。したがって、2.5.2のスピード5で10年間経過する時間で、13~15年経過させることができ、さらに煩わしいゲームの停止も減った。
  • こうした改善は、以下の最適化の組み合わせによって実現した。
    • 圧縮前のセーブデータを以前よりも小さくし、圧縮と保存の時間を削減した。
    • より効率的な方法でセーブを保存するようにした。
    • 年末に起こることのほぼすべてを年間に分散して行い、目立つ停止時間を減らした。
    • マップのレンダリングを改良して速度を上げた。
    • マップモードや名前などはマップ上やUIで「期限切れ」なものになっている場合、これを真に必要なところに限って更新されるようにした。例えば、以前は占領地のオーバーレイについて、占領状態が変更されていないときにも、しばしば更新の必要があるものとしていたが、これはもちろんCPUの無駄遣いだ。
    • いくつかの計算がシングルスレッドになっていたものを、マルチスレッドに変更。
    • パフォーマンスに強く影響するさまざまな計算に対して、さまざまな改良を加えた。
    • 以前よりランダムキャラクターの生成を減らし、ゲームが不要なキャラを積極的に排除するようにした。
  • 最後の点について図示すると、テストゲームでの生存しているキャラクターの数は以下のようになる。

ck2-dd20160809

  • 2.5でも似たようなチャートを描くが、769年からの400年後のセーブでは3万の生存しているキャラクターがおり、およそ倍の人数がいることになる。
  • 最後に、私の言葉が信じられないという人のために、2.5.2と2.6の比較動画を作った。

MODについて

  • 私はMODを作ってもいて、"Historical Immersion Project"の制作者のひとりでもある。そのため、MODについての話題は私にとってうれしいものだ。
  • 経験から、MOD制作者は簡単に情報を得られないので、複雑な次善の策をとらなければならないことが多くある。したがって、私は就業時間と自由時間の両方で、パラド社開発スタジオではすぐに使わないものであっても、役に立つトリガーや効果を制作してきた。Divine(パラド社スタッフ)もまたユーザーに提案されたMOD制作に関するさまざまな内容に携わってきたし、"Reaper’s Due"に必要な内容を実装するチームのメンバーのひとりでもある。MODに影響を与える多くのバグが修正され、使い勝手のいいコンソールコマンドが追加されている。
  • MODに関するチェンジログは100以上に及ぶ長さであり、多くのトリガーや効果からなっている。

チェンジログのリストがありますが、これは割愛します。

  • ゲームルールの追加については、以前の開発日記で述べた。
  • 新たに追加された設定はMODのコンフィグとしても使うことができる。1日目のイベントやディシジョンのような、直感的でなく柔軟性もない方法でなんとかする必要はなくなり、バニラのルールを変更するのと同じように変更することができる。
  • ゲームルールは何個でも追加でき、値もいくらでも追加できる。例えば、「バラバラの世界」シナリオを追加するとしよう。ゲームルールにこれを追加し、表には出てこないスタートアップイベントでルールにしたがってバラバラになるようにしてやればいい。ユーザーが1日目にディシジョンを発動させる必要はない。
  • ゲームルールはスクリプトの各所にレファレンスがあるので、ユーザーコンフィグに関するものであればなんにでも使うことができる。
  • 最後に、MOD制作者がMODを素早く制作できるように記事を書いた。これはMOD制作サブフォーラムで読める。MOD制作者の質問に対して内部の観点から回答できるように、開発日記とは分けてある。

次回:開発日記#19――終わりは近い