As a Roblox developer, it’s currently impossible to correctly colour grade scenes with bright highlights or dark shadows.
ColorCorrectionEffect
currently clips colours that are brighter or darker than the screen can display.
Consider this example with bright sunlight incident upon an object.
Applying a TintColor
of 64, 255, 64
makes the scene green, but notice how the missing detail in the highlights is still lost. The film does not correctly saturate to white, giving the colour correction a highly artificial feel.
For a better reference of what this should look like, I crudely emulated a proper colour correction effect by overlaying a Glass part with 0.5 transparency and the same tint colour. Similarly to the TintColor
property, this should multiply the scene colours, but because it is happening before tonemapping, it is able to retain the detail in the highlights and give a much more natural result.
This method is unfortunately not viable because the Glass shader introduces other artifacts such as stretching due to refraction, lack of support for transparent objects, and unwanted specular reflections.
So, I’d like to request that ColorCorrectionEffect
should have a property determining whether it is applied pre-tonemap (HDR) or post-tonemap (SDR).
Besides more natural looking colour correction, this would unlock better (basic) colour temperature adjustments, more natural HDR-aware crossfades, and the ability to restore details in highlights and shadows as part of the post-process pipeline.