Skyrim.iniのPapyrusセクションがよくわからない

Skyrim Stability Guideを読んでたら、この前Skyrim.iniでデフォルトに戻したfUpdateBudgetMSとかの話が出てきた。要するにPapyrusセクションいじってるやつはデフォルトに戻せ、っていう論調なんだけれども、追っていくとちょっと面白かったのでメモ。

昔はfUpdateBudgetMSに800とかを指定しろとかいう記述も結構多かった。VIGILANTとか今でもPOSTのQ&Aにそう載っている。

Q.Some Quest/Event is stuck.
A. Enhance Papyrus Processing. Edit Skyrim.ini.
[Papyrus]
fUpdateBudgetMS=800
fExtraTaskletBudgetMS=800
fPostLoadUpdateTimeMS=2000
iMinMemoryPageSize=256
iMaxMemoryPageSize=512
iMaxAllocatedMemoryBytes=153600

ただ、tktkさんのCTD周りの修正みたいなエントリにも書いてあるとおり、最近ではデフォルトからいじるな、というのが通説になっている様子。↑のSkyrim Stability Guideもそうだし、Crash Fixesとかでもそんなことを書いてた気がする。

前々から、その出所はどこなのかなあと気になっていたけど、どうもBethesdaのPapyrusまわりを担当していた(クエストのエイリアス関連の質問をされたら「私はPapyrusの質問には答えられるけど、ほかは知らん」と返してる)プログラマのひとり、SmkViper氏がこんな投稿を2014年にしているようだ。CK Wikiに書いてあることそのままだと言えば、そうかもしれないが……。

Two of the CPU settings (fUpdateBudgetMS, fExtraTaskletBudgetMS) will harm your framerate if the script system actually uses the entire budget. Remember that to run at a solid 30fps the game only has 33ms total to do everything it wants to do that frame. If you want the game to run at 60fps, the game only gets 16ms. (And so on for higher framerates)

So you can see that if you tell Papyrus that it has 20ms for script updates that (if it uses all 20ms) you can never hit 60fps, and it's going to be hard to even hit 30 (the game will only have 13ms left over to do everything else).

The default of 1.2 should be fine for most people, even with modded setups. If you do increase it, keep it to small values or don't be surprised if your game framerate drops or hitches during periods of high script activity. (And if it's a combat mod, that would be during combat!)

The last CPU-related setting (fPostLoadUpdateTimeMS) will not affect your framerate, but will affect your load times. Unlike the other settings, Papyrus will use the entire time even if it has nothing to do. Increasing this will only help make sure cells and such are set up if there is a load screen. For example, the civil war can stress this because it has to set up a ton of things in the cities for the war when you enter through their load doors.

日本語でおけ?ごもっとも。

budgetは予算とか経費っていう訳らしい。budgetMSでようは予約された時間、とかかなあ。ぐぐる翻訳をあやしい補足入れたのが下記。

スクリプトシステムが実際に全ての予算を使用する場合、2つのCPU設定(fUpdateBudgetMS、fExtraTaskletBudgetMS)はフレームレートに悪影響を与えます。 確実に30fpsで走るには、そのフレームで実行したいすべてのことを行うには33ms(ミリ秒)しかありません。60fpsなら、16msしか得られません。

もしあなたがPapyrusに「スクリプトアップデートに20msかかる」と(fUpdateBadgetsMSを通して)伝えるなら、(60fpsには16msしか時間がないので)60fpsに達することは決してありません。30fpsに達することさえ難しいでしょう(スクリプト以外の動作に使える残り時間は13msしかありません)。

Mod環境下であっても、ほとんどの人にとってデフォルトの1.2は最適です。増やすとしても小さい値にしておいてください。あるいはスクリプト稼働が多い間にfpsが低下したり、暴れたりしても驚かないでください(スクリプトModが戦闘Modであるなら、それは戦闘中に起こります!)。

最後のCPU関連の設定(fPostLoadUpdateTimeMS)はフレームレートには影響しませんが、ロード時間には影響します。他の設定とは異なり、Papyrusは何もしていなくてもその全ての時間を使います。これを増やすのは、ロードスクリーンを挟んだセルの初期配置を確実にすることにのみ効果的です。例えば内戦です。内戦はロードがある扉を挟んで、戦争のために都市に大量のものを設置しなければならないからです。

更に氏は「でもfUpdateBudgetMS=800とか設定しろって言ってるModがあるんだけど!」っていうユーザの投稿にこう返信してる。かなり意訳。

あー……あんまり、それはお勧めできません。

スクリプトヘビーなModが必要な時間を使えるようにPapyrusを設定することは、fpsにかなりの犠牲を強いることになります。

設定がリミッターであることを覚えておいてください。これは、スクリプトがベストの状態であっても、そうでなくても、ゲームを許容フレームレートで実行し続けるようにデザインされています。

まあ、その「1フレームで完結させるような処理」というのがどれかよくわからん(fUpdateBudgetMSについてはCK Wikiにupdate loopって書いてあるし、あんま効果ないよとも書いてあるからOnUpdateかもしれないが、fExtraTaskletBudgetMSは解読してもよくわからない)のだが、特定の”重い”スクリプトが走った時とかスクリプトが重複して走った時にENBのfps表示が少し下がってカクっとなるのは、スクリプト達が「オラ画面更新するの待てやまだBudgetMSたってねーだろ」とツッコミ入れまくってるのが原因なのかなあという感じだろうか。1.2だとスクリプトのキューが詰まりやすくて、それをfps犠牲にして普段から秒数を確保することで、詰まりにくくなると。

よくわからんが、結論として。

ENBを外すつもりもなく、Sexlabを入れてDefeatを入れて他のSexlab関連のModも結構入れてて、なおかつLoot and degradationを入れながらフォロワー5人分の損傷も有効にしていて、ダメ押しにAction Combatを入れて、iMaxAllocatedMemoryBytesをいじっていないにもかかわらずログにバッファオーバーフローが出ている愚か者(つまり私)はfpsを犠牲にしなさいということだな。よし。50くらいから試そう。

 

おまけ。テスト中にplaceatmeで5人出そうとしたら533って打ってしまった時の図。これでもCTDしなかった。最近のSkyrimしゅごい。

ScreenShot636

コメント