SceneKit para Swift: Guía completa de gráficos 3D
SceneKit es un potente framework para trabajar con gráficos 3D, desarrollado por Apple. Proporciona a los desarrolladores una API de alto nivel para crear, visualizar y animar escenas tridimensionales en todas las plataformas Apple: iOS, macOS, tvOS y watchOS. A diferencia de las API gráficas de bajo nivel (Metal, OpenGL), SceneKit abstrae los complejos cálculos matemáticos y la interacción con la GPU, permitiéndote concentrarte en la lógica de tu aplicación.
¿Para qué sirve SceneKit? Este framework es ideal para crear juegos, presentaciones 3D interactivas, visualización de datos, maquetas arquitectónicas y aplicaciones educativas. Soporta motor físico (simulación de gravedad, colisiones), sistema de partículas, animación esquelética, trabajo con sombras y luces, así como integración con realidad aumentada (ARKit). SceneKit permite cargar modelos en formatos .dae (Collada), .scn (formato propio de Apple) y .usdz, lo que lo convierte en una excelente herramienta para importar assets desde Blender, Maya o 3ds Max.
La principal ventaja de SceneKit frente a competidores (como Unity) es su integración nativa con el ecosistema Apple. Puedes usar SwiftUI, UIKit o AppKit para crear la interfaz, y SceneKit para renderizar contenido 3D, todo con un mismo lenguaje (Swift). El framework gestiona automáticamente la memoria y optimiza el renderizado para cada dispositivo, algo crucial en aplicaciones móviles.
Instalación y configuración
SceneKit forma parte del SDK estándar de Apple, por lo que no requiere instalación adicional mediante gestores de paquetes (CocoaPods, Swift Package Manager). Para empezar, solo necesitas importar el framework en tu proyecto.
No hay un comando de instalación, ya que el framework viene preinstalado. Sin embargo, si usas Swift Package Manager para otras dependencias, asegúrate de que tu proyecto esté configurado para iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 3.0+.
Para importarlo en tu código, usa:
import SceneKit
import SceneKit.ModelIO // Para cargar modelos a través de Model I/O
Si trabajas con Xcode, simplemente añade SceneKit.framework en la sección "Frameworks, Libraries, and Embedded Content" de tu target.
Inicio rápido: ejemplo mínimo funcional
Vamos a crear una escena 3D sencilla con un cubo giratorio. Este ejemplo se puede ejecutar en un Playground o en una app para iOS/macOS.
import SceneKit
import PlaygroundSupport
// 1. Crear la escena
let scene = SCNScene()
// 2. Crear la cámara
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(x: 0, y: 0, z: 5)
scene.rootNode.addChildNode(cameraNode)
// 3. Crear el cubo
let boxGeometry = SCNBox(width: 1.0, height: 1.0, length: 1.0, chamferRadius: 0.0)
let boxNode = SCNNode(geometry: boxGeometry)
boxNode.position = SCNVector3(x: 0, y: 0, z: 0)
scene.rootNode.addChildNode(boxNode)
// 4. Añadir animación de rotación
let rotateAction = SCNAction.rotateBy(x: 0, y: CGFloat.pi * 2, z: 0, duration: 5.0)
let repeatAction = SCNAction.repeatForever(rotateAction)
boxNode.runAction(repeatAction)
// 5. Configurar la vista en Playground
let scnView = SCNView(frame: CGRect(x: 0, y: 0, width: 400, height: 400))
scnView.scene = scene
scnView.backgroundColor = UIColor.darkGray
scnView.autoenablesDefaultLighting = true
PlaygroundPage.current.liveView = scnView
Clases y métodos principales de SceneKit
A continuación, los componentes clave del framework con ejemplos de uso.
1. SCNScene — contenedor de toda la escena 3D
Firma: class SCNScene : NSObject
Qué hace: Es el objeto raíz que contiene todos los nodos (SCNNode), geometría, fuentes de luz, cámaras y cuerpos físicos. La escena es un grafo de nodos.
let scene = SCNScene()
scene.background.contents = UIC