Unreal FLinearColor vs FColor
Unreal has two colour types on purpose. Use the wrong one and greys and midtones often look too bright and faded. This guide is the practical cheat sheet; for the underlying sRGB-versus-linear theory see sRGB vs linear colour in shaders.
FLinearColor vs FColor at a glance
| Type | What the numbers are | Typical use |
|---|---|---|
FLinearColor |
lighting floats (0–1) | Materials, lights, blending, multiply |
FColor |
whole numbers 0–255 | Packed data, vertex colours, byte APIs |
Same hue on screen, different numbers.
When to use FLinearColor
Use this for materials, lights, and anything that blends or multiplies colour. These floats are for lighting maths. They are usually not the same as CSS rgb() / hex values divided by 255.
FLinearColor(0.053f, 0.323f, 0.914f)
If you take a normal CSS colour — for example mid grey as rgb(128, 128, 128) or 0.5, 0.5, 0.5 after dividing by 255 — and put those floats straight into FLinearColor, the result looks too bright. Use a picker that outputs Unreal linear values (including this site) and copy the FLinearColor line.
When to use FColor
Use when you are not doing lighting maths and you want channels as whole numbers from 0 to 255 — for packed data, vertex colours, and APIs that ask for FColor.
FColor(66, 135, 245)
Prefer FLinearColor for materials and lighting; use FColor when an API wants whole numbers from 0 to 255 and you are not doing lighting maths.
Why midtones go wrong
A typical hex colour of mid grey is about 128, 128, 128, or 0.5, 0.5, 0.5 if you divide by 255. That 0.5 is a display value.
FLinearColor expects a lighting value. For the same mid grey on screen, the linear float is about 0.214, not 0.5. Put 0.5 into FLinearColor and Unreal treats it as brighter light — greys lift, contrast drops, everything looks faded.
Easy mistake; can be a bit tricky to spot.
Get the right numbers
On the picker, the Unreal card toggles between FLinearColor and FColor for the same swatch. Copy the one that matches the type in your code.
Questions
Why do my colours look too bright in Unreal?
You almost certainly took a normal CSS colour — for example mid grey as rgb(128, 128, 128) or 0.5, 0.5, 0.5 after dividing by 255 — and put those floats into an FLinearColor. Unreal treats them as lighting values, so the result looks too bright. Copy an FLinearColor from a tool that outputs linear values, or use FColor when you are not doing lighting maths.
Should I use FLinearColor or FColor?
Use FLinearColor for materials, lights, and anything that blends or multiplies colour. Use FColor when you are not doing lighting maths and you want whole numbers from 0 to 255 — for packed data, vertex colours, or APIs that ask for FColor.
Are FLinearColor and FColor just different scales of the same numbers?
No. They are different interpretations. FLinearColor is lighting maths. FColor is whole-number channels when you are not doing that maths. The same on-screen blue is different numbers in each type — that is why a colour picker can show two constructors for one swatch.
More guides
- sRGB vs linear colour in shadersWhat display (sRGB) and linear colour numbers mean, which to use in shaders and lighting, and how Unity, Unreal and the web treat the same hue.
- OKLCh explained, and why HSL keeps letting you downHow OKLCh works, why its lightness matches what you see when HSL lightness does not, and how to use it to build tonal scales that actually look even.
- Choosing accessible text coloursHow WCAG 2 contrast ratios work, where they go wrong, what APCA does differently, and a practical method for picking text colours that pass and look right.