ShaderPlatformQualitySettings don't seem to work for SF_METAL

Hi,

I’m trying to turn on fully rough shaders for quality level 0 for some metal devices. Here’s my ini settings in DefaultEngine.ini:

[ForwardShadingQuality_SF_METAL ShaderPlatformQualitySettings]
QualityOverrides[0]=(bEnableOverride=True,bForceFullyRough=True,bForceNonMetal=False,bForceDisableLMDirectionality=False,bForceLQReflections=False)
QualityOverrides[1]=(bEnableOverride=True,bForceFullyRough=False,bForceNonMetal=False,bForceDisableLMDirectionality=False,bForceLQReflections=False)
QualityOverrides[2]=(bEnableOverride=False,bForceFullyRough=False,bForceNonMetal=False,bForceDisableLMDirectionality=False,bForceLQReflections=False)

The materials do get compiled as fully rough, but it’s applying the fully rough materials even when DetailMode is set to 1 and 2 on device. It’s as if it’s not creating non-fully rough versions of the materials.

Regards,

Ryan.

Hi, unfortunately the quality overrides currently only work on “feature level ES2” which the OpenGL ES renderer uses, but our Metal renderer uses “feature level ES31”.

We hope to have this fixed for 4.13. The ticket for this is UEMOB-155.

Would you be able to point me in the right direction for fixing this myself. I’ve been looking over the code for this system and I can’t figure out why it doesn’t already work. I can’t find the code that restricts this to feature level ES2. The code that reads the settings from the config seems to handle other shader platforms when it builds the object name with “ForwardShadingQuality_” + PlatformName.

You’re correct, the shader code does to support the QL overrides for any shader platform (though only the mobile shaders look for the overrides), but we only expose the settings UI for the ES2 iOS and Android and we haven’t tested it for other shader platforms.

If you disable metal in your project and use ForwardShadingQuality_GLSL_ES2_IOS, do fully rough and non-fully rough work as expected for each of the quality levels?

Unfortunately our materials don’t seem to run on OpenGL. I’m getting some kind of float buffer assert because it’s too big. Probably too many parameters? If we launch before 4.13 we’ll just not support some of the lower end Metal devices until we can upgrade.