SceneKit — framework Apple pro práci s 3D grafikou na iOS, macOS a tvOS, poskytující vysoceúrovňové API pro vytváření trojrozměrných scén bez znalosti OpenGL nebo Metal. Podporuje fyziku, animaci, osvětlení a integraci s ARKit. Podle údajů Apple WWDC (2025) se SceneKit používá ve více než 50 tisících aplikací a her.
Hlavní body
SceneKit — je framework pro 3D grafiku, který je součástí SDK Apple a byl představen v iOS 8 (2014). SceneKit poskytuje plně skriptovatelné API fungující na Metal a OpenGL pro vytváření interaktivních 3D scén. Framework podporuje import modelů ve formátech Collada (DAE), Alembic (ABC), USD a GLTF prostřednictvím Model I/O.
Na rozdíl od nízkoúrovňových API (Metal, Vulkan) SceneKit přebírá správu vykreslování, osvětlení a fyziky. Vývojář popisuje scénu deklarativně: přidává uzly, nastavuje materiály a animace. SceneKit automaticky optimalizuje geometrii, slučuje draw calls a spravuje LOD v případě potřeby.
SceneKit může pracovat společně s ARKit pro zobrazení 3D objektů v reálném světě, stejně jako s Core ML pro strojové vidění a analýzu scény. Podle Apple (2025) nejnovější verze SceneKit používá pouze Metal API s podporou Metal 3 a GPU Family 9 na čipech Apple Silicon.
SceneKit se objevil na macOS v roce 2012 jako součást OS X Mountain Lion a původně používal OpenGL pro vykreslování. S vydáním iOS 8 se framework stal dostupným na mobilních zařízeních. Verze SceneKit 2.0 (iOS 10) přidala podporu pro PBR materiály, HDR osvětlení a integraci s Model I/O pro import modelů.
V iOS 12 SceneKit zcela přešel na Metal. iOS 15 zavedl podporu pro formát USDZ a AR Quick Look. S iOS 18 (2024) získal SceneKit hardwarovou akceleraci sledování paprsků na zařízeních s čipem A17 Pro a M4, což umožnilo realistické stíny a odrazy v reálném čase na mobilních zařízeních.
Architektura SceneKit je založena na grafu scény, kde SCNScene je kořenový prvek obsahující hierarchii SCNNode. Každý uzel má podřízené uzly a může obsahovat geometrii, kameru, světlo nebo fyzické těleso. Pozice uzlu se určuje pomocí SCNVector3 (x, y, z) v levotočivém souřadnicovém systému.
SCNScene obsahuje celý stav 3D světa: kořenový uzel rootNode, nastavení pozadí (background), světelné zdroje a fyzický svět (SCNPhysicsWorld). Scénu lze načíst ze souboru .scn (SceneKit Scene Format) nebo vytvořit programově. Formát .scn je otevřený a založený na JSON.
import SceneKit
let scene = SCNScene()
scene.background.contents = UIColor.darkGray
// Vytvoření kamery
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(0, 5, 10)
scene.rootNode.addChildNode(cameraNode)
// Vytvoření krychle s fyzikou
let box = SCNBox(width: 2, height: 2, length: 2, chamferRadius: 0)
let boxNode = SCNNode(geometry: box)
boxNode.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.dynamic,
shape: SCNPhysicsShape(geometry: box))
scene.rootNode.addChildNode(boxNode)
Třída SCNCamera konfiguruje perspektivní nebo ortografickou projekci. Parametry: fieldOfView (zorný úhel, výchozí 45°), zNear/zFar (blízká/vzdálená ořezová rovina). SceneKit automaticky spravuje projekční matici na základě těchto parametrů a poměru stran obrazovky.
SCNNode spojuje geometrii, transformaci a fyzické těleso. Uzly mohou být prázdné (kontejnery pro jiné uzly) nebo obsahovat geometrii prostřednictvím vlastnosti geometry. Každý uzel má název (name) pro programové vyhledávání a může být animován pomocí CAAnimation nebo předdefinovaných SCNTransaction.
Transformace uzlu se určuje pomocí vlastností position (SCNVector3), rotation (SCNVector4) a scale (SCNVector3). Pro složité transformace se používá vlastnost transform (SCNMatrix4). Dále jsou k dispozici pivot — posun středu transformace a worldPosition — absolutní pozice v prostoru světa nezávisle na hierarchii.
SCNView — UIView pro zobrazení SCNScene. Vlastnost allowsCameraControl zapíná uživatelské ovládání kamery gesty (přesun, otočení, přiblížení). Pro ladění jsou k dispozici showsStatistics (FPS, draw calls, polygony) a debugOptions (wireframe, bounding boxes).
V SwiftUI se SceneKit vkládá prostřednictvím SceneView, které obaluje SCNView a podporuje vazby na parametry scény. Podle Apple (2025) SceneView používá stejný Metal renderer jako SCNView, bez dodatečné režie na mostě mezi SwiftUI a UIKit.
SCNMaterial určuje, jak povrch geometrie interaguje se světlem. SceneKit podporuje PBR (Physically Based Rendering) prostřednictvím SCNMaterial.LightingModel.physicallyBased, který používá parametry roughness, metalness, albedo a normal. PBR materiály vypadají realisticky při jakémkoli osvětlení bez ručního nastavení lesku.
SCNMaterial má několik slotů: diffuse (barva/textura), specular (zrcadlový lesk), normal (mapa normál), emission (záření), roughness (drsnost) a metalness (kovovost). Každý slot může obsahovat UIColor, UIImage, CALayer nebo SKScene pro animované textury.
// PBR materiál pro 3D objekt
let sphere = SCNSphere(radius: 1.5)
let material = SCNMaterial()
material.lightingModel = SCNMaterial.LightingModel.physicallyBased
material.diffuse.contents = UIColor.orange
material.roughness.contents = 0.3
material.metalness.contents = 0.8
sphere.materials = [material]
let sphereNode = SCNNode(geometry: sphere)
sphereNode.position = SCNVector3(0, 2, -5)
Parametr roughness 0.3 s metalness 0.8 vytváří materiál připomínající leštěný kov s matným povrchem. Pro dielektrika (dřevo, plast) se metalness nastavuje na 0, a pro kovy — blízko 1.0. PBR materiály se automaticky přizpůsobují HDR osvětlení scény.
SCNLight podporuje několik typů světelných zdrojů: omni (bodový), directional (směrový), spot (reflektor), ambient (okolní) a area (plošný). Každý zdroj má intenzitu (intensity), barvu (color) a může vrhat stíny (castsShadow). SceneKit automaticky spravuje stíny prostřednictvím shadow maps.
SceneKit podporuje HDR osvětlení s tónovou kompresí (tone mapping). Vlastnost wantsHDR na SCNView zapíná rozšířený dynamický rozsah. Atributy kamery: whitePoint, adaptativeLuminance a exposure přizpůsobují obraz jasu scény a vytvářejí efekt fotografické expozice.
SCNPhysicsBody simuluje fyziku pevných těles: gravitaci, kolize a tření. Typy těles: .static (nehybné), .dynamic (pod vlivem sil) a .kinematic (programově řízené). Tvar tělesa se určuje pomocí SCNPhysicsShape, který může být založen na geometrii uzlu nebo na zjednodušeném tvaru (box, sphere, concave polyhedron).
SCNPhysicsWorld spravuje globální fyziku scény: gravitaci (gravity), rychlost simulace (speed) a detekci kolizí prostřednictvím delegáta SCNPhysicsContactDelegate. SceneKit podporuje fyzické klouby (SCNPhysicsHingeJoint, SCNPhysicsBallJoint, SCNPhysicsSliderJoint) pro vytváření mechanismů a spojených objektů.
Vývoj v SceneKit obvykle začíná načtením 3D modelu prostřednictvím Model I/O nebo souboru .scn. Editor scén v Xcode (Scene Editor) umožňuje vizuálně umisťovat objekty, konfigurovat materiály a osvětlení bez kódu. Soubory .scn se ukládají ve formátu JSON a podporují správu verzí prostřednictvím git.
Model I/O (ModelIO.framework) — výkonný nástroj pro import, export a zpracování 3D modelů. SceneKit může přímo používat objekty MDLAsset a převádět je na SCNScene. Podporované formáty: USD, USDZ, OBJ, STL, PLY, Collada (DAE) a Alembic (ABC). Modely s animacemi (kosterní animace, morphing) se také importují.
// Načtení 3D modelu přes Model I/O
import ModelIO
let url = Bundle.main.url(forResource: "robot",
withExtension: "usdz")!
let asset = MDLAsset(url: url)
let scene = SCNScene(mdlAsset: asset)
// Vyhledávání uzlů podle názvu pro konfiguraci
if let robot = scene.rootNode.childNode(
withName: "RobotArmature", recursively: true
) {
robot.position = SCNVector3(0, 0, -3)
}
Po importu lze model animovat pomocí CAAnimation, zkopírovaného z MDLAnimation, nebo pomocí SCNTransaction pro plynulé změny vlastností. Animační systém SceneKit podporuje míchání animací a synchronizaci s fyzikou pro vytváření realistických pohybů.
SCNTransaction umožňuje seskupovat změny parametrů scény do animačního bloku s určenou délkou. Metody begin() a commit() obklopují změny a duration nastavuje dobu trvání animace. Vnořené transakce jsou podporovány pro paralelní animace s různou délkou. Completion blok se provede po dokončení animace.
Pro kosterní animaci SceneKit podporuje SCNAnimation a SCNMorpher pro blend-shape (morph targets). Každá animace může být opakována, časově škálována a smíchána s jinými animacemi pomocí additive blending. Podle Apple (2025) SceneKit podporuje až 4 současně míchané animace na jedné kostře.
SCNParticleSystem — vestavěný systém částic pro vytváření efektů: kouř, oheň, déšť a jiskry. Částice mohou být emitovány z bodu, koule, krychle nebo povrchu geometrie. Parametry: birthRate, particleLifeSpan, speed, acceleration a colorOverLife. Systémy částic pracují na GPU pro maximální výkon.
Podle Apple (2025) SCNParticleSystem podporuje až 100 tisíc částic s 60 FPS na zařízeních s A16+. Částice mohou reagovat na kolize s fyzickými tělesy scény. Pro složité efekty lze kombinovat několik systémů částic s různými parametry a připojit k pohyblivým uzlům.
SceneKit je preferovaným vysoceúrovňovým frameworkem pro aplikace ARKit. ARSCNView rozšiřuje SCNView a automaticky synchronizuje virtuální 3D svět s reálným prostředím. Analýzu obrazu, detekci rovin a sledování obličeje provádí ARKit, vykreslování SceneKit.
ARSCNView podporuje všechny funkce SCNView, ale nahrazuje kameru scény skutečnou kamerou zařízení. ARKit analyzuje video z kamery a vytváří ARAnchor, které SceneKit převádí na SCNNode. Relace ARKit se spravuje prostřednictvím vlastnosti session, která se konfiguruje s konfigurací (ARWorldTrackingConfiguration, ARFaceTrackingConfiguration).
import ARKit
class ARViewController: UIViewController,
ARSessionDelegate {
let sceneView = ARSCNView()
override func viewDidLoad() {
super.viewDidLoad()
sceneView.session.run(
ARWorldTrackingConfiguration()
)
sceneView.autoenablesDefaultLighting = true
sceneView.delegate = self
}
}
Vlastnost autoenablesDefaultLighting přidává vestavěné osvětlení odpovídající reálnému prostředí. ARKit 6 (iOS 18) podporuje Location Anchors pro ukotvení 3D objektů k zeměpisným souřadnicím a Room Tracking pro mapování vnitřních prostor s detailem až do úrovně nábytku.
ARKit detekuje horizontální a vertikální roviny (podlahy, stoly, stěny) prostřednictvím delegáta didAdd/didUpdate/didRemove anchor. Uzel SceneKit připojený k ARPlaneAnchor automaticky sleduje polohu roviny v reálném čase. Pro umísťování objektů se používá metoda hitTest na ARSCNView nebo raycastQuery.
Podle Apple (2025) je maximální vzdálenost sledování ARKit na A17 Pro 50 metrů při osvětlení 10 luxů. SceneKit + ARKit poskytují koncovou prodlevu (motion-to-photon) menší než 20 ms, což je kritické pro AR hry a průmyslové aplikace s překrýváním 3D instrukcí na reálném zařízení.
Často kladené otázky
SceneKit — framework Apple pro 3D grafiku, který umožňuje vytvářet interaktivní trojrozměrné scény bez nízkoúrovňového programování. Používá se pro hry, AR aplikace, vizualizaci dat a 3D editory na iOS, macOS a tvOS.
SceneKit — vysoceúrovňové API s hotovým rendererem a fyzikou, vhodné pro typické 3D úlohy. Metal — nízkoúrovňové API pro plnou kontrolu nad GPU. SceneKit interně používá Metal, a Metal je vhodný pro vlastní vykreslovací efekty.
SceneKit prostřednictvím Model I/O podporuje USD, USDZ, OBJ, STL, Collada (DAE), Alembic (ABC), PLY a GLTF. Nativní formát — .scn (SceneKit Scene Format) založený na JSON. Geometrii lze vytvářet programově pomocí SCNGeometry.
Používejte LOD (Level of Detail) pro vzdálené objekty, slučujte geometrii se stejnými materiály, omezte počet stínů a světelných zdrojů na 3–4. Zapněte Statistics pro sledování FPS a draw calls v reálném čase.
Ano, prostřednictvím ARSCNView — rozšíření SCNView pro ARKit. SceneKit automaticky synchronizuje 3D scénu s reálným světem, podporuje detekci rovin, obličejů a obrázků. Toto je nejjednodušší způsob, jak přidat 3D objekty do AR.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také