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

# SCNNode

A structural element of a scene graph, representing a position and transform in a 3D coordinate space, to which you can attach geometry, lights, cameras, or other displayable content.

```
class SCNNode
```

## Overview

An [`SCNNode`](/documentation/SceneKit/SCNNode) object by itself has no visible content when the scene containing it is rendered—it represents only a coordinate space transform (position, orientation, and scale) relative to its parent node. To construct a scene, you use a hierarchy of nodes to create its structure, then add lights, cameras, and geometry to nodes to create visible content.

### Nodes Determine the Structure of a Scene

The hierarchy of nodes, or **scene graph**, in a scene defines both the organization of its contents and your ability to present and manipulate those contents using SceneKit. You may create a node hierarchy programmatically using SceneKit, load one from a file created using 3D authoring tools, or combine the two approaches. SceneKit provides many utilities for organizing and searching the scene graph—for details, see the methods in Managing the Node Hierarchy and Searching the Node Hierarchy.

The [`rootNode`](/documentation/SceneKit/SCNScene/rootNode) object in a scene defines the coordinate system of the world rendered by SceneKit. Each child node you add to this root node creates its own coordinate system, which is in turn inherited by its own children. You determine the transformation between coordinate systems using the node’s [`position`](/documentation/SceneKit/SCNNode/position), [`rotation`](/documentation/SceneKit/SCNNode/rotation), and [`scale`](/documentation/SceneKit/SCNNode/scale) properties properties (or directly using its [`transform`](/documentation/SceneKit/SCNNode/transform) property).

You use a hierarchy of nodes and transformations to model the contents of your scene in a way that suits the needs of your app. For example, if your app presents an animated view of a solar system, you can construct a node hierarchy that models celestial bodies relative to one another: Each planet can be a node, with its orbit and its current position in that orbit defined in the coordinate system of the sun. A planet node defines its own coordinate space, useful both for specifying the planet’s rotation and the orbits of its moons (each of which is a child node of its planet). With this scene hierarchy, you can easily add realistic animation to the scene—animating both the revolution of a moon around its planet and the planet around the sun will combine the animations so that the moon follows the planet.

### A Node’s Attachments Define Visual Content and Behavior

The node hierarchy determines the spatial and logical structure of a scene, but not its visible contents. You add 2D and 3D objects to a scene by attaching [`SCNGeometry`](/documentation/SceneKit/SCNGeometry) objects to nodes. (Geometries, in turn, have attached [`SCNMaterial`](/documentation/SceneKit/SCNMaterial) objects that determine their appearance.) To shade the geometries in a scene with light and shadow effects, add nodes with attached [`SCNLight`](/documentation/SceneKit/SCNLight) objects. To control the viewpoint from which the scene appears when rendered, add nodes with attached [`SCNCamera`](/documentation/SceneKit/SCNCamera) objects.

To add physics-based behaviors and special effects to SceneKit content, use other types of node attachments. For example, an [`SCNPhysicsBody`](/documentation/SceneKit/SCNPhysicsBody) object defines a node’s characteristics for physics simulation, and an [`SCNPhysicsField`](/documentation/SceneKit/SCNPhysicsField) object applies forces to physics bodies in an area around the node. An [`SCNParticleSystem`](/documentation/SceneKit/SCNParticleSystem) object attached to a node renders particle effects such as fire, rain, or falling leaves in the space defined by a node.

To improve performance, SceneKit can share attachments between multiple nodes. For example, in a racing game that includes many identical cars, the scene graph would contain many nodes—one to position and animate each car—but all car nodes would reference the same geometry object.

## Topics

### Creating a Node

[`node`](/documentation/SceneKit/SCNNode/node)

Creates and returns a node object.

[`init(geometry:)`](/documentation/SceneKit/SCNNode/init(geometry:))

Creates and returns a node object with the specified geometry attached.

[`nodeWithMDLObject:`](/documentation/SceneKit/SCNNode/nodeWithMDLObject:)

Creates a node from the specified Model I/O object.

### Managing the Node’s Transform

[`simdTransform`](/documentation/SceneKit/SCNNode/simdTransform)

The transform applied to the node relative to its parent. Animatable.

[`simdPosition`](/documentation/SceneKit/SCNNode/simdPosition)

The translation applied to the node. Animatable.

[`simdRotation`](/documentation/SceneKit/SCNNode/simdRotation)

The node’s orientation, expressed as a rotation angle about an axis. Animatable.

[`simdEulerAngles`](/documentation/SceneKit/SCNNode/simdEulerAngles)

The node’s orientation, expressed as pitch, yaw, and roll angles in radians. Animatable.

[`simdOrientation`](/documentation/SceneKit/SCNNode/simdOrientation)

The node’s orientation, expressed as a quaternion. Animatable.

[`simdScale`](/documentation/SceneKit/SCNNode/simdScale)

The scale factor applied to the node. Animatable.

[`simdPivot`](/documentation/SceneKit/SCNNode/simdPivot)

The pivot point for the node’s position, rotation, and scale. Animatable.

### Managing Node Content

[`name`](/documentation/SceneKit/SCNNode/name)

A name associated with the node.

[`light`](/documentation/SceneKit/SCNNode/light)

The light attached to the node.

[`camera`](/documentation/SceneKit/SCNNode/camera)

The camera attached to the node.

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

The geometry attached to the node.

[`morpher`](/documentation/SceneKit/SCNNode/morpher)

The morpher object responsible for blending the node’s geometry.

[`skinner`](/documentation/SceneKit/SCNNode/skinner)

The skinner object responsible for skeletal animations of node’s contents.

[`categoryBitMask`](/documentation/SceneKit/SCNNode/categoryBitMask)

A mask that defines which categories the node belongs to.

[`SCNBoundingVolume`](/documentation/SceneKit/SCNBoundingVolume)

Methods common to the [`SCNNode`](/documentation/SceneKit/SCNNode) and [`SCNGeometry`](/documentation/SceneKit/SCNGeometry) classes for measuring location and size.

### Constraining Node Behavior

[`constraints`](/documentation/SceneKit/SCNNode/constraints)

A list of constraints affecting the node’s transformation.

### Working with Node Animation

[`presentation`](/documentation/SceneKit/SCNNode/presentation)

A node object representing the state of the node as it currently appears onscreen.

[`isPaused`](/documentation/SceneKit/SCNNode/isPaused)

A Boolean value that determines whether to run actions and animations attached to the node and its child nodes.

### Modifying the Node Visibility

[`isHidden`](/documentation/SceneKit/SCNNode/isHidden)

A Boolean value that determines the visibility of the node’s contents. Animatable.

[`opacity`](/documentation/SceneKit/SCNNode/opacity)

The opacity value of the node. Animatable.

[`renderingOrder`](/documentation/SceneKit/SCNNode/renderingOrder)

The order the node’s content is drawn in relative to that of other nodes.

[`castsShadow`](/documentation/SceneKit/SCNNode/castsShadow)

A Boolean value that determines whether SceneKit renders the node’s contents into shadow maps.

[`movabilityHint`](/documentation/SceneKit/SCNNode/movabilityHint)

A value that indicates how SceneKit should handle the node when rendering movement-related effects.

[`SCNMovabilityHint`](/documentation/SceneKit/SCNMovabilityHint)

Values that inform SceneKit’s rendering for movement-related effects, used by the [`movabilityHint`](/documentation/SceneKit/SCNNode/movabilityHint) property.

### Managing the Node Hierarchy

[`parent`](/documentation/SceneKit/SCNNode/parent)

The node’s parent in the scene graph hierarchy.

[`childNodes`](/documentation/SceneKit/SCNNode/childNodes)

An array of the node’s children in the scene graph hierarchy.

[`addChildNode(_:)`](/documentation/SceneKit/SCNNode/addChildNode(_:))

Adds a node to the node’s array of children.

[`insertChildNode(_:at:)`](/documentation/SceneKit/SCNNode/insertChildNode(_:at:))

Adds a node to the node’s array of children at a specified index.

[`removeFromParentNode()`](/documentation/SceneKit/SCNNode/removeFromParentNode())

Removes the node from its parent’s array of child nodes.

[`replaceChildNode(_:with:)`](/documentation/SceneKit/SCNNode/replaceChildNode(_:with:))

Removes a child from the node’s array of children and inserts another node in its place.

### Searching the Node Hierarchy

[`childNodes(passingTest:)`](/documentation/SceneKit/SCNNode/childNodes(passingTest:))

Returns all nodes in the node’s child node subtree that satisfy the test applied by a block.

[`childNode(withName:recursively:)`](/documentation/SceneKit/SCNNode/childNode(withName:recursively:))

Returns the first node in the node’s child node subtree with the specified name.

[`enumerateChildNodes(_:)`](/documentation/SceneKit/SCNNode/enumerateChildNodes(_:))

Executes the specified block for each of the node’s child and descendant nodes.

[`enumerateHierarchy(_:)`](/documentation/SceneKit/SCNNode/enumerateHierarchy(_:))

Executes the specified block for each of the node’s child and descendant nodes, as well as for the node itself.

### Customizing Node Rendering

[`filters`](/documentation/SceneKit/SCNNode/filters)

An array of Core Image filters to be applied to the rendered contents of the node.

[`rendererDelegate`](/documentation/SceneKit/SCNNode/rendererDelegate)

An object responsible for rendering custom contents for the node using Metal or OpenGL.

### Adding Physics to a Node

[`physicsBody`](/documentation/SceneKit/SCNNode/physicsBody)

The physics body associated with the node.

[`physicsField`](/documentation/SceneKit/SCNNode/physicsField)

The physics field associated with the node.

### Working with Particle Systems

[`addParticleSystem(_:)`](/documentation/SceneKit/SCNNode/addParticleSystem(_:))

Attaches a particle system to the node.

[`particleSystems`](/documentation/SceneKit/SCNNode/particleSystems)

The particle systems attached to the node.

[`removeParticleSystem(_:)`](/documentation/SceneKit/SCNNode/removeParticleSystem(_:))

Removes a particle system attached to the node.

[`removeAllParticleSystems()`](/documentation/SceneKit/SCNNode/removeAllParticleSystems())

Removes any particle systems directly attached to the node.

### Working with Positional Audio

[`addAudioPlayer(_:)`](/documentation/SceneKit/SCNNode/addAudioPlayer(_:))

Adds the specified auto player to the node and begins playback.

[`audioPlayers`](/documentation/SceneKit/SCNNode/audioPlayers)

The audio players currently attached to the node.

[`removeAudioPlayer(_:)`](/documentation/SceneKit/SCNNode/removeAudioPlayer(_:))

Removes the specified audio player from the node, stopping playback.

[`removeAllAudioPlayers()`](/documentation/SceneKit/SCNNode/removeAllAudioPlayers())

Removes all audio players attached to the node, stopping playback.

### Copying a Node

[`clone()`](/documentation/SceneKit/SCNNode/clone())

Creates a copy of the node and its children.

[`flattenedClone()`](/documentation/SceneKit/SCNNode/flattenedClone())

Creates an optimized copy of the node and its children.

### Hit-Testing

[`hitTestWithSegment(from:to:options:)`](/documentation/SceneKit/SCNNode/hitTestWithSegment(from:to:options:))

Searches the node’s child node subtree for objects intersecting a line segment between two specified points.

[`SCNHitTestOption`](/documentation/SceneKit/SCNHitTestOption)

Options affecting the behavior of SceneKit hit-testing methods.

### Performing Node-Relative Operations

[`simdRotate(by:aroundTarget:)`](/documentation/SceneKit/SCNNode/simdRotate(by:aroundTarget:))

Changes the node’s position and orientation, relative to its current transform, through a rotation around the specified point in scene space.

[`simdLocalTranslate(by:)`](/documentation/SceneKit/SCNNode/simdLocalTranslate(by:))

Changes the node’s position relative to its current position.

[`simdLocalRotate(by:)`](/documentation/SceneKit/SCNNode/simdLocalRotate(by:))

Changes the node’s orientation relative to its current orientation.

[`simdLook(at:)`](/documentation/SceneKit/SCNNode/simdLook(at:))

Changes the node’s orientation so that its local forward vector points toward the specified location.

[`simdLook(at:up:localFront:)`](/documentation/SceneKit/SCNNode/simdLook(at:up:localFront:))

Changes the node’s orientation so that the specified forward vector points toward the specified location.

### Calculating Node-Relative Transforms

[`simdLocalRight`](/documentation/SceneKit/SCNNode/simdLocalRight)

The direction SceneKit treats as “right” in local space for all nodes.

[`simdLocalUp`](/documentation/SceneKit/SCNNode/simdLocalUp)

The direction SceneKit treats as “up” in local space for all nodes.

[`simdLocalFront`](/documentation/SceneKit/SCNNode/simdLocalFront)

The unit vector SceneKit treats as “forward” in local space for all nodes.

[`simdWorldRight`](/documentation/SceneKit/SCNNode/simdWorldRight)

The “right” (+X) direction vector relative to the node, expressed in world space.

[`simdWorldUp`](/documentation/SceneKit/SCNNode/simdWorldUp)

The “up” (+Y) direction vector relative to the node, expressed in world space.

[`simdWorldFront`](/documentation/SceneKit/SCNNode/simdWorldFront)

The “forward” (-Z) direction vector relative to the node, expressed in world space.

### Managing Transforms in World Space

[`simdWorldTransform`](/documentation/SceneKit/SCNNode/simdWorldTransform)

The world transform applied to the node.

[`simdWorldOrientation`](/documentation/SceneKit/SCNNode/simdWorldOrientation)

The node’s orientation relative to the scene’s world coordinate space.

[`simdWorldPosition`](/documentation/SceneKit/SCNNode/simdWorldPosition)

The node’s position relative to the scene’s world coordinate space.

### Converting Between Coordinate Spaces

[`simdConvertPosition(_:from:)`](/documentation/SceneKit/SCNNode/simdConvertPosition(_:from:))

Converts a position to the node’s local coordinate space from that of another node.

[`simdConvertPosition(_:to:)`](/documentation/SceneKit/SCNNode/simdConvertPosition(_:to:))

Converts a position from the node’s local coordinate space to that of another node.

[`simdConvertTransform(_:from:)`](/documentation/SceneKit/SCNNode/simdConvertTransform(_:from:))

Converts a transform to the node’s local coordinate space from that of another node.

[`simdConvertTransform(_:to:)`](/documentation/SceneKit/SCNNode/simdConvertTransform(_:to:))

Converts a transform from the node’s local coordinate space to that of another node.

[`simdConvertVector(_:from:)`](/documentation/SceneKit/SCNNode/simdConvertVector(_:from:))

Converts a direction vector to the node’s local coordinate space from that of another node.

[`simdConvertVector(_:to:)`](/documentation/SceneKit/SCNNode/simdConvertVector(_:to:))

Converts a direction vector from the node’s local coordinate space to that of another node.

### Handling UI Focus

[`focusBehavior`](/documentation/SceneKit/SCNNode/focusBehavior)

The focus behavior for a node.

[`SCNNodeFocusBehavior`](/documentation/SceneKit/SCNNodeFocusBehavior)

Options for the focusable states of a SceneKit node.

### Working with GameplayKit

[`entity`](/documentation/SceneKit/SCNNode/entity)

The GameplayKit entity this node represents.

### Managing the Node’s Transform (SceneKit Types)

[`transform`](/documentation/SceneKit/SCNNode/transform)

The transform applied to the node relative to its parent. Animatable.

[`position`](/documentation/SceneKit/SCNNode/position)

The translation applied to the node. Animatable.

[`rotation`](/documentation/SceneKit/SCNNode/rotation)

The node’s orientation, expressed as a rotation angle about an axis. Animatable.

[`eulerAngles`](/documentation/SceneKit/SCNNode/eulerAngles)

The node’s orientation, expressed as pitch, yaw, and roll angles in radians. Animatable.

[`orientation`](/documentation/SceneKit/SCNNode/orientation)

The node’s orientation, expressed as a quaternion. Animatable.

[`scale`](/documentation/SceneKit/SCNNode/scale)

The scale factor applied to the node. Animatable.

[`pivot`](/documentation/SceneKit/SCNNode/pivot)

The pivot point for the node’s position, rotation, and scale. Animatable.

### Performing Node-Relative Operations (SceneKit Types)

[`rotate(by:aroundTarget:)`](/documentation/SceneKit/SCNNode/rotate(by:aroundTarget:))

Changes the node’s position and orientation, relative to its current transform, through a rotation around the specified point in scene space.

[`localTranslate(by:)`](/documentation/SceneKit/SCNNode/localTranslate(by:))

Changes the node’s position relative to its current position.

[`localRotate(by:)`](/documentation/SceneKit/SCNNode/localRotate(by:))

Changes the node’s orientation relative to its current orientation.

[`look(at:)`](/documentation/SceneKit/SCNNode/look(at:))

Changes the node’s orientation so that its local forward vector points toward the specified location.

[`look(at:up:localFront:)`](/documentation/SceneKit/SCNNode/look(at:up:localFront:))

Changes the node’s orientation so that the specified forward vector points toward the specified location.

### Calculating Node-Relative Transforms (SceneKit Types)

[`localRight`](/documentation/SceneKit/SCNNode/localRight)

The direction SceneKit treats as “right” in local space for all nodes.

[`localUp`](/documentation/SceneKit/SCNNode/localUp)

The direction SceneKit treats as “up” in local space for all nodes.

[`localFront`](/documentation/SceneKit/SCNNode/localFront)

The unit vector SceneKit treats as “forward” in local space for all nodes.

[`worldRight`](/documentation/SceneKit/SCNNode/worldRight)

The “right” (+X) direction vector relative to the node, expressed in world space.

[`worldUp`](/documentation/SceneKit/SCNNode/worldUp)

The “up” (+Y) direction vector relative to the node, expressed in world space.

[`worldFront`](/documentation/SceneKit/SCNNode/worldFront)

The “forward” (-Z) direction vector relative to the node, expressed in world space.

### Managing Transforms in World Space (SceneKit Types)

[`worldTransform`](/documentation/SceneKit/SCNNode/worldTransform)

The world transform applied to the node.

[`setWorldTransform(_:)`](/documentation/SceneKit/SCNNode/setWorldTransform(_:))

Sets the world transform applied to the node.

[`worldOrientation`](/documentation/SceneKit/SCNNode/worldOrientation)

The node’s orientation relative to the scene’s world coordinate space.

[`worldPosition`](/documentation/SceneKit/SCNNode/worldPosition)

The node’s position relative to the scene’s world coordinate space.

### Converting Between Coordinate Spaces (SceneKit Types)

[`convertPosition(_:from:)`](/documentation/SceneKit/SCNNode/convertPosition(_:from:))

Converts a position to the node’s local coordinate space from that of another node.

[`convertPosition(_:to:)`](/documentation/SceneKit/SCNNode/convertPosition(_:to:))

Converts a position from the node’s local coordinate space to that of another node.

[`convertTransform(_:from:)`](/documentation/SceneKit/SCNNode/convertTransform(_:from:))

Converts a transform to the node’s local coordinate space from that of another node.

[`convertTransform(_:to:)`](/documentation/SceneKit/SCNNode/convertTransform(_:to:))

Converts a transform from the node’s local coordinate space to that of another node.

[`convertVector(_:from:)`](/documentation/SceneKit/SCNNode/convertVector(_:from:))

Converts a direction vector to the node’s local coordinate space from that of another node.

[`convertVector(_:to:)`](/documentation/SceneKit/SCNNode/convertVector(_:to:))

Converts a direction vector from the node’s local coordinate space to that of another node.



---

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)