<!--
{
  "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/SCNSkinner",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "SceneKit"
    ],
    "preciseIdentifier" : "c:objc(cs)SCNSkinner"
  },
  "title" : "SCNSkinner"
}
-->

# SCNSkinner

An object that manages the relationship between skeletal animations and the nodes and geometries they animate.

```
class SCNSkinner
```

## Overview

Skeletal animation is a technique for simplifying the animation of complex geometries, such as humanoid characters in a game. An animation skeleton is a simple hierarchy of control nodes, which themselves have no visible geometry. Associating the skeleton with a geometry (also called “skinning” the skeleton or creating a skinned model) allows SceneKit to automatically deform the geometry when you move the skeleton’s control nodes, as shown below.

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

### Working with an Animation Skeleton

Typically, an artist creates a skinned model using external 3D authoring tools and saves it, along with animations that use the skeleton, in a scene file. You load the model from the scene file and pose or animate it in your app, either by using animation objects also loaded from the scene file or by directly manipulating the nodes in the skeleton.

You can also create a skinned model from separately defined geometry and skeleton data using the [`init(baseGeometry:bones:boneInverseBindTransforms:boneWeights:boneIndices:)`](/documentation/SceneKit/SCNSkinner/init(baseGeometry:bones:boneInverseBindTransforms:boneWeights:boneIndices:)) method.

### Sharing a Skinner Object

To work with a skinned model’s skeleton, use the [`skinner`](/documentation/SceneKit/SCNNode/skinner) property of the model’s root node. For example, one file might contain an animated game character, and other files might contain accessories (such as hats or backpacks) for the character to wear. An artist using 3D authoring tools can specify that the character and the accessories be animated using identical skeletons. To attach a hat to the character so that they animate together, you link the skinner object responsible for animating the hat to the skeleton associated with the animated character, as in the following example:

```objc
SCNNode *hero = [SCNScene sceneNamed:@"Hero"].rootNode;
SCNNode *hat = [SCNScene sceneNamed:@"FancyFedora"].rootNode;
hat.skinner.skeleton = hero.skinner.skeleton;
```

## Topics

### Creating a Skinner Object

[`+  skinnerWithBaseGeometry:bones:boneInverseBindTransforms:boneWeights:boneIndices:`](/documentation/SceneKit/SCNSkinner/init(baseGeometry:bones:boneInverseBindTransforms:boneWeights:boneIndices:))

Creates a skinner object with the specified visible geometry and skeleton information.

### Working with a Skinned Geometry

[`baseGeometry`](/documentation/SceneKit/SCNSkinner/baseGeometry)

The geometry whose surface the skinner’s animation skeleton deforms.

[`baseGeometryBindTransform`](/documentation/SceneKit/SCNSkinner/baseGeometryBindTransform)

The coordinate transformation for the skinner’s geometry in its default state.

### Working with an Animation Skeleton

[`skeleton`](/documentation/SceneKit/SCNSkinner/skeleton)

The root node of the skinner object’s animation skeleton.

[`bones`](/documentation/SceneKit/SCNSkinner/bones)

The control nodes of the animation skeleton.

[`boneInverseBindTransforms`](/documentation/SceneKit/SCNSkinner/boneInverseBindTransforms)

The default transforms for the animation skeleton’s bone nodes.

[`boneWeights`](/documentation/SceneKit/SCNSkinner/boneWeights)

The geometry source that defines the influence of each bone on the positions the geometry’s vertices.

[`boneIndices`](/documentation/SceneKit/SCNSkinner/boneIndices)

The geometry source defining the mapping from bone indices in skeleton data to the skinner’s bones array.

## Relationships

### Conforms To

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

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

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

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

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

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

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

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

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