Desaturation of darker objects, saturation of brighter stuff

Post Reply
  • Author
  • Message
Offline
Posts: 14
Joined: 07 Jan 2013, 11:51

Desaturation of darker objects, saturation of brighter stuff

One thing that's always bothered me is that objects at night don't desaturate at all.

In dark condition, there is not much light getting reflected so there is not much colour coming from the object to activate our cone cells in order for us to determine it's colour. But there is enough light to activate our rod cells to determine the brightness of the objects.

But in Skyrim, the "appearance of objects due to how much light they receive" is very unrealistic. The brighter the objects, the more white they get as they receive more ambient light instead of reflecting more light of certain colours. And when things go dark, they just get darker while retaining it's colour without desaturating at all.

No matter what I do with the post-processing, there is just no way I can make it realistic. Reducing saturation at night just desaturates all the light source for example.

I hope ENB can change the object post processing to reflect this.

Also, there is also not much blue tint in dark condition. The blue tint happens because the rod cells are only sensitive to green-blue lights. (see https://en.wikipedia.org/wiki/Purkinje_effect) I tried to lerp with adaptation but it doesn't go very well as I have no idea how adaptation variables are calculated.

Offline
User avatar
*blah-blah-blah maniac*
Posts: 17545
Joined: 27 Dec 2011, 08:53
Location: Rather not to say

Re: Desaturation of darker objects, saturation of brighter s

In dark condition, there is not much light getting reflected so there is not much colour coming from the object to activate our cone cells in order for us to determine it's colour. But there is enough light to activate our rod cells to determine the brightness of the objects.
This is completely wrong theory, no way to achieve this in 3d games, such darkness is invisible on displays, sensitivity of eyes to color is not such bad.
_________________
i9-9900k, 64Gb RAM, RTX 3060 12Gb, Win7

Offline
Posts: 66
Joined: 12 Jun 2013, 07:19

Re: Desaturation of darker objects, saturation of brighter s

What you suggest is possible theoritically, I have been thinking about the same thing.

A simple solution for myself is: greatly desaturate ambient light and direct light. So the natural lights feels quite cold. And keep the point light desaturation up, so that torch/fire lights, which are usually the brightest light source at night still have a warm feeling. Not a perfect simluation to human vision, but works.

If you need something really serious, try to play with the enbeffect.fx:

satFactor = 1 - 1/(1+ pow(threshold*brightness, sensitivity));

saturation *= satFactor;

then use the saturation in Boris' original saturation adjustment code. The satFactor in this formula increase from 0 to 1 quickly, depends on the threshold and sensitivity values.

But again it comes down to the theory of human vision and how it fits to in-game display in a reasonable way. Like Boris said in many ocassions the mechanically correct way does not give the most realistic look. You can always try and get your own conclusion :)

Offline
Posts: 14
Joined: 07 Jan 2013, 11:51

Re: Desaturation of darker objects, saturation of brighter s

my code to activate/deactivate rod cells.

Code: Select all

float EColorSaturation = grayadaptation < 0.2 ? (grayadaptation < 0.15 ? 0.2 : lerp(-4.21, 25.19, grayadaptation)) : 1.67;
rodcell.y = grayadaptation < 0.2 ? (grayadaptation < 0.15 ? 2.0 : lerp(5.0, -15.0, grayadaptation)) : 1;
rodcell.x = grayadaptation < 0.2 ? (grayadaptation < 0.15 ? 1.8 : lerp(4.2, -11.8, grayadaptation)) : 1; 
color.z *= rodcell.y;
color.y *= rodcell.x;
or use power function:

Code: Select all

	rodcell.x = grayadaptation < 0.15 ? 0.78 : lerp(0.12, 4.52, grayadaptation); 
	rodcell.y = grayadaptation < 0.15 ? 0.7 : lerp(-0.2, 5.8, grayadaptation);
	color.y = grayadaptation < 0.2 ? pow(color.y, rodcell.x) : color.y;
	color.z = grayadaptation < 0.2 ? pow(color.z, rodcell.y) : color.z;
I forgot to turn on adaptation so it didn't work :oops:

It deals with which set of cells used to detect colour and brightness but it still doesn't solve the problem with saturation of objects individually.

About saturation of brighter objects, there is a colour code called HSB and another one called HSL.
They are based on hue (the colour), saturation (colour strength) and brightness (lightness for the other one).

But since it will be down to the codes for object shading. I don't think I can change that with enbeffect.fx
Post Reply