Hi everyone. I recently started working on the graphics settings for my mobile game. Thus, started learning about the thing that terrified me all the time but the time has come, device profiles.
Honestly, I spent last 8 hours trying to make anything to work (googling, LLMs) with no result and I need an advise.
What I want to achieve is simple: When the game is launched on the device for the first time → Get Active Device Profile Name → check if it contains Low/Mid/High → Run some logic (apply Low/Mid/High settings) and set variables (like foliage density float). Later, player can change graphics from the settings screen by selecting Low/Mid/High presets.
Applying those settings manually from the settings screen is not a thing. Simple logic and it’s done. But first game launch on the device and applying one of those presets by default is something that I cant conquer.
What I did is created a DefaultDeviceProfiles.ini inside my project/Config folder and literally tried everything (for Android for now):
- Creating my own device profiles like Android_Tier_High, Android_Tier_Mid etc. where I put +CVars=t.MaxFPS=30 just to text if it works. I used a Get Active Device Profile Name node to see if my *.ini file overwrites the built in engine profiles. Nope, it just keeps showing me the Android_Adreno6xx_Vulkan profile (this is what the game detects on my testing device (Redmi None 10)). But my custom profiles actually were visible in the Device Profiles window in UE. DefaultDeviceProfiles.ini content looks like this:
[Android_Tier_High DeviceProfile]
DeviceType=Android
BaseProfileName=Android_High
+CVars=t.MaxFPS=30
[Android_Tier_Mid DeviceProfile]
DeviceType=Android
BaseProfileName=Android_Mid
+CVars=t.MaxFPS=30
[Android_Tier_Low DeviceProfile]
DeviceType=Android
BaseProfileName=Android_Low
+CVars=t.MaxFPS=30
[/Script/AndroidDeviceProfileSelector.AndroidDeviceProfileMatchingRules]
+MatchProfile=(Profile="Android_Tier_High",Match=((SourceType=SRC_GpuFamily,CompareType=CMP_Regex,MatchString="Adreno \\(TM\\) (7[0-9][0-9]|6(5|6|8|9)[0-9])"),(SourceType=SRC_VulkanAvailable,CompareType=CMP_Equal,MatchString="true")))
+MatchProfile=(Profile="Android_Tier_High",Match=((SourceType=SRC_GpuFamily,CompareType=CMP_Regex,MatchString="^Mali\\-G(77|78|710|715)"),(SourceType=SRC_VulkanAvailable,CompareType=CMP_Equal,MatchString="true")))
+MatchProfile=(Profile="Android_Tier_High",Match=((SourceType=SRC_GpuFamily,CompareType=CMP_Regex,MatchString="Samsung Xclipse 9[0-9][0-9]"),(SourceType=SRC_VulkanAvailable,CompareType=CMP_Equal,MatchString="true")))
+MatchProfile=(Profile="Android_Tier_Mid",Match=((SourceType=SRC_GpuFamily,CompareType=CMP_Regex,MatchString="Adreno \\(TM\\) 6(3|4)[0-9]"),(SourceType=SRC_VulkanAvailable,CompareType=CMP_Equal,MatchString="true")))
+MatchProfile=(Profile="Android_Tier_Mid",Match=((SourceType=SRC_GpuFamily,CompareType=CMP_Regex,MatchString="^Mali\\-G(68|72|76)"),(SourceType=SRC_VulkanAvailable,CompareType=CMP_Equal,MatchString="true")))
+MatchProfile=(Profile="Android_Tier_Low",Match=((SourceType=SRC_GpuFamily,CompareType=CMP_Regex,MatchString="Adreno \\(TM\\) 6(1|2)[0-9]")))
+MatchProfile=(Profile="Android_Tier_Low",Match=((SourceType=SRC_GpuFamily,CompareType=CMP_Regex,MatchString="Adreno \\(TM\\) 5[0-9][0-9]")))
+MatchProfile=(Profile="Android_Tier_Low",Match=((SourceType=SRC_GpuFamily,CompareType=CMP_Regex,MatchString="^Mali\\-T[6-8]")))
[Android_Default DeviceProfile]
DeviceType=Android
BaseProfileName=Android_Tier_Low
- I tried simply overwriting a specific profile for Android_Adreno6xx_Vulkan like this:
[Android_Adreno6xx_Vulkan DeviceProfile]
+CVars=t.MaxFPS=30
No result. Nothing I set inside *.ini is being applied as if the engine completely ignored it.
- I also tried to rename DefaultDeviceProfiles.ini into BaseDeviceProfiles.ini. No changes.
Any ides what am I doing wrong? Am I missing something? Any help would be appreciated because I already lost faith in everything after 50+ on device tests and whole day of rewriting that ini file with literally 0 result.