When the linear color space calculation is not used for unlit materials, then the calculation is like this:
texture_color = texture2D(Material.emissiveTexture)
screen_color = UnlitMaterial.emissiveColor * texture_color
final_screen_color = screen_color
But when the linear color space calculation is used for unlit materials, the calculation is like this:
texture_color = pow(texture2D(Material.emissiveTexture), 2.2) // convert texture sRGB -> linear
screen_color = UnlitMaterial.emissiveColor * texture_color
final_screen_color = pow(screen_color, 1 / 2.2) // convert linear -> sRGB for screen
As you can see, the UnlitMaterial.emissiveColor
is not processed by pow
at input — it is assumed to be already in linear color space. So when the UnlitMaterial.emissiveColor
is not white (1, 1, 1)
, then the resulting screen color RGB is not exactly equal to UnlitMaterial.emissiveColor
(or UnlitMaterial.emissiveColor
multiplied by UnlitMaterial.emissiveTexture
, if texture was provided).