hmse
(誠悟 濱浦)
October 30, 2017, 12:20pm
1
UE4.17.2を使用しています。Android、GLES3.1 モバイルレンダラを使用しています。
エフェクトの初回再生時や、レベルストリーミングの読み込み~表示時にヒッチが多発して困っています。
(iOSでは未確認)
stat DumpHitches コマンドを使用して原因を調べたところヒッチ時には「Shader link time - STAT_OpenGLShaderLinkTime - STATGROUP_OpenGLRHI - STATCAT_Advanced」の欄に時間を要していることが分かり、UE4のソースコードを確認してゲーム中に表示物のシェーダがキャッシュされていないとその場でコンパイルするといった挙動をすることを確認しています。
この件でAnswerhubを調べたところ似たような現象に対する質問を確認したのですが、この回答では「ロード画面の裏で必要なものを予め描画してコンパイルを通しておく」というような解決策だったのですが、質問から時間が経過していることや、対策がどちらかというとハック的な手法に感じましたので、改めて現在この問題に対する解決策があればご教示頂けませんでしょうか。
よろしくお願い致します。
PierPop
(Pier Pop)
October 30, 2017, 2:42pm
2
詳細なprofile、statの結果の値、リソースの構成が分からないので具体的なアドバイスが難しいですが、レベルストリーミングにおけるヒッチには4.16から実装されたAssetManagerを活用すると効果があると思います。下記の記事にて簡単な使い方がまとめられています。エフェクトにも言えることですが、アセットの初回展開時には特にオーバヘッドが発生します。単純に使用するケースだけ展開するのでは都度ヒッチが発生するので、常駐、プリロードの検討もお勧めします。
hmse
(誠悟 濱浦)
November 14, 2017, 11:13am
3
ご回答ありがとうございます。
結果として、AssetManager等試しましたが状況は改善していませんでした。
さらに調査したところいくつかのエフェクトの再生時に動的ポイントライトを使用しており、レベルストリーミングのほかその際にヒッチが発生することがわかりました。
シェーダコンパイルに時間を要していたことから試しにオフにしていた「Use Shared Movable Point Light Shaders」をオンにするとヒッチが収まりましたので、このオプションを使用することにして解決しました。