# SubMeshDescriptor

> Contains information about a single sub-mesh of a Mesh.

## Definition

* **Type:** Struct
* **Namespace:** [UnityEngine.Rendering](/engine/6000.5/script-reference/unityengine/rendering.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public struct SubMeshDescriptor
```

## Remarks

Simple usage of [Mesh](/engine/6000.5/script-reference/unityengine/mesh.md) scripting API involves using functions like [Mesh.triangles](/engine/6000.5/script-reference/unityengine/mesh/triangles.md), [Mesh.vertices](/engine/6000.5/script-reference/unityengine/mesh/vertices.md) and so on.

For advanced use cases that require maximum performance, you can use the advanced API, which has functions like [Mesh.SetSubMesh](/engine/6000.5/script-reference/unityengine/mesh/setsubmesh.md), [Mesh.SetIndexBufferParams](/engine/6000.5/script-reference/unityengine/mesh/setindexbufferparams.md), and [Mesh.SetIndexBufferData](/engine/6000.5/script-reference/unityengine/mesh/setindexbufferdata.md). This advanced API gives access to the underlying mesh data structures that primarily work on raw index buffers, vertex buffers and mesh subset data.

A single sub-mesh represents part of the Mesh that is using one material. Many Meshes use just one material, but some might use more. Information in a sub-mesh is composed of:

* [SubMeshDescriptor.indexStart](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/indexstart.md) - starting point inside the whole Mesh index buffer where the face index data of this subset is found. See [Mesh.SetIndexBufferParams](/engine/6000.5/script-reference/unityengine/mesh/setindexbufferparams.md) and [Mesh.SetIndexBufferData](/engine/6000.5/script-reference/unityengine/mesh/setindexbufferdata.md).

* [SubMeshDescriptor.indexCount](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/indexcount.md) - index count for this sub-mesh. For example, in meshes with triangle topology, each triangle needs three indices.

* [SubMeshDescriptor.topology](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/topology.md) - topology of this sub-mesh, most often [MeshTopology.Triangles](/engine/6000.5/script-reference/unityengine/meshtopology/triangles.md).

* [SubMeshDescriptor.baseVertex](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/basevertex.md) - offset that is added to each value in the index buffer, to compute the final vertex index.

* [SubMeshDescriptor.bounds](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/bounds.md) - bounding box of vertices in local space.

* [SubMeshDescriptor.firstVertex](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/firstvertex.md) and [SubMeshDescriptor.vertexCount](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/vertexcount.md) - range of vertices that are referenced by the index buffer of this sub-mesh.

The [SubMeshDescriptor.bounds](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/bounds.md), [SubMeshDescriptor.firstVertex](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/firstvertex.md) and [SubMeshDescriptor.vertexCount](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/vertexcount.md) values are calculated automatically by [Mesh.SetSubMesh](/engine/6000.5/script-reference/unityengine/mesh/setsubmesh.md), unless [MeshUpdateFlags.DontRecalculateBounds](/engine/6000.5/script-reference/unityengine/rendering/meshupdateflags/dontrecalculatebounds.md) flag is passed.

Additional Resources: [Mesh.SetSubMesh](/engine/6000.5/script-reference/unityengine/mesh/setsubmesh.md), [Mesh.GetSubMesh](/engine/6000.5/script-reference/unityengine/mesh/getsubmesh.md), [Mesh.SetIndexBufferParams](/engine/6000.5/script-reference/unityengine/mesh/setindexbufferparams.md), [Mesh.SetIndexBufferData](/engine/6000.5/script-reference/unityengine/mesh/setindexbufferdata.md).

## Constructors

| Constructor                                                                                                                                              | Description                  |
| -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- |
| [SubMeshDescriptor(System.Int32,System.Int32,UnityEngine.MeshTopology)](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/ctor.md) | Create a submesh descriptor. |

## Properties

| Property                                                                                              | Description                                                                                |
| ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
| [baseVertex](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/basevertex.md)   | Offset that is added to each value in the index buffer, to compute the final vertex index. |
| [bounds](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/bounds.md)           | Bounding box of vertices in local space.                                                   |
| [firstVertex](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/firstvertex.md) | First vertex in the index buffer for this sub-mesh.                                        |
| [indexCount](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/indexcount.md)   | Index count for this sub-mesh face data.                                                   |
| [indexStart](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/indexstart.md)   | Starting point inside the whole Mesh index buffer where the face index data is found.      |
| [topology](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/topology.md)       | Face topology of this sub-mesh.                                                            |
| [vertexCount](/engine/6000.5/script-reference/unityengine/rendering/submeshdescriptor/vertexcount.md) | Number of vertices used by the index buffer of this sub-mesh.                              |
