Safe zone/title area confusion

It seems UE4 has an inconsistent approach to safe zones/title-safe/action-safe areas for rendering content on-screen.

First, we have FDisplayMetrics::GetDisplayMetrics() which returns platform-specific title + action safe area information, which obides by PS4/Xbox One TRCs. This is used by the SSafeZone widget, as seen in UMG and the ShooterGameLoadingScreen example. However, on other platforms like Windows/Mac/Linux there is no default safe area information specified via this function which is a bit weird, especially if you’re using this safe area information to frame your HUD elements nicely and want your game code to be cross-platform without extra game-side effort.

Second, we have the DrawTitleSafeArea console command, which uses an FTitleSafeZoneArea struct inside UGameViewportClient and simply sets this to a hardcoded 90% X/Y in the UGameViewportClient constructor. This one appears to be used for calculating the safe zones for splitscreen viewports.

Shouldn’t these two be unified? I’d expect FTitleSafeZoneArea to pull its data from FDisplayMetrics::GetDisplayMetrics() rather than hardcoding at 90%, and I’d also expect Windows/Mac/Linux to have a sensible safe area set, for example the same as on Xbox One. It wouldn’t be difficult to set this up on the game-side, but it seems like something that should be set in the engine by default.

Thoughts?

Can’t really help you much, but I’m also interested in what the Safe Zone is actually defined as since I’ll be doing some UMG myself shortly and want to do it properly for all possible combinations. Bumping.

Well the lazy option is just to hardcode a 10% safe zone around the edge of the screen as the DrawTitleSafeArea command does, which should satisfy pretty much every platform’s requirements. But obviously if you can give the user better control over it that’s preferable.

Problem is, 10% is not good enough solution for me. There are games where In-Game HUD is perfectly matched to the edge of the screen. Hard-coded won’t cut it. For now I’m sticking to ScaleBox with Fill option and managing scaling issues on my widgets. I just hope that the ‘Fill’ option will never extend beyond the TV screen.