<!--
{
  "availability" : [
    "iOS: 9.0.0 -",
    "iPadOS: 9.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 10.11.0 -",
    "tvOS: 9.0.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "ModelIO",
  "identifier" : "/documentation/ModelIO/MDLSubmeshTopology",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Model I/O"
    ],
    "preciseIdentifier" : "c:objc(cs)MDLSubmeshTopology"
  },
  "title" : "MDLSubmeshTopology"
}
-->

# MDLSubmeshTopology

A description of how a submesh’s index buffer data is arranged and how that arrangement should be used to produce the submesh’s intended 3D shape.

```
class MDLSubmeshTopology
```

## Overview

Model I/O creates topology objects when importing assets containing non-uniform index buffers (that is, index buffers not composed of a single primitive type such as triangles or quads). You can also use topology objects (or load assets from file formats supporting topology information) to describe models for surface subdivision, identifying which edges or vertices remain sharp or become smooth when you use the [`newSubdividedMesh(_:submeshIndex:subdivisionLevels:)`](/documentation/ModelIO/MDLMesh/newSubdividedMesh(_:submeshIndex:subdivisionLevels:)) method.

## Topics

### Identifying Faces

[`faceTopology`](/documentation/ModelIO/MDLSubmeshTopology/faceTopology)

A buffer identifying the faces in the submesh and the number of vertices in each.

[`faceCount`](/documentation/ModelIO/MDLSubmeshTopology/faceCount)

The number of faces in the submesh’s face topology buffer.

### Identifying Creases

[`edgeCreaseIndices`](/documentation/ModelIO/MDLSubmeshTopology/edgeCreaseIndices)

A buffer containing vertex indices that describe edges to be treated as creases during surface subdivision.

[`edgeCreases`](/documentation/ModelIO/MDLSubmeshTopology/edgeCreases)

A buffer containing sharpness values to be applied to edges during surface subdivision.

[`edgeCreaseCount`](/documentation/ModelIO/MDLSubmeshTopology/edgeCreaseCount)

The number of entries in the edge creases buffers.

[`vertexCreaseIndices`](/documentation/ModelIO/MDLSubmeshTopology/vertexCreaseIndices)

A buffer containing vertex indices to be treated as creases during surface subdivision.

[`vertexCreases`](/documentation/ModelIO/MDLSubmeshTopology/vertexCreases)

A buffer containing sharpness values to be applied to points during surface subdivision.

[`vertexCreaseCount`](/documentation/ModelIO/MDLSubmeshTopology/vertexCreaseCount)

The number of entries in the vertex creases buffers.

### Identifying Holes

[`holes`](/documentation/ModelIO/MDLSubmeshTopology/holes)

An index buffer identifying faces to be treated as holes in the mesh during surface subdivision.

[`holeCount`](/documentation/ModelIO/MDLSubmeshTopology/holeCount)

The number of entries in the holes buffer.

## Relationships

### Conforms To

[`NSObjectProtocol`](/documentation/ObjectiveC/NSObjectProtocol)

[`Equatable`](/documentation/Swift/Equatable)

[`Hashable`](/documentation/Swift/Hashable)

[`CustomStringConvertible`](/documentation/Swift/CustomStringConvertible)

[`CVarArg`](/documentation/Swift/CVarArg)

[`CustomDebugStringConvertible`](/documentation/Swift/CustomDebugStringConvertible)

### Inherits From

[`NSObject-swift.class`](/documentation/ObjectiveC/NSObject-swift.class)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)