7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

一人UE4 & C++Advent Calendar 2019

Day 4

【UE4】「Compiling Shaders」の速度改善法

Last updated at Posted at 2019-12-03

最初に

この記事はUE4にて「Compiling Shaders」が走る際の速度改善を試す方法の記事となります。間違いや更に良い方法があった場合にはそっとTwitter( @ろっさむ )やコメント、修正リクエストなどでお知らせ頂けるととても有難いです。

作業環境

記事内で使用する作業環境は以下の通りとなります。

  • Unreal Engine:4.23.1
  • Visual Studio:Community 2017 or Community 2017 for Mac or Enterprise 2019

まず「Compiling Shaders」が全然終わらない!

→IncrediBuildをアンインストール

アンインストール手順

IncrediBuildのアンインストール手順は少し複雑なので一応残しておきます。

  1. Visual Studio InstallerからインストールしているVisual Studioの変更を押下し、インストールの詳細内にある、C++関連のオプションでIncrediBuild - ビルドのアクセラレーションが有効になっていないか確認してください。なっている場合はチェックを外して変更を行ってください。
  2. 次にC:\Program Files (x86)にあるIncrediBuildフォルダ下にあるinstallを起動します(ここでフォルダ移動などしてパスが異なる場合はC:\直下に置きなおしてください。じゃないとゴミが残ったり削除しきれません)。
  3. ロゴマークなどが出てくる画面になりますので、Nextで進んでいってください。そうするとアンインストールする項目がでるはずなので、そちらを押下し、削除します(もし出ていない場合は一旦I、Installをし直してから再度お試しください)。
  4. 念のためにPCの再起動をかけといてもいいと思いますが、これでUE4起動し、新規マテリアルを開いても無事シェーダーコンパイルが通るようになると思います。

→IncrediBuildの無効化

無効化手順

  1. ..\UnrealEngine\UnrealBuildTool下にあるBuildConfiguration.xmlの記述内で、bAllowXGEという項目を無効にします。
<?xml version="1.0" encoding="utf-8" ?>
 <Configuration xmlns="https://www.unrealengine.com/BuildConfiguration">
     <BuildConfiguration>
         <bAllowXGE>false</bAllowXGE>
     </BuildConfiguration>
 </Configuration>

→Avast Antivirusをアンインストール

shaderのコンパイルをブロックしている、という報告がいくつか発見できました。

心当たりがある人は一度アンインストールしてから検証してみてください。

速度向上その1(XGEShaderCompile)

XGEシェーダーコンパイルを無効にします。

ロックアップが発生しなくなり、可能な限りのCPUを使用してシェーダーをコンパイルすることができます。

C:\Program Files > Epic Games\UE_xxx\Engine\Config\ConsoleVariables.inir.XGEShaderCompile= 0をコメントから外す。

速度向上その2(Shader Compilerの優先度を上にする)

※こちらの方法は低スペックのPCで行わないでください。Shader Compilerの優先度を上げると他のプログラムの優先度が低くなって遅延やフリーズが発生する可能性があります。

Engine > Source > Runtime > Engine > Private > ShaderCompiler > ShaderCompiler.cppを開いて、1770行目付近にある変数の値を変更します。

// int32 PriorityModifier = -1; //bellow normal
int32 PriorityModifier = 1; //bellow normal

こうすることでシェーダーコンパイル処理の優先順位が上がります。

7
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?