6
6

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.

Epic Games Japan #3Advent Calendar 2019

Day 4

[UE4]r.InvalidateCachedShadersで全シェーダの再コンパイルを強制する

Last updated at Posted at 2019-12-03

r.InvalidateCachedShaders

内部でシェーダコードを書き換えたりした際や、マテリアル内部のシェーダを確実に更新したい場合があります。そんなとき便利なのが

r.InvalidateCachedShaders 1

というコマンドです。r.InvalidateCachedShaders に0以外の数字を与えることで、ShaderVersion.ushというファイル内部に下記の様にコメントアウトで記載されているGUIDを別のランダムな数字に更新します。

(ShaderVersion.ushの中身)

// This file is automatically generated by the console command r.InvalidateCachedShaders
// Each time the console command is executed it generates a new GUID. As this file is included
// in Platform.ush (which should be included in any shader) it allows to invalidate the shader DDC.
// 
// GUID = 3FC0C8634C638C1980F7FFBE48ABCB58

実は、すべてのシェーダはこのShaderVersion.ushというファイルをincludeしております。ですのでこのファイルが更新されることで全シェーダが更新されたということになるのです。

RecompileShaders allじゃだめなの?

UE4は別にRecomipleShadersというコマンドを持っています。

RecompileShaders all

こちらにallを指定することでシェーダをコンパイルしようとしてくれますが。。。既にDDC内部にそのシェーダキャッシュがある場合はそのシェーダキャッシュを参照します。

※UE4は、ビルドデータやクック(各種プラットフォーム向けデータコンバートのUE4内部での呼称)されたデータの一部をDDC(Derived Data Cache)にキャッシュしています。マテリアル(シェーダ)のコンパイル結果もDDCに保存されています。

全シェーダの再コンパイルのためにDDCを消す人もいますが、そうするとシェーダ以外のキャッシュ情報も同時に削除してしまい他のいろいろなもの再ビルドやコンパイルも走ってしまう可能性があるので注意が必要です。

6
6
0

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
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?