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
- 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.
- Add a new MaterialVariant as a child of MaterialService.
- Set the BaseMaterial property to the material you are overriding.
- Set the Color, Metalness, Normal, and Roughness maps to the appropriate image assets.
- 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, @ProtoValence, @LuckyKobold, @c0de517e, and @wengawenga for their hard work bringing Material Service to life.