パーティクルが最初にスポーンした時にフリーズする

iOS向けに、UE4.23.1、ブループリントプロジェクトで開発中です。

iOSの実機にデプロイしたゲームを実行すると、デプロイ後初めてスポーンしたパーティクルがあるとその直後に一瞬フリーズ(ヒッチ)が発生します。

その後は同じパーティクルがスポーンしても上記の現象は発生しません。

また一度スポーンしたパーティクルについては、ゲームアプリケーションを再起動した場合でも上記の現象が再現しなくなります。

下記の投稿でも同様の現象が報告されていますが、解決に至っていないようです。

解決方法はないでしょうか?

1 Like

モバイルデバイスでUE4製のアプリケーションを実行した場合、対象Materialの初回ロード時に実機上でShaderCompileが走ります
CharacterのMesh等のMaterialはLevelのロード時にShaderCompileが起こるため目立ちませんが、Particleに関するMaterialはParticleが発生する瞬間にShaderCompile起こることになるため特にHitchが目立ちます
2回目以降はCompile済みのShaderを使うため、Hitchが起きません

解決策としてはPSOCacheの機能を使用して、ShaderCompileの実施タイミングをずらすことでしょう
下記スライドが参考になるかと思います

1 Like

PSO キャッシングという方法が解決策として有効そうですが、リンクの手順の5で設定するConsoleVariablesのr.ShaderPipelineCache.Enabledという項目がUE23.1(25.4でも確認)に存在しませんでした。

代替の設定方法はないでしょうか。

Renderingのカテゴリにちゃんとありますよね?(UE4.23.1、UE4.25.4で確認)
なお、 追加 しないと入力項目は出ませんよ

322809-2020-11-23-09h57-07.png

回答ありがとうございます。

UE4.23.1、4.25.4でともにこのような状態です。
追加 とはどのような操作のことでしょうか?

DefaultEngine.iniに設定を記述しても機能するようでしたので、ひとまずそちらで対応しました。

翻訳の不具合か、Editorが日本語版だと出てこない項目があるようですね
追加とは+ボタンを押してする操作のことです
どのように存在しないのか明記されていなかったための指摘でした

ありがとうございます。
ご指摘の通り、エディタの言語を英語にしたところ問題なくリストアップされました。

最終的に、UE4.25.4にてPSOCacheを利用したシェーダーのプリコンパイルを有効化して問題を解決できました。

UE4.23.1および、4.24.3ではProjectSettings>Packagingの

Shared Material Shader Code をオンにするとデプロイ先のiOSデバイスでアプリケーションを起動した直後にクラッシュしてしまい、PSOCacheの機能を利用できませんでした。

両バージョンとも空のプロジェクトにデフォルトで生成されるNewMapレベルのみの状態でデプロイして確認しましたが同様でした。(テストに使用したデバイスはiPhoneXs)

本件はこれで解決済みとさせていただきます。

サポートしていただき、ありがとうございました。