D日記

モーションアーティストの技術ブログだよ。日常も書くよ。

MENU

【UE4】シェーダーコンパイル中にPCでストレス無く作業をする(shader compile stress free)

こんちわ(^ν^)
今回は初UE4記事(?)です!


UE4のサンプルプロジェクトなどを開くと結講なシェーダーコンパイルが走りますよね・・

f:id:ponta565:20180507225147p:plain


シェーダーコンパイルが走っている途中でも、無理やり作業は出来なくないのですが、
動作がどうしても重くなりがちです。
コンパイル中にCPUがMAXで使われているからですね。

そういう時は、タスクマネージャーからシェーダーコンパイルの処理を行っているCPUの割り当てを少し変更することでPC上での作業がすこし快適になりますよ!


手動でやる方法

ShaderCompileWorker.exe を右クリックし「関係の設定」
f:id:ponta565:20180507225626p:plain


使用するCPUから「CPU 0」のみのチェックを外す。
こうすることで、シェーダーコンパイルでCPU0が使用されなくなります。
f:id:ponta565:20180507225645p:plain


ShaderCompileWorker.exe は私の環境では3つくらい立ち上がっていたので、全てに対して同様の処理を行います。

これで、シェーダーコンパイル中に比較的快適に作業ができるようになったと思うのですが・・・
使用するCPUを減らしているので、シェーダーコンパイル速度は確実に遅くはなっているでしょう。

ちょっと自動化する

いちいち、3つのプロセスを選択して関係の設定を変更するのはめんどいと思います。

ということで、まずはスクリプトで書いてみようと思います。

始めはコマンドプロンプトで行けるかな?って思ったんですが、
すでに起動しているプロセスを取得する方法がわからなくて、PowerShell を使うことにしました。
PowerShell を使うのは初めてでドキドキします゚(゚A゚;)ゴクリ



PowerShellを起動
f:id:ponta565:20180509222350p:plain


今回ご用意したスクリプト。
ざっくり言うと、0コアを使用しないようにするスクリプトです。
( 4,8,16コアで確認済み )
UE4 の シェーダーコンパイル時に0コアを使用しないようにする


上記スクリプトをペタッと貼り付けてEnter(タァーーーン!)
f:id:ponta565:20180509222527p:plain


これで、0コアのみが使用されていない状態になりました
多少の作業ならシェーダーコンパイルしながらでもできますね(^_^)

【おまけ】シェーダーコンパイルに使用するCPUを更に絞りたい場合

ちなみに「シェーダーコンパイルをもっとバックグラウンドで処理させたい!」って人は、
ビットマスクを書き換えることで使用するCPUを更に制限できます。
(ビットマスクって言い方あってるのかな・・・)



スクリプト内の、[$bitMask = ***] の箇所を書き換えるのです。
***の部分は10進数でないといけません。

switch( $coreCnt ){
    2{$bitMask = 2}
    4{$bitMask = 14}
    8{$bitMask = 128} # <- 例えばここを128に書き換えると、cpu7しか使われなくなる!
    16{$bitMask = 65534}
    default{ echo "このCPU はサポートしていません"}
}




チェックボックスを2進数で考えてから、10進数に変換するとイメージしやすいです。
f:id:ponta565:20180509225407p:plain

変換は下記サイトを利用すると楽ですよー
2進数、8進数、10進数、16進数相互変換ツール

アイコンWクリックでできるようにする

ここまで書きましたが、毎回 PowerShell を起動してコピペするのは面倒ですよね・・・

ということショートカットのWクリックでできるようにしてみます(⌒,_ゝ⌒)



***.ps1 というファイル名で保存して、ショートカットを作成します。
f:id:ponta565:20180509232531p:plain


そして、ショートカットのプロパティを開いて、パスの前に下記コマンドを入力します。

powershell.exe -ExecutionPolicy RemoteSigned -File "ここはファイル絶対パス"

f:id:ponta565:20180509232614p:plain


これで、ショートカットをWクリックすることで、シェルスクリプトが走るようになりました(^ν^)
※シェルスクリプトを実行するには、なんかポリシーの設定とかがいろいろいるみたいです。



コンパイル中にどうしても作業したいという人はお試しあれ。
※ただしディスクアクセスは減らない!


最近このCPUに変えました。
第一世代の i7 860 から乗り換えたので、体感10倍位は早くなっている気がします。