---
name: MaterialService
last_updated: 2026-06-10T23:09:12Z
inherits:
  - Instance
  - Object
type: class
memory_category: Instances
tags:
  - NotCreatable
  - Service
summary: "The game service responsible for managing materials."
---

# Class: MaterialService

> The game service responsible for managing materials.

## Description

MaterialService is the game service responsible for managing materials. It is
the container for global [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) instances.
[MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) can be child or descendant of MaterialService. For
each base Material type, MaterialService internally keeps a set of
MaterialVariant references. [MaterialVariant.Name](/docs/reference/engine/classes/MaterialVariant.md) is the key to access
it. The [MaterialVariant.Name](/docs/reference/engine/classes/MaterialVariant.md) and [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
are combined to work as an identifier. If more than one MaterialVariant object
has the same name and BaseMaterial under MaterialService, only one of them can
be used.

MaterialService has some (Material)Name properties. Assigning a
MaterialVariant Name replaces the built-in material with the specified
MaterialVariant. If the MaterialService can't find a matching MaterialVariant,
it falls back to built-in material. Note BaseMaterial should also match, for
example, a MaterialVariant with BaseMaterial Grass can only be assigned to
MaterialService.GrassName, not AsphaltName or any other names. These
properties are not scriptable but can read and write using
[MaterialService:GetBaseMaterialOverride()](/docs/reference/engine/classes/MaterialService.md) and
[MaterialService:SetBaseMaterialOverride()](/docs/reference/engine/classes/MaterialService.md) function.

MaterialService has a [MaterialService.Use2022Materials](/docs/reference/engine/classes/MaterialService.md) property that
switches between legacy materials and new materials introduced in year 2022.
Because legacy and user-generated (new) terrain materials use different
encoding, using legacy terrain materials and MaterialVariant at the same time
has a performance penalty. If your game is using pre-2022 terrain materials,
avoid overriding any built-in materials. Migrate to 2022 materials if
possible.

## Properties

### Property: MaterialService.AsphaltName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Asphalt. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Asphalt.

### Property: MaterialService.BasaltName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Basalt. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Basalt.

### Property: MaterialService.BrickName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Brick. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Brick.

### Property: MaterialService.CardboardName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

### Property: MaterialService.CarpetName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

### Property: MaterialService.CeramicTilesName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

### Property: MaterialService.ClayRoofTilesName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

### Property: MaterialService.CobblestoneName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Cobblestone. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Cobblestone.

### Property: MaterialService.ConcreteName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Concrete. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Concrete.

### Property: MaterialService.CorrodedMetalName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in CorrodedMetal.
The Specified MaterialVariant must have
[MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md) set to CorrodedMetal.

### Property: MaterialService.CrackedLavaName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in CrackedLava. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to CrackedLava.

### Property: MaterialService.DiamondPlateName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in DiamondPlate.
The Specified MaterialVariant must have
[MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md) set to DiamondPlate.

### Property: MaterialService.FabricName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Fabric. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Fabric.

### Property: MaterialService.FoilName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Foil. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Foil.

### Property: MaterialService.GlacierName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Glacier. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Glacier.

### Property: MaterialService.GraniteName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Granite. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Granite.

### Property: MaterialService.GrassName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Grass. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Grass.

### Property: MaterialService.GroundName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Ground. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Ground.

### Property: MaterialService.IceName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Ice. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Ice.

### Property: MaterialService.LeafyGrassName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in LeafyGrass. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to LeafyGrass.

### Property: MaterialService.LeatherName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

### Property: MaterialService.LimestoneName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Limestone. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Limestone.

### Property: MaterialService.MarbleName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Marble. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Marble.

### Property: MaterialService.MetalName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Metal. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Metal.

### Property: MaterialService.MudName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Mud. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Mud.

### Property: MaterialService.PavementName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Pavement. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Pavement.

### Property: MaterialService.PebbleName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Pebble. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Pebble.

### Property: MaterialService.PlasterName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

### Property: MaterialService.PlasticName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Plastic. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Plastic.

### Property: MaterialService.RockName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Rock. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Rock.

### Property: MaterialService.RoofShinglesName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

### Property: MaterialService.RubberName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

### Property: MaterialService.SaltName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Salt. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Salt.

### Property: MaterialService.SandName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Sand. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Sand.

### Property: MaterialService.SandstoneName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Sandstone. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Sandstone.

### Property: MaterialService.SlateName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Slate. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Slate.

### Property: MaterialService.SmoothPlasticName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in SmoothPlastic.
The Specified MaterialVariant must have
[MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md) set to SmoothPlastic.

### Property: MaterialService.SnowName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Snow. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Snow.

### Property: MaterialService.Use2022Materials

```json
{
  "type": "boolean",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxScriptSecurity",
    "write": "RobloxScriptSecurity"
  },
  "serialization": {
    "can_load": false,
    "can_save": false
  },
  "thread_safety": "ReadSafe",
  "category": "Material Pack",
  "capabilities": [
    "Material"
  ]
}
```

When it's false, built-in materials use the material pack before 2022.
When it's true, built-in materials use the material pack released in 2022.

### Property: MaterialService.WoodName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in Wood. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to Wood.

### Property: MaterialService.WoodPlanksName

```json
{
  "type": "string",
  "access": "ReadOnly",
  "security": {
    "read": "RobloxEngineSecurity",
    "write": "RobloxEngineSecurity"
  },
  "serialization": {
    "can_load": true,
    "can_save": true
  },
  "thread_safety": "ReadSafe",
  "category": "Material Overrides",
  "capabilities": [
    "Material"
  ]
}
```

Specify [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name to override built-in WoodPlanks. The
Specified MaterialVariant must have [MaterialVariant.BaseMaterial](/docs/reference/engine/classes/MaterialVariant.md)
set to WoodPlanks.

## Methods

### Method: MaterialService:GetBaseMaterialOverride

**Signature:** `MaterialService:GetBaseMaterialOverride(material: Material): string`

Get the override [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name of specified Material type.

*Security: None · Thread Safety: Unsafe · Capabilities: Material*

**Parameters:**

| Name | Type | Default | Description |
|------|------|---------|-------------|
| `material` | `Material` |  | Material type to be fetched. |

**Returns:** `string` — MaterialVariant name currently set as override.

### Method: MaterialService:GetMaterialVariant

**Signature:** `MaterialService:GetMaterialVariant(material: Material, name: string): MaterialVariant`

Get the effective MaterialVariant reference given a MaterialVariant name
and BaseMaterial. This MaterialVariant must be a descendant of
MaterialService. Returns `nil` if no matching instance exists.

*Security: None · Thread Safety: Unsafe · Capabilities: Material*

**Parameters:**

| Name | Type | Default | Description |
|------|------|---------|-------------|
| `material` | `Material` |  | BaseMaterial of MaterialVariant. |
| `name` | `string` |  | Name of MaterialVariant. |

**Returns:** `MaterialVariant` — A MaterialVariant instance that matches parameters.

### Method: MaterialService:SetBaseMaterialOverride

**Signature:** `MaterialService:SetBaseMaterialOverride(material: Material, name: string): ()`

Set a [MaterialVariant](/docs/reference/engine/classes/MaterialVariant.md) name that overrides a built-in material.

*Security: None · Thread Safety: Unsafe · Capabilities: Material*

**Parameters:**

| Name | Type | Default | Description |
|------|------|---------|-------------|
| `material` | `Material` |  | The Material type to be changed. |
| `name` | `string` |  | Name of the MaterialVariant object. |

**Returns:** `()`

## Inherited Members

### From [Instance](/docs/reference/engine/classes/Instance.md)

- **Property `Archivable`** (`boolean`): Determines if an Instance and its descendants can be cloned using
- **Property `archivable`** (`boolean`):  *(deprecated, hidden)*
- **Property `Capabilities`** (`SecurityCapabilities`): The set of capabilities allowed to be used for scripts inside this
- **Property `Name`** (`string`): A non-unique identifier of the Instance.
- **Property `Parent`** (`Instance`): Determines the hierarchical parent of the Instance.
- **Property `PredictionMode`** (`PredictionMode`): 
- **Property `RobloxLocked`** (`boolean`): A deprecated property that used to protect CoreGui objects. *(hidden)*
- **Property `Sandboxed`** (`boolean`): When enabled, the instance can only access abilities in its `Capabilities`
- **Property `UniqueId`** (`UniqueId`): A unique identifier for the instance.
- **Method `AddTag(tag: string): ()`**: Applies a tag to the instance.
- **Method `children(): Instances`**: Returns an array of the object's children. *(deprecated)*
- **Method `ClearAllChildren(): ()`**: This method destroys all of an instance's children.
- **Method `Clone(): Instance`**: Create a copy of an instance and all its descendants, ignoring instances
- **Method `clone(): Instance`**:  *(deprecated)*
- **Method `Destroy(): ()`**: Sets the Instance.Parent property to `nil`, locks the
- **Method `destroy(): ()`**:  *(deprecated)*
- **Method `FindFirstAncestor(name: string): Instance?`**: Returns the first ancestor of the Instance whose
- **Method `FindFirstAncestorOfClass(className: string): Instance?`**: Returns the first ancestor of the Instance whose
- **Method `FindFirstAncestorWhichIsA(className: string): Instance?`**: Returns the first ancestor of the Instance for whom
- **Method `FindFirstChild(name: string, recursive?: boolean): Instance?`**: Returns the first child of the Instance found with the given name.
- **Method `findFirstChild(name: string, recursive?: boolean): Instance`**:  *(deprecated)*
- **Method `FindFirstChildOfClass(className: string): Instance?`**: Returns the first child of the Instance whose
- **Method `FindFirstChildWhichIsA(className: string, recursive?: boolean): Instance?`**: Returns the first child of the Instance for whom
- **Method `FindFirstDescendant(name: string): Instance?`**: Returns the first descendant found with the given Instance.Name.
- **Method `GetActor(): Actor?`**: Returns the Actor associated with the Instance, if any.
- **Method `GetAttribute(attribute: string): Variant`**: Returns the value which has been assigned to the given attribute name.
- **Method `GetAttributeChangedSignal(attribute: string): RBXScriptSignal`**: Returns an event that fires when the given attribute changes.
- **Method `GetAttributes(): Dictionary`**: Returns a dictionary of the instance's attributes.
- **Method `GetChildren(): Instances`**: Returns an array containing all of the instance's children.
- **Method `getChildren(): Instances`**:  *(deprecated)*
- **Method `GetDebugId(scopeLength?: int): string`**: Returns a coded string of the debug ID used internally by Roblox.
- **Method `GetDescendants(): Instances`**: Returns an array containing all of the descendants of the instance.
- **Method `GetFullName(): string`**: Returns a string describing the instance's ancestry.
- **Method `GetStyled(name: string, selector: string?): Variant`**: Returns the styled or explicitly modified value of the specified property,
- **Method `GetStyledPropertyChangedSignal(property: string): RBXScriptSignal`**: 
- **Method `GetTags(): Array`**: Gets an array of all tags applied to the instance.
- **Method `HasTag(tag: string): boolean`**: Check whether the instance has a given tag.
- **Method `IsAncestorOf(descendant: Instance): boolean`**: Returns true if an Instance is an ancestor of the given
- **Method `IsDescendantOf(ancestor: Instance): boolean`**: Returns `true` if an Instance is a descendant of the given
- **Method `isDescendantOf(ancestor: Instance): boolean`**:  *(deprecated)*
- **Method `IsPropertyModified(property: string): boolean`**: Returns `true` if the value stored in the specified property is not equal
- **Method `QueryDescendants(selector: string): Instances`**: 
- **Method `Remove(): ()`**: Sets the object's `Parent` to `nil`, and does the same for all its *(deprecated)*
- **Method `remove(): ()`**:  *(deprecated)*
- **Method `RemoveTag(tag: string): ()`**: Removes a tag from the instance.
- **Method `ResetPropertyToDefault(property: string): ()`**: Resets a property to its default value.
- **Method `SetAttribute(attribute: string, value: Variant): ()`**: Sets the attribute with the given name to the given value.
- **Method `WaitForChild(childName: string, timeOut: double): Instance`**: Returns the child of the Instance with the given name. If the
- **Event `AncestryChanged`**: Fires when the Instance.Parent property of this object or one of
- **Event `AttributeChanged`**: Fires whenever an attribute is changed on the Instance.
- **Event `ChildAdded`**: Fires after an object is parented to this Instance.
- **Event `childAdded`**:  *(deprecated)*
- **Event `ChildRemoved`**: Fires after a child is removed from this Instance.
- **Event `DescendantAdded`**: Fires after a descendant is added to the Instance.
- **Event `DescendantRemoving`**: Fires immediately before a descendant of the Instance is removed.
- **Event `Destroying`**: Fires immediately before (or is deferred until after) the instance is
- **Event `StyledPropertiesChanged`**: Fires whenever any style property is changed on the instance, including

### From [Object](/docs/reference/engine/classes/Object.md)

- **Property `ClassName`** (`string`): A read-only string representing the class this Object belongs to.
- **Property `className`** (`string`):  *(deprecated)*
- **Method `GetPropertyChangedSignal(property: string): RBXScriptSignal`**: Get an event that fires when a given property of the object changes.
- **Method `IsA(className: string): boolean`**: Returns true if an object's class matches or inherits from a given class.
- **Method `isA(className: string): boolean`**:  *(deprecated)*
- **Event `Changed`**: Fires immediately after a property of the object changes, with some