Methods your app can implement to participate in SceneKit’s animation loop or perform additional rendering.
SDKs
- iOS 8.0+
- macOS 10.8+
- Mac Catalyst 13.0+
- tvOS 9.0+
- watchOS 3.0+
Framework
- Scene
Kit
Declaration
@protocol SCNSceneRendererDelegate
Overview
To build an app or game with SceneKit, you use an SCNView
object (or other object conforming the SCNScene
protocol) to display your scene. Then, to add per-frame game logic, or to perform custom Metal or OpenGL rendering before or after SceneKit renders the scene, specify your own custom object that implements the SCNScene
protocol for the view’s delegate
property.
When rendering your scene, an SCNView
object (or other SceneKit renderer) runs a rendering loop that processes and then draws the scene. SCNScene
shows the steps in this loop.
Frame processing in a SceneKit renderer

Each time through the rendering loop, a SceneKit view (or renderer) executes the following actions in order:
The view calls its delegate’s
renderer:
method.update At Time: SceneKit executes actions and performs animations attached to the scene graph. (See the
SCNAction
class andSCNAnimatable
protocol.)The view calls its delegate’s
renderer:
method.did Apply Animations At Time: SceneKit applies its physics simulation to any physics bodies in the scene. (See
SCNPhysics
,World SCNPhysics
, and related classes.)Body The view calls its delegate’s
renderer:
method.did Simulate Physics At Time: The view calls its delegate’s
renderer:
method.will Render Scene: at Time: SceneKit renders the scene graph in the view.
The view calls its delegate’s
renderer:
method.did Render Scene: at Time:
Working With the Rendering Loop
When building a game, you typically need to run logic relating to gameplay before each frame of animation. Game logic may include input handling, artificial intelligence, game scripting, or other tasks. Often, the results of this logic involve making changes to nodes or running actions on nodes.
The methods listed in SCNScene
provide places to implement your game logic. Which of these methods you implement for which tasks depends on your game design. For example, if your game uses physics, you might implement the renderer:
method to decide whether the player has won the game based on the state of physics bodies in the scene. If your gameplay isn’t based on the physics simulation, you might make such decisions in the renderer:
method instead.
Custom Rendering
If you want to perform custom rendering before or after SceneKit renders the contents of the scene, implement one or both methods listed in SCNScene
. These methods are appropriate for custom Metal or OpenGL drawing that does not depend on the structure or content of the scene graph. If you instead want to render a special effect that is attached to a specific location in the scene, see SCNNode
. Or if you want to use GPU shader programs to customize SceneKit’s rendering of scene content, see SCNShadable
.