CVars (like r.HLOD.DistanceOverride)

I’ve encountered an inconsistency in how certain CVars apply via Android device profiles, and I’d like to better understand the underlying behavior.

I was testing HLOD transition behavior on Xiaomi Redmi 9 (Mali_G52) using the CVar:

+CVars=r.HLOD.DistanceOverride=“1000,10000”

I initially placed this line in the general profile:

`[Android_Low DeviceProfile]

DeviceType=Android

BaseProfileName=Android

+CVars=r.HLOD.DistanceOverride=“1000,10000”`But it had no effect — no observable difference in performance or HLOD transition behavior.

However, when I moved the same setting to the exact GPU-specific profile:

`<[Android_Mali_G52_Vulkan DeviceProfile]

DeviceType=Android

BaseProfileName=Android_Low

+CVars=r.HLOD.DistanceOverride=“1000,10000”`it worked immediately.

My core questions are:

Why did this CVar only apply when set in the most specific device profile?

Is there a system-level reason why certain CVars like r.HLOD.DistanceOverride

are ignored when set in a parent profile like Android_Low

Are there classes of CVars that bypass or delay inheritance?

Is this tied to how early the engine evaluates the value?

How can developers reliably distinguish between CVars that must be set in device-specific profiles vs those that inherit normally?

Are there recommended practices or tooling (logs, engine behavior, metadata) to help identify and manage this?

Hi Levan,

Can you confirm your config file setup? Are the additions to Android_Low and the definition of Android_Mali_G52_Vulkan added t the game side Config/DefaultDeviceProfiles.ini or edited into the engine side Config/BaseDeviceProfiles.ini.

Best regards.

Hello Stephane,

I can confirm that we define all our profiles in in the game: Config/Android/AndroidDeviceProfiles.ini.

We deleted all the specific device profiles from Config/BaseDeviceProfiles.ini so we can easier manipulate them in the game repo.

I’m attaching both these files.

Hi Stephane,

I wanted to follow up with an update: after further testing, I identified the root cause of the confusion.

It turns out that when using:

+CVars=r.HLOD.DistanceOverride="1000,10000"

…and the project only includes HLOD Level 0, the engine applies the last value (10000) to HLOD0 — not the first one (1000), which is what I originally expected.

The confusion came from testing across multiple maps:

  • On one map, HLOD clusters had a Min Draw Distance of ~17,000, so when I applied the override (which resulted in 10000), the change was noticeable.
  • On other maps, the clusters already had Min Draw Distance = 10000, so applying the override (still interpreted as 10000) made no visible difference, leading me to believe the override wasn’t working — especially when set via Android_Low

I am texting to notify that I don’t need any further assistance.

Appreciate your help and time!

Best regards

Hi Alexander,

I created a test project with the attached device profiles, adding +CVars=r.HLOD.DistanceOverride=“5,6” to the Android_Low profile and running on an Android_Low (Adreno 512) device. Confirmed in debugger that the correct CVar was being read at ALODActor::ParseOverrideDistancesCVar(). Perhaps the issue isn’t related to the device profile system?

Best regards.