Upload Custom Materials in the New Material Service Beta

Update - Aug 22

Materials are now fully released! Please see this guide for how to leverage Material Manager, 2022 Materials, and more.

Hello developers,

We are very excited to announce the beta release of the first step towards the next generation of materials on Roblox, user-generated (UGC) Part Materials. In this post, we’ll tell you about what they can do, how to use them, and what’s next.

Before we begin, let’s talk broadly about materials.

Roblox materials are unlike materials on other platforms—they’re not just visual, they also carry simulation properties and more to allow for automatic, emergent behavior. Our fundamental goal in all this work is to make materials more capable so that you can leverage them more, which lets us automatically provide more sophisticated behavior to you. For example, at RDC, we previewed acoustic simulation work we’re exploring. Acoustic simulation relies on material properties to determine things like how much a wall should occlude a sound.

The first phase in making materials more capable is to let you create your own variants, and the first step is “global overrides.” Global overrides let you override our built-in materials with your own variants, and all objects using that material will switch to your variant. For example, you could replace our built-in brick with your own, custom AnimeBrick. This makes it easy to achieve custom visual styles for your experience.

Default Built-In Materials:

Same Scene With Custom Materials:

There are two key new objects: the MaterialService instance and the MaterialVariant instance type. MaterialService is the “home” for material-related needs and MaterialVariants represent a custom material. MaterialVariants need to be a child of MaterialService to be active/usable.

Note that “MaterialVariants” are not new, custom base materials but rather a custom variant of a built-in base material. This is because we want to have semantic knowledge of what a variant ‘is’ so that you can easily enable future simulation systems on your content without having to configure new properties everywhere (e.g. future acoustic collision systems could make your custom-wood walls occlude sound appropriately because the system knows they’re made of wood).

How to Use This Beta

  1. To enable, choose File > Beta Features > Material Service and restart Studio. When active, you will see MaterialService in Explorer and be able to add MaterialVariants.


  2. Add a new MaterialVariant as a child of MaterialService.

  3. Set the BaseMaterial property to the material you are overriding.

  4. Set the Color, Metalness, Normal, and Roughness maps to the appropriate image assets.

  5. Select MaterialService and set the variant for the material you wish to override.

Any part set to that material—in this case Granite—will now use your custom material variant instead of the built-in one.

Explicitly setting the variant to be the override (step 5) makes it possible to have multiple variants for the same material as descendants of Material Service and ready to be used in your place but dynamically change which is the override, such as changing the grass override based on the season.

If you move the variant outside of MaterialService, you will see an error icon on MaterialService, and if you select MaterialService, you will see which override has the issue and can hover on it to see a tooltip with more information, as seen in this screenshot:

Material Service is a Studio-only beta, so you will not be able to ship custom materials to production places right now. The API is subject to change based on feedback. But please try it and give us your feedback!

Known Issues:

  • Selecting multiple variants and using Command/Control-G to group together produces an error
  • If a variant is a child of another object, the variant is active as an override, and the parent is moved out of Material Service, the warnings don’t update properly.
  • Moving a package of variants out of Material Service does not disable the override properly.
  • Studio material picker thumbnails do not update to show overrides

What’s Next?

The entire materials project has a few phases:

  • Custom Terrain Materials
  • Global UGC materials
  • Built-in material upgrade
  • Material library expansion
  • Per-part material customization

Let’s talk about each.

Custom Terrain Materials

Early next year, we will add support for terrain material variants as part of this beta.

Global UGC Materials

This has been our primary focus, and we’re delivering the first piece today. We are working on a visual Material Manager to make it easier to create and manage your custom materials. Please give us feedback to this beta, as we want to make it easy-to-use and powerful for you!

Built-in Material Upgrade

We intend to upgrade the built-in materials early next year, and we will do so with a switch so that your older places won’t change. We are re-evaluating a few materials from the last preview build. We will release these as a beta feature in Studio when ready.

Material Library Expansion

After we have UGC materials fully released and have upgraded the built-in materials, we will start releasing new base materials. This will provide you with more precise materials to use when building, allowing for more flexibility and more accurate emergent behavior.

Per-Part Customization

We intend to provide ways to customize the material for a specific part (or collection of parts) rather than globally for an entire place. We don’t have any solutions or timelines to announce, but it is on our roadmap.

Finally, thanks to @fnublox, @programeow, @Homeomorph, @4thchamber, @YodelerYoshi, @LuckyKobold, @c0de517e, and @wengawenga for their hard work bringing Material Service to life.

Update 1/19/2022

Update 2/2/2022


This is a long time coming! The legacy Materials simply do not always convey the aesthetic architects are going for so this change is more than needed.

Please add the support for Luminescence/Emission Maps to SurfaceAppearance along with this feature next!


Now, this is epic! When you compare the first 2 pictures it already shows the matter this update will make.


Can you guys please add Emmisionmaps and make it possible to make the materials seperate from what they are so you can pretty much add materials yourself?


Does this update come with support for smooth terrain?


Are these materials projected the same way as base engine materials, or is there a planned means by which the user can customize the behavior of the mapping?


This is something that I never would have expected to come so early, we are still waiting on the PBR terrain, but this is a step in the right direction. I can’t wait for this feature to release.


I am very happy to witness such a change in the approach of Roblox Studio.
Hoping this will be for our beloved terrain textures aswell?


(post deleted by author)


This is an entire game changer, I cannot wait to use this!


Now this is a very intriguing update, definitely worthwhile into looking at in the future for realistic game aesthetics.


Emission maps aren’t exactly the most simple thing to get right - but for now, you can get the same effect by setting the color3 value of a texture to above 255,255,255.


This is awesome is there any known date about when this will get out of beta and be usable out of studio


This is definitely a christmas gift for me! I am so happy that we can now upload our custom materials. :star_struck:


I am very happy to see that Roblox has responded to our feedback about the update initially planned to replace the current materials with new ones.

This solution is not only great for those who prefer the old materials, and those who want to use the new materials, but also opens the gates for a lot more visual expression in games to come. Cheers!


Now THIS is a great alternative to the old material update!

This is a lot more flexible than I thought, a lot better of a solution than just replacing old materials or having a setting to switch between them
Really looking forward to per-part materials


As an additional question about this - are there any plans to open up the ability to add custom maps for the other properties of each of the engine materials - most notably the existing detail normal channel present on the engine textures - to the user to modify?


This is one of the coolest feature’s that Roblox added recently same with the 9 Slice Editor , Impressed I must say :slight_smile:


So glad it’s finally here! I’ve waited so long.

Will we be able to use the previously made materials that Roblox had planned on releasing?