---
title: SCNMorpher
framework: scenekit
role: symbol
role_heading: Class
path: scenekit/scnmorpher
---

# SCNMorpher

An object that manages smooth transitions between a node’s base geometry and one or more target geometries.

## Declaration

```swift
class SCNMorpher
```

## Overview

Overview

You control these transitions by associating an SCNMorpher object with a node using its morpher property. The morpher maintains an array of target geometries and a set of weights associated with each. When all weights are zero, the surface takes the form of the base geometry (from the node’s geometry property). When you use the setWeight(_:forTargetAt:) method to increase a weight to 1.0, the surface takes the form of the geometry at the corresponding index in the morpher’s targets array. If you use a variety of weight values for several targets, the surface takes a form that proportionally interpolates between the target geometries. You can also animate weights implicitly or explicitly using keypath animations. For example, the following code creates a morph animation that transitions one target weight back and forth repeatedly: CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"morpher.weights[0]"]; animation.fromValue = @0.0; animation.toValue = @1.0; animation.autoreverses = YES; animation.repeatCount = INFINITY; animation.duration = 5; [node addAnimation:animation forKey:nil]; A morpher and its target geometries may be loaded from a scene file or created programmatically. The base geometry and all target geometries must be topologically identical—that is, they must contain the same number and structural arrangement of vertices.

## Topics

### Specifying Morph Targets

- [targets](scenekit/scnmorpher/targets.md)

### Blending between Morph Targets

- [weight(forTargetAt:)](scenekit/scnmorpher/weight(fortargetat:).md)
- [setWeight(_:forTargetAt:)](scenekit/scnmorpher/setweight(_:fortargetat:).md)

### Changing Interpolation Mode

- [calculationMode](scenekit/scnmorpher/calculationmode.md)

### Constants

- [SCNMorpherCalculationMode](scenekit/scnmorphercalculationmode.md)

### Initializers

- [init(coder:)](scenekit/scnmorpher/init(coder:).md)

### Instance Properties

- [unifiesNormals](scenekit/scnmorpher/unifiesnormals.md)
- [weights](scenekit/scnmorpher/weights.md)

### Instance Methods

- [setWeight(_:forTargetNamed:)](scenekit/scnmorpher/setweight(_:fortargetnamed:).md)
- [weight(forTargetNamed:)](scenekit/scnmorpher/weight(fortargetnamed:).md)

## Relationships

### Inherits From

- [NSObject](objectivec/nsobject-swift.class.md)

### Conforms To

- [CVarArg](swift/cvararg.md)
- [CustomDebugStringConvertible](swift/customdebugstringconvertible.md)
- [CustomStringConvertible](swift/customstringconvertible.md)
- [Equatable](swift/equatable.md)
- [Hashable](swift/hashable.md)
- [NSCoding](foundation/nscoding.md)
- [NSObjectProtocol](objectivec/nsobjectprotocol.md)
- [NSSecureCoding](foundation/nssecurecoding.md)
- [SCNAnimatable](scenekit/scnanimatable.md)

## See Also

### Animation and Constraints

- [Animation](scenekit/animation.md)
- [Constraints](scenekit/constraints.md)
- [SCNSkinner](scenekit/scnskinner.md)
