読者です 読者をやめる 読者になる 読者になる

Skyrim箱庭DIY

MODによる固有の環境不具合は自分で直して快適ゲーム。CTDにさようなら。Do It Yourself!!

SkyrimでよくあるCTDの原因まとめ(ランダムCTD)



スポンサーリンク

CTDした際、ロードして同じことをやってみても、次はCTDせず問題無し、という場合。これも経験多いかと思います。確定CTDと違って、同じ(ような)ことをしてもCTDする場合としない場合があるので、切り分けがしづらいです。

ちょっと長いです。

 

※ランダムCTD以外の検索で来た人は、他の記事もどうぞ。

負荷がキャパシティを超えた場合に起こるCTD

使っているPCのパフォーマンスを超える負荷が掛かったり、スクリプト負荷が限界突破してしまった場合に発生するCTDです。時間の経過と共にメモリ使用量が増え続け、限界になった所でCTDとか。起こるときは起こるので仕方が無いですが、あまりに高頻度だとゲームになりません。自分の使っている環境をまずは整備することで、頻度を大幅に下げることが出来ます。

NPCの多い所やリフテン周辺のような木の多い所でCTDしやすい、走った時にCTDしやすい等は、負荷やメモリによるCTDの可能性があります。

移動速度を上げすぎると環境変化が高速になるのでCTDしやすいです

 

テクスチャを圧縮する

走ったりNPCの多い所でCTDしやすいといったことから、Riften周辺のように樹木の多い所でCTDしやすい等。テクスチャの最適化はランダムなCTDを減らす第一歩です。MODに同梱されているテクスチャは非常に巨大な場合が結構あるので、自分の環境に合わせて調整してください。どれだけいいグラボ持ってても、最適化しないと無駄が多いです(別にうらやましくなんて。。ないやい)。最適化してれば、それだけ上限に余裕が出来ます。無駄遣いを無くしましょう。

過去記事を参照してください。

 

ENBのProfilerの項目にある3項目が「0」でなく、SSのように常時バタついてた場合、VRAMが溢れてます。

VRAMのスワップ祭り

 

高負荷のスクリプトをむやみに入れない

スクリプト=悪ではない

別に欠陥品ではないので悪ではないのですが、負荷が高くなるとCTDに繋がることも事実です。スクリプトが悪いのではなく、無意味に高負荷なスクリプトに問題がある、といった感じでしょうか(あまりスクリプト書けないんで偉そうなこと言えません)。状態監視でループ回すのにも良くない作法があったりとか。

必然性があって高負荷なスクリプトのMOD、面白い物が色々あると思います。ですが次々と入れていってはどこかでパンクします(CTD)。本当に自分に必要なものを厳選していくのが良いかと。

USKPを使っている人は、バニラのスクリプトを変更するMODには注意してください。USKPはbsa形式なので、気づかぬうちにバグフィクスのスクリプトを上書きしている場合があります

Papyrusのログについて

Papyrus(Skyrimのスクリプト言語)のログを取ることで、スクリプト起因によるCTDの原因究明をサポートする手段があります。ログの取り方を説明しているサイトも多いと思います。

ですが個人的には、スクリプトが全く分からないのであれば、CTD解決目的でログ取りをしないことを推奨します。今は分からないけどログを参考にスクリプトの勉強したい等、興味があるならば、是非取ることをお勧めしますが。

理由は、スクリプトのログにはただのデバッグメッセージから、出ても問題無いスタックエラー、環境によっては出るに決まってるエラー等、各種ログが吐き出されます。読み方が分からない状態でこれを見てしまうと、本当のCTD原因を見失う可能性が非常に高いです。大量のログを吐いてるMODが犯人に見えてきます。本当にその可能性もありますが、読み方が分からないうちはただの偶然です。

分からないうちはスクリプト系MODをあまり入れない、定番になっている物(ノウハウの蓄積が多い)だけにしておく等の自衛策をお勧めします。

 

NPCやハイメッシュを増やしすぎない

セルの密度を増やしすぎると高負荷でCTDしやすくなります。Riftenのような森林地帯に更に巨大なハイメッシュの木を増やすとか、スポーン数増加MODで大量に敵増やすとか。ダンジョンでスポーン数ふやしても過密でCTDしやすくなると思います。

 

Skyrim.iniやSkyrimPrefs.iniを見直す

アニメーションを止める、影を簡易化する、草のサイズを小さくする等。色々負荷軽減を図れます。wikiに色々書いてあります。

http://wiki.skyrim.z49.org/?Skyrim.ini

 

色々追加して負荷が上がっていった場合、平均的に負荷が上がるだけならFPS低下で済みますが、ピークに一瞬でもキャパシティを越える負荷が発生した時にはCTDになりますので注意してください。

もしも日本中の全世帯が同時にトイレの水を流したら、瞬間的水不足が起きますよねCTDです。

 

ENBやグラボの設定を見直す

CTDには直結しないかもですが、念のため。ENB使ってない人は飛ばしてください。INIやグラボの設定の見直し。特にグラボの設定に関しては、アインチエイリアスをアプリケーションコントロール(NVIDIA Control Panelの場合。Catalystは今の知らないです。)にするのが最適、と説明するサイトもありますが、ENB本家のドキュメントを見る限り、強制的にDisableにすることを強く推奨となっています。SSAOも無駄な二重処理でFPS激減するだけです。詳しくは下のリンク読んでください。

※ENBの作者さんによっては違う設定を推奨している場合もありますので、どちらを取るかは自己責任でお願いします。

enbdev.com

 

ENBの設定次第で、場合によっては限りなく確定CTDに近いランダムCTDが起こるかもしれません。主にロードを挟むセル移動だと思いますが、きわどいメモリ使用量だとランダムで発生するかもしれません。

心あたりがありましたら別記事でどうぞ。

 

 

ルーズファイルの残骸の影響によるCTD

espをoffにしただけでアンインストールしていない、手動でコピーしたファイルが残っている、アンインストールに失敗している等、不要なルーズファイルが残っている場合。NPC美化MODなら顔が黒くなる程度で済むかもですが、既存のスクリプトを改変しているようなMODの場合は深刻な問題に繋がります。

LLでSkyUIのスクリプトを上書きしてしまうMODを見たことあります。自分は1個しか見たこと無いですが複数あるらしいです。直接トラブルは無かったものの、MCM関連のスクリプトを上書きするようなのでちょっと勘弁。SkyUIはbsaなのでルーズフォルダにスクリプト置かれても気づかないこともあるので、心当たりのある人は一度チェックしてみるといいかもです。

 

セーブデータの破損によるCTD

MODを入れたり抜いたりしまくった、ゴミだらけのセーブデータに起因する場合。これはもう切り分けするのは無理だと思います。何が要因なのか不明すぎるので。

スクリプトの残骸の整理をすることで改善する場合があります。復旧不能に破損するリスクもありますので自己責任で

 

Save game script cleaner

お手軽にボタン一つで使える系です。個人的には不具合に遭遇したことありませんが、ネクサスのフォーラムだと完全に吹っ飛んだ報告もぼちぼち。

 

Savegame script scalpel - Disassembler - Diagnostic Tool - Papyrus Data Transfer

解析能力はこちらの方が高いと思います。LLのS○xLab Framework作者お勧めの品。自動で消すだけの場合だと、大抵はSave game script cleanerの方が削除数多いです。良いか悪いかまでは分かりません。

 

使用メモリの上限を超えた時のCTD

Skyrimは32bitアプリな以上、通常だと2GBのメモリ上限があります。超過した場合はCTDになります。

SKSE1.7以降のMemory Patchを使う

VisualStudioのLAAオプションを使っているぽい?4GBまでTESV.EXEが使ってくれるようになる模様。

すいません元々TESV.exeはLAAですね、64bitOSであれば普通に4GB空間で使ってくれます。SKSElorderで何かしてるのかと勘違いしてました(汗)

 

昔は色々面倒でしたがSKSE1.7から標準装備になりました。TESV.exeが掴むメモリブロックを増やしてくれるので、メモリ容量起因のCTDに関してはかなり強力な対策になるかと思います。

元になったMemory Patchについては下のフォーラム参照してください。

ここの転載に近い情報になってしまいますが。

メモリブロックはバニラが256MB+256MBを最初に確保するようなのですが、これを変更できるようです。このフォーラムでは512MB+256MBの確保が紹介されてました。

ILS(Infinite Loading Screen、無限ロード)対策もされているのでSafety Loadの置換えにもなるとのことです。

enbseries.enbdev.com

前提環境

ENBoost環境(後述)で4GB以上のメモリを積んだ64bitOS環境が推奨されています。32bit環境で3GBスイッチ使った場合は、「テストしてないけど動くんじゃない?グッドラック!」的なノリです。3GBスイッチに関しては別途調べてみてください。下手打つとOSそのものを吹き飛ばすリスクありますので超自己責任で。動けば32bit環境でも3GBまで使える筈です。

 

使い方

SKSE.iniに追加します。計768MB、2ブロック目が256MB。

[Memory]

DefaultHeapInitialAllocMB=768
ScrapHeapSizeMB=256

 

無茶な量を確保するとタイトル確定CTDを含め、これが原因でCTDすることになるので注意してください。

 

作者によると768MB+768MBでuGrids17とか19でも動いたみたいですが!ネクサスにSS上がってます。遠景までLODのローポリ使わずモデリングされちゃってるようで(笑)

Skyrim Nexus - mods and community

 

SSME - Skyrim Startup Memory Editorという同種の物もありますが、自分は使ったこと無いです。SKSEに実装される以前の物だったと思います。

 

ENBoostを使う

メッシュやテクスチャ関連のグラボで扱う大容量データに限って、外部プロセスのメモリ空間に渡すことで4GBの壁を突破することができます。ENB使っていればデフォルトでEnableになってます。詳細は別記事にて。

 

 

その他

ShowRaceMenuでCTDしやすい

 ShowRaceMenu Precache Killerで改善します。使わない髪MODは極力外しておくのも効果あります。もしくはenblocal.iniでExpandSystemMemoryX64をtrueに。

 

ロード時によくCTDする

FNISを使っている場合は特有の初回CTDが起こる場合があります。NPCの少ない所でセーブする、Haven Bagを使う等で対策。

どうしても開きたいけどCTDしまくりで開けないデータがある場合は、

  • ゲーム起動後、何でもいいので安全にロードできるデータを開く
  • 目的のデータをロードする

これでFNIS由来の初回CTDである場合は回避できます。

セーブデータの破損と切り分けが付かなくなる恐れがあるので、毎回この手段でメインのデータをロードするのは避けた方がいい気がします。

 

ENB0.303以降のDataSyncModeを一時的に有効化して、ロードを試してみるのも手です。カクつかない場合は常時有効化でもOKです。

 

(憶測)セーブ時にCTDする

この検索ワードでのランディングが結構あるのですけど、覚えている範囲では、僕はセーブ時のランダムCTDの経験が有りません

それ故にエアなので、完全な推測、というかただの予想レベルですけど。例えば

 

・セーブ時にたまたま異常に負荷が上昇した

・異常なセーブデータを作る状況に陥ってCTDトリガになる?

 

なんてことが有るかもしれません。(・・・無いかもしれません)

突発的な負荷上昇が原因だとすれば、Haven Bag等、負荷の低いセルでセーブすることで対策できる気がします。

セーブデータ異常に関しては、SKSE.iniのgeneralにClearInvalidRegistrations=1を書いておくとか、肥大化するらしいスクリプトを含んだMODを使わない等の自衛策で。

 

試しにセーブデータをReadOnlyにしてセーブしてみましたが、ゲーム内では特に問題ありませんでした。勿論セーブできてないですけど。例えばセキュリティソフト系で書き込みブロックされたとしても、CTDには繋がらない気がします。

参考までに、僕はセーブデータの上書きセーブを一切しないです。溜まったら古いセーブデータをマニュアルで捨ててます。 関連の有無は謎ですけど。

 

30日(31日)待機でCTDする

QASmokeとかHavenBag内とか隔離されたセルで行えば大丈夫だと思います。MODの影響でQASmokeがクリーンでない場合もあるので、個人的にはHavenBagがおすすめ。

 

MODを抜いたことによるCTD

厳密には確定CTDだと思いますが、他のランダム要素によりランダムCTDに見えるかも。セーブデータからスクリプト削ってれば大丈夫だとは思いますが。例えばスポーン数やポイント増加系MOD、クリーチャー追加MOD等を外した場合、セルのリセットをしないとCTDすることがあります。30日待機等でセルのリセットをしてみてください。

 

 SKESE.iniに以下を追加することでスクリプトの残骸をある程度処理してくれるらしいです。1.6のどこからかで実装された機能だったと思います。古いSKSEあえて使ってる人いないと思いますが。

[General]
ClearInvalidRegistrations=1

 

CTDにはならないですが、MODを抜くことによって起こる不具合の例はこちら。

 

長時間プレイしたセーブデータによるCTD

各地を幅広く回って長時間遊んだセーブデータだと、クエストやらCritterやら様々なスクリプトがひしめき合って、とっても不安定になっているかもしれません。ある意味一番面倒なCTD原因かもです。USKP等のバグフィクスを入れてても、こればっかりは回避が難しいと思います。

コンソールから「pcb」して、切り離したセル情報をバッファから削除することで改善することがあるかも?しれません。気休め程度にどうぞ。

新しいエリアを開拓した途端にCTDしまくり等の場合は、元々潜在してたCTD原因が、新たなオブジェクト生成と共に出てきただけの可能性が高いです。ただの環境問題だと思います。

 

誤った方法のクリーニングによるCTD

適当にMODクリーニングをした場合、かえって状況が悪化することがあります。片っ端からロードしてクリーニングを適用してるだけの人は要注意

必ずクリーニング対象MOD1つだけをロードして、1個づつクリーニングしてください。非常に面倒くさいですが、そうしないとえらいことになります。詳細は別記事にて。

クリーニング禁止MODもあるので、あわせて注意。

 

クリーニングを全くしてない人は、なるべく実施することを推奨します。改造行為な以上、絶対やれとは言えない所ですが。

CTDに直結する所を目視で探すのは骨ですが、無意味に書き戻されるITM editはTES5Editで自動的に削除できます。一部Deleted Referenceも対処できる場合があります。繰り返しになりますが改造の一環なので注意してください

 

長くなりましたがとりあえずこんなもんで。

 

関連記事