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