When do you use SceneKit, RealityKit, SpriteKit or Metal for 3D and games-adjacent work?
Predict first
A team is starting a new AR product catalogue with 3D models for iPhone and Apple Vision Pro. Which engine should they evaluate first?
// A: SceneKit, because it is the oldest
// B: RealityKit, the actively developed engine with AR and visionOS support
// C: SpriteKit, because it is simple
- A
- B
- C
Mental model. SpriteKit is a flat paper-cut theatre, SceneKit a handy but ageing model railway kit, RealityKit the current, actively developed studio with AR and spatial support, and Metal the raw workshop where you build the engine yourself.
Apple offers several layers, and the choice is mostly about what you are building and how long the framework will be supported. SceneKit is a high-level, scene-graph 3D engine (nodes, geometries, materials, lights, cameras, physics, animation) that has been the easy route to 3D in apps since 2012: models in .scn or USDZ, an SCNView or the SwiftUI SceneView, and it still works, but Apple has signalled it is in maintenance mode (soft-deprecated in favour of RealityKit), so avoid starting a long-lived product on it. RealityKit is the modern engine: an entity-component-system design (entities with components, handled by systems), physically based rendering, spatial audio, physics, animation, and first-class support for AR (anchors, plane detection, image tracking through ARKit) and for visionOS (RealityView); it uses USDZ and Reality Composer Pro for content. It is the recommended choice for new AR, 3D model viewers and spatial computing. SpriteKit is the 2D engine (sprites, texture atlases, particle emitters, physics, actions, scenes), good for 2D games, animated effects and educational apps, and mature and stable. GameplayKit adds game logic (state machines, entities and components, pathfinding, randomness, agents). Metal is for custom renderers, performance-critical games, and full control; you build the engine yourself or use a third party (Unity, Unreal, Godot), which are the usual choice for large cross-platform games. ARKit provides tracking and scene understanding (world tracking, planes, meshes, faces, body), usually paired with RealityKit.
How to choose: a simple 2D game or effect → SpriteKit; showing a 3D model, AR, or visionOS → RealityKit; a quick 3D view in an older app that already uses SceneKit → keep SceneKit while planning a migration; a technically demanding or cross-platform game → Metal with an engine; rich UI that happens to need a little 3D (a rotating product) → RealityKit’s Model3D or RealityView, or even Core Animation transforms. Common concerns across all of them: asset pipeline (USDZ, texture compression, level of detail), performance (draw calls, polygon counts, texture memory, overdraw: profile with the Metal debugger and Instruments), frame pacing (a stable 60 or 120 fps matters more than peak speed), thermal and battery limits (sustained load throttles the device), accessibility (give 3D content labels and alternatives), memory (large textures dominate), and device support (not every device has the same GPU or sensors, especially for AR). Before committing to a framework, check its current status in the documentation and WWDC sessions, because Apple’s direction for 3D has shifted toward RealityKit and spatial computing.
RealityKit is Apple’s current 3D and AR engine and supports visionOS; SceneKit is in maintenance mode and SpriteKit is 2D.
Common traps
- Starting a new long-lived 3D product on SceneKit. It is in maintenance mode; evaluate RealityKit first.
- Choosing a heavy engine for a small effect. A SpriteKit scene, a Core Animation layer or a
Model3Dmay be enough.
They might follow up with
- What is RealityKit’s architecture? Entity-component-system, with systems processing components on entities.
- Which framework for a simple 2D game? SpriteKit, with GameplayKit for game logic if needed.
Related questions
- 18.5.2 How do Core Image and Metal relate, why is Core Image lazy, and how do you build a smooth image-processing…
- 18.6.2 How would you design and operate a playback platform shared by many apps: quality metrics, startup time…
← How do Core Image and Metal relate, why is Core Image lazy, and how…