【UE100日チャレンジ】Unreal Engineがフリーズ!?解決策は?
初学者がUnreal Engineによるゲーム制作に100日取り組んで、どこまでプロの開発者に近づけるのかを検証する本企画。今回は第9弾となります。
前回、GPUのクラッシュが原因でフリーズが発生し、これまで開発していたプロジェクトが開けなくなった筆者。今回の記事では、その問題の解決方法を解説します。
企画進行中、フリーズに直面!
Unreal Engine100日チャレンジに挑戦している、Neruです。
この企画は、Unreal Engineの初学者である筆者が、100日間の学習でどれだけのものを作れるようになるのかを検証するチャレンジ企画です。
前回は、マテリアルやパーティクルシステムなど、ゲームのビジュアルに関する事項を学習しました。いずれもグラフィックに関する事項であり、ゲームのビジュアル面を大きく進化させることができました。
しかし、グラフィック処理が重くなったことが原因で、フリーズする場面が増加。一時期は、エディタを開くことさえできなくなってしまいました。
今回の記事では、同じような問題を抱えているユーザー向けに、問題が発生した経緯と、その解決法について説明しています。
問題が発生した経緯
今回発生した問題は、グラフィック処理が重い際や、複雑なマップをロードしようとした際に、Unreal Engineのエディタがフリーズしてしまう、というものです。
一時期は問題が深刻化し、デフォルトのマップをロードしているときにもフリーズが発生するようになってしまいました。これまで制作していたプロジェクトが開けられなくなってしまったのです。
こうした問題が発生したとき、Unreal Engineは自動的にクラッシュレポートを作成します。クラッシュレポートの内容を参照することで、フリーズの原因がわかります。
レポートには、「GPU Crash dump Triggered」という文があり、GPUに問題があることが窺えます。フリーズの原因は、マップのグラフィック処理が複雑化したことによるGPUへの負荷の増加でした。
この問題を解決するためには、GPUへの負荷を下げる必要があるということが、レポートからわかりました。
効果的だった対策|設定ファイルを手動で編集する
この問題に対して効果的だった対策が、「Unreal Engineの設定ファイルを手動で編集して、グラフィック処理を軽くする」方法です。
Unreal EngineでGPUの負荷を軽減するには、画質や光の再現などの品質を下げたり、アンチエイリアスを無効化したり、とにかくエディタ上でのグラフィック処理を単純化することが重要です。
エディタ上の品質を下げることで、実際のゲーム画面よりも低品質なグラフィックになってしまうことが懸念点ですが、グラフィックを作りこむ場合以外は大きな問題になりません。
エディタの画質を下げてもゲーム作り自体は可能です。また、最終的なゲームの画質も、エディタの画質には左右されないので、その点も心配する必要はありません。
エディタが開けない場合はどうするか?
今回のケースでは、プロジェクトを開こうとしても、最初のマップをロードする段階でフリーズが発生してしまいました。通常はエディタから画質等の設定ができるのですが、このような場合はそれができません。
そのため今回は、プロジェクトフォルダ内の、「config」というファイルから構成設定にアクセスして、設定の書き換えを手動で行いました。
「config」フォルダには「DefaultEngine.ini」というファイルがあります。「ini」という拡張子は、「初期化ファイル」(initialization file)を表し、設定や構成情報を保存するために使用されます。
iniファイルはテキストの形で保存されているため、テキストエディタを使ってファイルを開き、該当部分を書き換えることで、設定の変更ができます。
「DefaultEngine.ini」には、エンジンの動作やレンダリング、ネットワーク、物理演算、オーディオなど、さまざまなエンジン関連の設定が含まれているので、書き換えることでエディタの画質設定も可能です。
具体的には、以下のような変更を加えました。
実行した対策
- アンチエイリアスの低減:
r.AntiAliasingMethod=0 ; アンチエイリアスを完全に無効化
r.Mobile.AntiAliasing=0 ; モバイルでのアンチエイリアスを無効化 - シャドウ関連の品質を下げる:
r.ShadowQuality=0 ; シャドウを無効化
r.Mobile.EnableStaticAndCSMShadowReceivers=False ; モバイルでのシャドウ受け取りを無効化 r.Mobile.AllowDistanceFieldShadows=False ; ディスタンスフィールドシャドウを無効化 - テクスチャやエフェクトの品質を下げる:
r.TextureQuality=0 ; テクスチャ品質を最低に
r.EffectsQuality=0 ; エフェクト品質を最低に
r.PostProcessQuality=0 ; ポストプロセスの品質を最低に
ただ、iniファイルを誤って操作すると、予想外の不具合が発生する可能性もあるので、あらかじめバックアップを取っておいたほうが安全です。コピーを取り、わかりやすい場所に保存しておいたほうが安全でしょう。
この対策により、再びプロジェクトを開くことができるようになりました。
効果が実感できなかった対策
iniファイルの編集もいくつかの対策を講じていましたが、その中には直接的な効果を感じなかったものもいくつかありました。
大きな効果を実感できなかったのは、①Unreal Engineのアップデートと、②GPUのドライバー更新です。
どちらも、ソフトウェアをアップデートすれば、より効率的な処理が可能なのではないかと考え実行しました。ただ、これらの対策によって直接的にフリーズを避けることはできませんでした。
ソフトウェアの更新自体は、グラフィック処理の効率化のためには有効です。一方で、ソフトウェアのフリーズが発生するレベルで負荷がある場合、ソフトウェアの更新で問題が解決するかどうかは不透明です。グラフィック負荷によるフリーズの対処には、ソフトウェアを更新する前に、画像処理を軽減するほうが、筆者のケースでは有効でした。
注意!ノートPCではGPUの交換は困難
今回とった対策は対症療法的なもので、起動や操作はできるようになりましたが、エディタの画質や機能は抑えた状態で作業する必要があります。
一連の問題はGPUの性能不足で生じたので、根本的な解決のためには、GPUの性能を改善することが一番です。
ただ、ノートPCの場合、GPUの性能向上は困難です。デスクトップPCならGPUの交換ができますが、デスクトップPCとは異なり、ノートパソコンのGPUは通常マザーボードに直接はんだ付けされており、交換できません。
外付けのGPU(eGPU)を使用するという手もありますが、こちらはThunderboltによる接続が必須で、内部に組み込むGPUよりも性能効率に劣り、さらにかなり高価であるという欠点があります。
外付けのGPUを買うなら、デスクトップPCを新しく買いなおしたほうが、パフォーマンスが良いかもしれません。
Unreal Engineでグラフィック制作に力を入れた作業を継続的に行う場合、ノートPCだとGPUの性能が追い付かなくなる可能性があることに留意が必要です。
まとめ
PCのGPU性能が十分でない場合、グラフィック処理が重い動作は処理が追い付かないことがあり、ひどい時はデフォルトマップを読み込んでいる段階でフリーズが発生します。
グラフィック処理を原因にフリーズが発生している場合は、エディタの画質を下げ、処理を簡略化することで負荷を下げることができます。
エディタの起動さえままならない場合は、バックアップを取ることを忘れず、コンフィグを書き換えることで対処が可能です。
ノートPCの場合、GPUのアップグレードを行うことは難しく、外付けGPUは効率や価格に問題があります。
グラフィック制作に力を入れたい場合は、GPUの交換が可能で、より簡単に問題を解決できるデスクトップPCの使用をおすすめします。
これから、アウトプットを完成させていきたいと思います。Unreal Engine100日チャレンジもいよいよ大詰めです。引き続きよろしくお願いします。
ゲームのグラフィックの向上。