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