Coloring albedos with gradient mapping

My own experiments in UE

Untitled

Horizon: Zero Dawn

In Horizon Zero Dawn they used gradient mapping extensively, as discussed in this 2018 GDC talk:

https://www.youtube.com/watch?v=wavnKZNSYqU

https://www.gdcvault.com/play/1025530/Between-Tech-and-Art-The

The U, W and V components drive foliage, rocks, lichen, and dust colors across the whole world, as well as some extra parameters. U = Hori, V = Vertical

The U, W and V components drive foliage, rocks, lichen, and dust colors across the whole world, as well as some extra parameters. U = Hori, V = Vertical

We average out the color of our albedo textures to a mid grey value. The gradient map texture is then laid on top of the albedo texture using an illuminate function.

We average out the color of our albedo textures to a mid grey value. The gradient map texture is then laid on top of the albedo texture using an illuminate function.

YCoCg

The purple texture above is probably in YCoCg(-R?) color space. According to one of their tech artists this is done to facilitate the colorization process.

With an automated process we converted all needed color maps to YCoCg as this colorspace was needed for the colorization process.

On Wikipedia I can read the following:

Y′UV was invented when engineers wanted color television in a black-and-white infrastructure. They needed a signal transmission method that was compatible with black-and-white (B&W) TV while being able to add color. The luma component already existed as the black and white signal; they added the UV signal to this as a solution.

The UV representation of chrominance was chosen over straight R and B signals because U and V are color difference signals. In other words, the U and V signals tell the television to shift the color of a certain spot without altering its brightness. Or the U and V signals tell the monitor to make one color brighter at the cost of the other and by how much it should be shifted. The higher (or the lower when negative) the U and V values are, the more saturated (colorful) the spot gets. The closer the U and V values get to zero, the lesser it shifts the color meaning that the red, green and blue lights will be more equally bright, producing a greyer spot.

The Y component in YCoCg stands for Luma, which is value, and describes the bulk of the image.

The black and white channel of Luma (luminosity, value) descibes most of the image! Just like in painting, value is the most important to the human eye. From https://bartwronski.com/2020/05/21/dimensionality-reduction-for-image-and-texture-set-compression/

The black and white channel of Luma (luminosity, value) descibes most of the image! Just like in painting, value is the most important to the human eye. From https://bartwronski.com/2020/05/21/dimensionality-reduction-for-image-and-texture-set-compression/

I’ve managed to reconvert the texture back to RGB in Blender for a hint at the original albedo:

Using the YCoCg-R math from Wikipedia

Using the YCoCg-R math from Wikipedia

Resulting plants.

Resulting plants.

The terrain texture system allows a colorize system, to reuse one texture for different areas and apply a different color style to it.

The terrain texture system allows a colorize system, to reuse one texture for different areas and apply a different color style to it.

Left4Dead 2