<!--
{
  "availability" : [
    "iOS: 8.0.0 - 26.0.0",
    "iPadOS: 8.0.0 - 26.0.0",
    "macCatalyst: 13.1.0 - 26.0.0",
    "macOS: 10.8.0 - 26.0.0",
    "tvOS: 9.0.0 - 26.0.0",
    "visionOS: 1.0.0 - 26.0.0",
    "watchOS: 3.0.0 - 26.0.0"
  ],
  "documentType" : "symbol",
  "framework" : "SceneKit",
  "identifier" : "/documentation/SceneKit/SCNLevelOfDetail",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "SceneKit"
    ],
    "preciseIdentifier" : "c:objc(cs)SCNLevelOfDetail"
  },
  "title" : "SCNLevelOfDetail"
}
-->

# SCNLevelOfDetail

An alternate resolution for a geometry that SceneKit automatically substitutes to improve rendering performance.

```
class SCNLevelOfDetail
```

## Overview

You use level-of-detail objects when you have a detailed geometry that appears at several apparent sizes in a scene. For example, the teapot model on the the left in the figure below has 256 polygons, the model at center has 1024 polygons, and the model on the right has 14,400 polygons. If all three models appear close to the camera, filling most of the rendered view, the difference in detail between them is clearly visible—but if they appear far away, taking up a small area of the view, the difference is much less obvious. Rendering higher-resolution geometries incurs a higher performance cost.

![](images/com.apple.scenekit/media-2929784@2x.png)

When you associate one or more level-of-detail objects with a [`SCNGeometry`](/documentation/SceneKit/SCNGeometry) object using its [`levelsOfDetail`](/documentation/SceneKit/SCNGeometry/levelsOfDetail) property, SceneKit automatically substitutes alternate geometries when appropriate. For example, the two lower-resolution teapot models seen above can be added as levels of detail for the high-resolution model.

For each level of detail, you specify either a world-space distance or a screen-space radius. The measure you specify determines the threshold where SceneKit automatically renders that level of detail’s alternate geometry instead of the original geometry. If you specify a distance, the alternate geometry appears when the node containing the geometry is moved that distance away from the camera. If you specify a radius, the alternate geometry appears when the pixel area covered by the rendered geometry is smaller than a circle of that radius.

The geometries associated with lower levels of detail need not share all attributes of the original geometry. For example, you can use different materials for levels of detail that only appear when far away from the camera, disabling expensive features such as per-pixel lighting, reflection mapping, or custom shader programs.

## Topics

### Creating a Level of Detail

[`+  levelOfDetailWithGeometry:screenSpaceRadius:`](/documentation/SceneKit/SCNLevelOfDetail/init(geometry:screenSpaceRadius:))

Creates a level of detail with the specified geometry and threshold pixel radius.

[`+  levelOfDetailWithGeometry:worldSpaceDistance:`](/documentation/SceneKit/SCNLevelOfDetail/init(geometry:worldSpaceDistance:))

Creates a level of detail with the specified geometry and threshold camera distance.

### Inspecting a Level of Detail

[`geometry`](/documentation/SceneKit/SCNLevelOfDetail/geometry)

The geometry associated with this level of detail.

[`screenSpaceRadius`](/documentation/SceneKit/SCNLevelOfDetail/screenSpaceRadius)

The maximum radius (in pixels) of the geometry’s bounding sphere for this level of detail to appear.

[`worldSpaceDistance`](/documentation/SceneKit/SCNLevelOfDetail/worldSpaceDistance)

The minimum distance from the current point of view for this level of detail to appear.

## Relationships

### Conforms To

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

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

[`NSCopying`](/documentation/Foundation/NSCopying)

[`NSSecureCoding`](/documentation/Foundation/NSSecureCoding)

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

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

[`NSCoding`](/documentation/Foundation/NSCoding)

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

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

### 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)