[Client Beta] Introducing TintMask for SurfaceAppearance

Hi Creators,

We’re excited to launch TintMask Alpha mode as an enhancement to SurfaceAppearance, as a Client Beta. Now, you can apply tinting to selective areas of a surface, such as the raised bricks in a brick wall, without affecting the space in between. Ultimately, TintMask will let you create more custom surfaces faster and with more control.

As a Client Beta, this feature is live in production — meaning you can publish places with it, but we still consider it in beta for now. This feature may be subject to changes before its full release.


Usage

You can apply TintMask to a MeshPart with a SurfaceAppearance. Learn how to add SurfaceAppearance to your place here. Set the SurfaceAppearance.AlphaMode to Enum.AlphaMode.TintMask. This applies SurfaceAppearance.Color tinting to selective areas of a surface based on the transparency (alpha) in the ColorMap.

The SurfaceAppearance will require a ColorMap with transparency that is carefully crafted for the TintMask effect. In your image editor, paint opaque transparency (high alpha value) where you wish the tint color to be applied the strongest. The areas with more transparency (low alpha value) will be less affected by the tint color. The alpha values can also be semi-transparent to apply a partial tint to areas of the texture.

Example of ColorMap Transparency:

The tinting is applied as a multiplier, just like normal SurfaceAppearance Tinting. Make the color in areas where tinting is applied lighter and desaturated (eg, greyscale) to give you the largest range of coloring options. The areas where tinting will not be applied should have normal colors as you would like them to appear.

Example of ColorMap Color:

When saving the image, be sure to preserve color in the transparent regions and turn off options such as pre-multiplied alpha that darken the color in transparent areas. You may also need to change the view settings in your image editor so you can see the color in the transparent areas.

Scripting

Like any SurfaceAppearance Tinting, TintMask is available for scripting using the SurfaceAppearance.color API which is a Color3. This allows you to dynamically change the color of the tinted areas, enabling use cases such as in-game asset customization or time-based color tints.

Performance and Memory

TintMask also comes at no performance cost. Additionally, if you are currently uploading multiple textures to obtain tint variations of a ColorMap, you can now save memory by reusing a single ColorMap along with SurfaceAppearance Tinting to obtain your desired tint variations.

Feedback

Please share your experience with TintMask! If you encounter any issues, please let us know by submitting a bug report.

197 Likes

This topic was automatically opened after 13 minutes.

Are there any plans to add something like this for custom materials too?


It’s annoying how you have to create 100+ materials for each part color you want to use just to make it look good. This takes up memory

94 Likes

I know a lot of people who will be happy with this update.

12 Likes

It’s so funny how Roblox can drop such an awful announcement, then minutes later drop such a well needed feature :sob:

Appreciate this, definitely a huge help :slight_smile:

33 Likes

different teams work on different things is why

16 Likes

Why does this use the alpha channel of the ColorMap instead of a separate mask? Doing this comes at the expense of having any transparency.

Let’s say I had a tree leaf that I wanted to tint different colors without affecting the bark. The way this is implemented makes this impossible.

17 Likes

While I like this, I’m a bit concerned that this method of incorporating tint masks might make the use case I’ve been hoping for more difficult to implement; that is, independently editing the color of a tiger’s body and stripes, while both retain pbr fur rendering.

Or I guess in the example case, independently editing the tint of the bricks and the mortar.

3 Likes

This is a great change, speaking of saving memory, I’d request this to come back.
image

59 Likes

i like it but whens texturefiltering and neon maps?

this new enum was fun for me since i was capable of tinting every meshpart with a texture in it

11 Likes

???

what you’re asking for is literally what they just added?

2 Likes

it’s not, this feature is only exclusive to surfaceappearence. this doesn’t work for custom materials

16 Likes

ohhhh i see yeah my bad, roblox add this

13 Likes

Happy to see more capabilities for our PBR stuff.

But, why was this prioritized over doing this for custom materials, which are way more in need of this feature to achieve parity with built in materials? Why was this prioritized over one of the loudest feature requests on the forum, which is emissive map support on surface appearance? This is coming out of nowhere as far as I am aware. I’m not sure who was asking for this, on this class, today. Is this a stepping stone?

As far as emissive map support goes I’m sure this is a much technically harder problem so I’m able to understand prio differences here, but why build and ship this for surface appearance before materials? Materials already don’t even work with transparency in an expected way IIRC, so there is room for this feature already. Maybe some use case related to avatars, that’s all I can imagine.

35 Likes

This is amazing! I maybe the texture map is also supported for custom materials as well?

I hope we can finally for once also get Emissive/Emission maps in the future too!

31 Likes

Wasn’t there something like this announced once?

2 Likes

This feature is good. But making it for Surface appearence and not Custom materials makes me think - who cames up with this ideas? Why not make them both? Is it that hard in this case - same technology!

7 Likes

Is this coming to MaterialVariants as well?

9 Likes

Wait, this was a thing before?

2 Likes

It works very well

7 Likes