Unreal FLinearColor vs FColor

Unreal has two color types on purpose. Use the wrong one and grays 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 color 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 colors, byte APIs

Same hue on screen, different numbers.

When to use FLinearColor

Use this for materials, lights, and anything that blends or multiplies color. These floats are for lighting math. 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 color (for example mid gray 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 math and you want channels as whole numbers from 0 to 255: for packed data, vertex colors, 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 math.

Why midtones go wrong

A typical hex color of mid gray 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 gray on screen, the linear float is about 0.214, not 0.5. Put 0.5 into FLinearColor and Unreal treats it as brighter light: grays 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 colors look too bright in Unreal?

You almost certainly took a normal CSS color (for example mid gray 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 math.

Should I use FLinearColor or FColor?

Use FLinearColor for materials, lights, and anything that blends or multiplies color. Use FColor when you are not doing lighting math and you want whole numbers from 0 to 255: for packed data, vertex colors, 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 math. FColor is whole-number channels when you are not doing that math. The same on-screen blue is different numbers in each type, which is why a color picker can show two constructors for one swatch.

More guides

  • sRGB vs linear color in shadersWhat display (sRGB) and linear color 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.
  • Color format cheat sheetEvery common color format in one place: hex variants, CSS functions, shader vectors and engine constructors, with the channel ranges and ordering each one expects.