[On Hold] Important Notice if Using ColorCorrection.TintColor RGB Values Greater than 255

Not enough coffee to go around. Reminds me of the time I accidentally wrote the year as 2009 in a paper I wrote.


What’s your source for this? I don’t believe you’re correct here, at least in the case of ColorCorrection.

ColorCorrection works by multiplying the final pixel color by the TintColor, hence why Color3.new(0, 0, 0) ends up with an entirely black image, Color3.new(1, 1, 1) doesn’t impact the image at all, something like Color3.new(0, 1, 0) leaves you with just the green channel, and something like Color3.new(10, 10, 10) ends up blowing out half the image.

Yes, it does. The “final pixel color” that you speak of however is a floating-point value and can therefore be above 1. The tonemapping step “flattens” these floating-point values into values that can be displayed on-screen. I believe Roblox however does not use a proper tonemapper and instead multiplies by exposure and then clamps.

Notice that if you have something brighter than white and you use a color correction, you can get it to display the brighter-than-white details.

See my later post correcting this: [On Hold] Important Notice if Using ColorCorrection.TintColor RGB Values Greater than 255 - #85 by qwertyexpert

Most effects are done before tonemapping, but apparently not color correction.

Seems like Roblox staff are messing with the spacetime continuum again.


:grimacing: Shhhh, it’s fixed now. You saw nothing.


Isn’t the whole point of the HDR pipeline that the engine supports color values outside of normal range? Color values above maximum intensity emit light. That’s what HDR means to me, and to most people.

The engine uses 8 bit color almost everywhere. This is especially noticeable on UIGradients, and flat colored images. Color banding is a really obnoxious side effect of using 8 bit colors, meanwhile, most displays support 24 bit or even 32 bit color channels, when even just 16 bit color channels are enough to eliminate a large majority of color banding.

This has sort of led to me never really fully investigating HDR, because, why bother with it if Roblox is just going to sometimes do it for me, and I don’t really have much control otherwise.

That’s just my thoughts on this overall, the color support in the engine is all around just pretty limiting.


Just to clarify so we understand correctly, you’re saying that the HDR values are flattened back to a 0-1 range after post processing?

If so then yeah that makes sense. You would want HDR processing available for post processing effects too, and the operations to flatten it back into a 0-1 range would be done after post processing. Not sure what Rocky is confused about.


No. It’s not. And I’m going to prove it to you right now.

This is a normal screenshot of the Roblox viewport with no color correction applied, i.e. the final pixel color displayed to the screen:

If I now apply a color correction with a tint color of Color3.new(2, 2, 2) (multiplying the final pixel color by 2), I get this:

Now, I’m going to do the exact same thing but in Photoshop using the levels filter. I’m going to use the first screenshot as a base meaning there’s no HDR data.

Whaddya know! The EXACT. SAME. IMAGE. I can send you the .psd if you STILL don’t believe me.

THEREFORE, the color correction effect in Roblox MUST be applied AFTER the tonemapper and AFTER the brightness values have been normalized.


Welds are already planned to be deprecated. This wasn’t a random “accident,” this was miscommunication on the engineering side.

Seeing from their perspective, they probably added the deprecated tag because a senior engineer said something along the lines of “add the tag to all legacy constraints and movers,” or something else as silly as that.

That’s not comparable to clamping a Color3 value. Adding a deprecated tag takes moments, while clamping a value is an intentional and planned change that has to be tested internally.

1 Like

I didn’t even know this was possible until I read this thread. Can certainly see how it could be used to make some very interesting alien environments and create glowing artifacts.

What would be nice to help with those sorts of use cases is the addition of emission maps for SurfaceAppearance.

This makes absolutely zero sense. It’s another example of not following the common saying, “Don’t fix what isn’t broke”

Definitely prefer Roblox not to clamp values when there is minimal chance of it breaking down the road. The creativity afforded by unconstrained properties is a huge compensator for Roblox’s narrow range of post processing and graphics effects. It’s a letdown to add artificial limitations without replacing the functionality lost.


This is the exact opposite of what I said, and doesn’t prove anything. Increasing the brightness loses information, which can be done either by the pixels only having 24-bit color (in Photoshop), or by Roblox clamping the pixel values before displaying them to the screen (which is their super-basic “tonemapper”). After further testing I’ve come to the same conclusion, but not using your method as it’s completely incorrect.

The correct method involves testing whether it can add information back that would have been discarded in the transition from floating-point to 24-bit color.

The part on the left has a SurfaceGui with a brightness of 10. The part on the right has its SurfaceGui’s brightness set to 100 instead.

They both clip and cause bloom. Information is lost due to them both appearing as white on-screen.

Using ColorCorrection to darken the image would have resulted in the one on the right being noticeably brighter according to my theory, but it doesn’t:

Meanwhile using exposure to do the same thing results in the correct effect:

I thought both methods would result in the same thing, but apparently not.

In the future please do use the correct method if you are trying to correct someone.


After most post processing. I recently did a few tests and discovered that ColorCorrection is indeed applied after the HDR values are flattened. But most post processing effects (bloom, sunrays) do operate on the HDR buffer.


Excuse my ignorance on the general subject of lighting, but how exactly does color banding occur in the engine? Also, what do you mean when you refer to bit color channels?

1 Like

It’s literally exactly what you said, and disproves exactly what you said.

YOUR claim was that color correction was applied BEFORE the tonemapper, which for the record IS a “real” tonemapper, not that I have any idea what would constitute a “fake” tonemapper (you just seem to not know what you’re talking about). I disproved your claim fairly easily by producing the exact same image as produced by the color correction effect, but in an external program using only a screenshot.

If what you claimed was true, and that color correction was indeed applied before the tonemapper, such a feat would be impossible.

Oh, and as Sentross brought up to me on Discord: Nobody in the history of ever has implemented post-process effects the way you seemed to think Roblox’s were implemented. It defeats the entire point of post-process. (Bloom is an entirely different story and hardly constitutes a post-process effect anymore)


1 Like

I think that this change is rather good. It is illogical to have an RGB value that is below 0 or above 255. That is just how RGB colors work on Roblox so why should this be an exception?

1 Like

Because it provides us with a lot more options to easily create fancy lighting.

It’s not hurting anything, so it shouldn’t be changed arbitrarily. It’s not teaching anybody any bad practices and it’s really just an outlier. If it had some sort of adverse effect, it would make sense to remove it, but in this case, the tradeoff is very much not worth it.


Yet another terrible change that isn’t needed in the first place, limiting what is possible in the engine like the glowing effect on textured 3D objects. good job roblox.

You should remove color clipping NOW!


Instead of spending time on the many features that haven’t seen any updates in a while, they consider this to be more important. good job!

Still waiting for updates on this :slight_smile: