---
title: Surface Art
description: The Surface Art module lets players literally leave their mark in an experience.
---
Players often enjoy feeling like they're a part of constructing the space they're in. The **SurfaceArt** [developer module](../../resources/modules/index.md) lets players literally leave their mark in an experience.
1. Make sure the **Models** sorting is selected, then click the **See All** button for **Categories**.
1. Locate and click the **Packages** tile.
1. Locate the **Surface Art** module and click it, or drag-and-drop it into the 3D view.
1. In the [Explorer](../../studio/explorer.md) window, move the entire **SurfaceArt** model into `Class.ReplicatedStorage`. Upon running the experience the module will begin running.
### Positioning the Canvas
The module comes with one **SurfaceCanvas** model that you can position in the 3D world. This model is what players will interact with to place art on its surface.
1. Locate the **SurfaceCanvas** mesh inside the **Workspace** folder of the module's main folder.
1. Move it into the top-level **Workspace** hierarchy and position it where desired.
1. Upon publishing/running a test session, players will be able to interact with the object via a `Class.ProximityPrompt` and place art on the defined surface.
1. Click the attribute and enter one of six values that describe a `Enum.NormalId`.
| Attribute Value | Corresponding Normal ID |
|---|---|
| **Front** | `Enum.NormalId.Front` |
| **Back** | `Enum.NormalId.Back` |
| **Right** | `Enum.NormalId.Right` |
| **Left** | `Enum.NormalId.Left` |
| **Top** | `Enum.NormalId.Top` |
| **Bottom** | `Enum.NormalId.Bottom` |
| Key | Description |
|---|---|
| `name` | Metadata display name. |
| `assetId` | Asset ID of the image to include. |
| Key | Description | Default |
|---|---|---|
| `enabled` | Toggles the module's functionality on or off. | true |
| `assets` | List of [SurfaceArtAsset](#surfaceartasset) types. | (see code below) |
| `quotaPerPlayer` | Maximum number of art pieces that can be placed by each player. | 2 |
| Key | Description | Default |
|---|---|---|
| `rowsPerCanvas` | Number of rows in the canvas grid. | 2 |
| `colsPerCanvas` | Number of columns in the canvas grid. | 5 |
| `itemsPerPage` | Number of items to skip when paging left and right. | 3 |
| `canvasPaddingLeft` | Left padding for the surface canvas (`Datatype.UDim`). | (0, 8) |
| `canvasPaddingRight` | Right padding for the surface canvas (`Datatype.UDim`). | (0, 8) |
| `canvasPaddingTop` | Top padding for the surface canvas (`Datatype.UDim`). | (0, 8) |
| `canvasPaddingBottom` | Bottom padding for the surface canvas (`Datatype.UDim`). | (0, 8) |
| `promptImage` | Icon shown in the proximity prompt to enter art selection view. | "rbxassetid://8076723774" |
| `leftArrowPageImage` | Image for the left arrow to flip to the previous page. | "rbxassetid://6998633654" |
| `leftArrowItemImage` | Image for the left arrow to select the previous art item. | "rbxassetid://8072765021" |
| `rightArrowPageImage` | Image for the right arrow to flip to the next page. | "rbxassetid://6998635824" |
| `rightArrowItemImage` | Image for the right arrow to select the next art item. | "rbxassetid://8072764852" |
| Key | Description | Default |
|---|---|---|
| `promptKeyCode` | Keyboard shortcut used to activate the prompt to enter art selection (`Enum.KeyCode`). | `Enum.KeyCode|E` |
| `promptRequiresLineOfSight` | Boolean value that determines if the proximity prompt has to be in line of sight between user and canvas. | true |
| `promptMaxActivationDistance` | Maximum distance a player's character can be from the canvas for the prompt to appear. | 10 |
| `promptExclusivity` | `Enum.ProximityPromptExclusivity` specifying which prompts can be shown at the same time. | `Enum.ProximityPromptExclusivity|OnePerButton` |
| `usePageHotkeys` | Whether page hotkeys are used. If true, `nextPageKey` and `prevPageKey` are used to cycle between pages. | true |
| `nextPageKey` | Key used to cycle to the next page of artwork (`Enum.KeyCode`). | `Enum.KeyCode|E` |
| `nextItemKey` | Key used to cycle to the next item of artwork (`Enum.KeyCode`). | `Enum.KeyCode|Right` |
| `prevPageKey` | Key used to cycle to the previous page of artwork (`Enum.KeyCode`). | `Enum.KeyCode|Q` |
| `prevItemKey` | Key used to cycle to the previous item of artwork (`Enum.KeyCode`). | `Enum.KeyCode|Left` |
| Parameters | |
|---|---|
| canvas: `Class.BasePart` | Canvas upon which the artwork was changed. |
| spot: `Class.Frame` | Internal `Class.Frame` that contains the artwork `Class.ImageLabel`. |
| spotPosition: `Datatype.Vector3` | Exact position where the artwork was placed. |
| artId: `Library.string` | Asset ID of the new artwork. |
| ownerUserId: `number` | `Class.Player.UserId|UserId` of the player who placed the art. |
| Parameters | |
|---|---|
| canvas: `Class.BasePart` | Canvas upon which the prompt is showing. |
| Parameters | |
|---|---|
| canvas: `Class.BasePart` | Canvas upon which the prompt was showing. |