Hi there,
We are using Unreal 5.3.2 to maintain some legacy titles with large amounts of data between levels with complex materials. We are not using Lumen or Nanite in this project. We do use RVT on and off between these projects and the following issue presents itself despite this setting being enabled or not. We are not using Virtual Textures for the materials impacted by the following issue.
We have encountered issues in these builds between loading and unloading levels where it appears that some material proxies may be created before the resources they need are fully loaded. This ONLY occurs when iostore is enabled. Portions of materials show up partially bright white or grey (not default material, just like they are missing some data from the materials themselves) when this issue exhibits itself. Attached is an image of how the issue can present itself.
We need to keep iostore enabled for certain platforms to improve loading times on them, so disabling iostore is not an option for us here.
A workaround we found for resolving these issues for now is firing off UMaterialInterface::RecacheAllMaterialUniformExpressions(false) after a level load is complete, but that isn’t the ideal solution (ideally, the solve is that something related to async loading code underneath all of this can just make sure everything related to material proxies are created before the proxies themselves are made). Simply firing off this code after seeing the issue present itself instantly resolves it for the time-being, until another level unload/load has completed (to which you’ll then need to re-run the code).
We’re asking for two things:
- Is there a way to check if a build was packaged with iostore enabled? We only want to run this workaround code between loading with UMaterialInterface::RecacheAllMaterialUniformExpressions(false) if we know the build was made with iostore, but we cannot find any documentation on this (there only seem to be checks during cook/packaging for this flag that we can find, not at runtime), and
- Are there any ideas as to how we could resolve this at a lower-level? Maybe some async loading or iostore-related code changes related to resolving issues like this with materials using iostore that went in after 5.3.2 that we could merge back into our copy of 5.3.2?
We do not have a sample project to reproduce this issue, nor would it be possible for us to due to what we perceive to be some complexity with how large our project and assets are here.
Thank you,
Hannah