I have a tutorial “spotlight” — a Frame (AnchorPoint 0.5, 0.5) with a UIStroke of thickness 10000 that darkens the screen except for a cutout hugging a highlighted UI element. Every RenderStepped, a driver sets the frame’s Position and Size (in offsets) to match the target GuiObject’s AbsolutePosition/AbsoluteSize plus a small padding.
Setup:
- ScreenGui:
IgnoreGuiInset = false,ScreenInsets = CoreUISafeInsets. - Spotlight is a direct child of the ScreenGui (no scaling ancestors).
- Targets are sized via
UIAspectRatioConstraintchains and live inside aCanvasGroup.
The problem: On some phones (for example: iPhone 16, 852×393) the spotlight renders noticeably larger than the element it should hug. On PC and some tablet it looks correct.
What I’ve already verified (so please don’t suggest these):
- Position math is correct — measured spotlight lands within 5px of the target center.
- Target
AbsoluteSizeis stable from frame 0 (logged 8 consecutive frames after the element appears — no layout-settling drift). - Origin/inset handling is correct (using
spotlight.Parent.AbsolutePosition, notGetGuiInset, because ofCoreUISafeInsets). - I removed an easing/lerp transient where the frame glided in from the previous step’s size — snapping instantly fixed the measured values, but the visual issue persists on device.
Questions:
- Does
CanvasGroupintroduce any resolution scaling that would make a sibling overlay (outside the CanvasGroup) appear mismatched from a target inside it? - Is there a known device-DPI/scaling quirk where offset-based
Sizerenders larger than the pixel values suggest?
This is my first time doing a tutorial system, especially one that utilizes UIStroke so bear with me please!

