How to Use Texture Group Details With Scalability and Platform Settings

Hello. In order to better control our texture groups’ memory and performance impact, we are hoping that we can use something in our scalability .ini profiles such that lower the scalability or texture quality level could achieve this. We are already setting up various texture group defaults in the DeviceProfiles.ini as described in the documentation found here https://dev.epicgames.com/documentation/en\-us/unreal\-engine/texture\-format\-support\-and\-settings\-in\-unreal\-engine, but would like more control.

I have tried setting up something like the following, but it doesn’t appear to work as I hoped:

[TextureQuality@2]
TEXTUREGROUP_World=(MinLODSize=1,MaxLODSize=4096,LODBias=2)

[TextureQuality@3]
TEXTUREGROUP_World=(MinLODSize=1,MaxLODSize=8192,LODBias=0)

Ideally we could set something like this up in all of our platform scalability .ini’s to allow us to have better control over texture’s impact on performance and memory, with the granularity of doing it only to known problematic texture groups.

Please advise if this is possible and we’re just missing something, or if there is something else that can be done to achieve this? Thank you for any advice or information you can provide!

Hi Will,

Can you please elaborate more on what exactly is not working for you with the changes you made to the texture scalability settings? That way, I can help you get what you need out of the texture scalability groups.

Okay, thanks for the info. What is your texture setup looking like? Are you using virtual textures at all? The texture group settings are meant to be used as hints to our texture streaming system, but they can often be overridden or ignored by other parts of the engine. I also need to double-check if you can set the Texture Group details in the scalability settings.

Can you also provide more details on the problematic textures you found? My first intuition is to individually tweak those before devising a sweeping solution through the scalability settings.

Hi Tim, thank you for your reply. Simply put we aren’t seeing any change when we change the scalability settings (ie use a cvar for scalability or our own in game settings menu) in regards to the texture groups. I would expect from the code snippet above that when changed from Scalability/TextureQuality 3 to Scalability/TextureQuality 2 for the textures we’ve placed in TEXTUREGROUP_World to start using different mips, have different max heights/widths and size in memory. Maybe the syntax we’re using here is wrong or I’m misunderstanding what these settings are for?

Ultimately we’d just like to be able to optimize the texture memory utilization per texture group per scalability level.

Could you provide more details as to this part here: “but they can often be overridden or ignored by other parts of the engine”. If we cannot use texture group detail as a part of scalability settings out of the box that is unfortunate but manageable, however we would really like to at least be able to tune texture groups per platform. As it stands by settings up different texture group details with various [Device Name Device Profile] settings in BaseDeviceProfiles.ini we’re not seeing any change in our AB tests between platforms or on the same platform after changing our texture group details.

To answer your other questions. Most if not all of our textures are virtual textures, and the issue has less to do with individual problematic textures and more that we’re globally over our memory budgets, and will likely need to downres textures. We can do that manually, but that won’t be per platform/scalability level.

Could you provide more details as to this part here: “but they can often be overridden or ignored by other parts of the engine”

I found a comment in the source code in UTextureLODSettings::CalculateLODBias that mentioned that textures with the NoMipMapsflag set can ignore the TG settings, specifically the MaxLODSize (I pasted a screenshot of the comment below). Since you are using mostly virtual textures, though, that should not be an issue, since VTs are required to have mips.

[Image Removed]

It is strange that your texture group settings are not being applied correctly, though. Does applying a strong mip bias, for example, setting a LODBias such that you go down to a 1x1 mip, not affect the look of your game at all? If that is the case, could you isolate your setup into a self-contained project you can send over for further investigation?