In case darthskrill’s explanation didn’t come across, the idea is that: If you have a 2436x1125 iPhone X with a 5.8" display (462.63 dpi), we won’t actually set the AbsoluteSize of ScreenGui to 2436x1125, instead we’ll set it to a value of 812x375 (a 3x smaller number).
Other than bugs, and some minor information leaks, there’s no way to tell that the device is actually 3x more pixels than we say it is. When we go to render your UI, we will actually render it 3x larger, so that it looks sharp and crisp on the device. For example, if you make a 1 “pixel” line, it will be 3 native pixels wide on this device. If you render TextSize=20 text, we actually render TextSize=60 text. If you render an ImageLabel with an image in it, we upscale that image (unless it’s from the content folder and has an @2x or @3x version).
The main reason we do this is so that UIs will be readable no matter how detailed the device is. All of the other applications on your phone do this as well, including web browsers. We try to normalize for a value of around 160 dpi, which means that a TextSize of 20 is always hopefully physically at least an eighth of an inch high. Any smaller and it’s unlikely to be a good player experience.
In the Web world, these “Roblox pixels” are usually called “device independent pixels” shortened to “dp”.
If your UI looks wrong on a high DPI device because of the device being high DPI, that’s probably a bug. However, if your UI still looks wrong when you load your UI into the Studio emulator, it’s most likely a bug in your UI, not on our end.
I recommend always testing your UIs with a wide range of screen resolutions to make sure that they don’t break when scaled down to a mobile device.