SceneKit — az Apple keretrendszere a 3D grafikával való munkához iOS, macOS és tvOS rendszereken, amely magas szintű API-t biztosít háromdimenziós jelenetek létrehozásához OpenGL vagy Metal ismerete nélkül. Támogatja a fizikát, animációt, világítást és az ARKit rendszerrel való integrációt. Az Apple WWDC (2025) adatai szerint a SceneKit-et több mint 50 ezer alkalmazás és játék használja.
Főbb pontok
SceneKit — egy 3D grafikai keretrendszer, amely az Apple SDK része, és az iOS 8 (2014) rendszerben mutatták be. A SceneKit egy teljesen szkriptelhető API-t biztosít, amely Metal és OpenGL fölött működik interaktív 3D jelenetek létrehozásához. A keretrendszer támogatja a modellek importálását Collada (DAE), Alembic (ABC), USD és GLTF formátumokban a Model I/O segítségével.
Az alacsony szintű API-któl (Metal, Vulkan) eltérően a SceneKit átveszi a megjelenítés, világítás és fizika kezelését. A fejlesztő deklaratív módon írja le a jelenetet: hozzáadja a csomópontokat, beállítja az anyagokat és animációkat. A SceneKit automatikusan optimalizálja a geometriát, összevonja a draw callokat és kezeli az LOD-t, amikor szükséges.
A SceneKit együttműködhet az ARKit rendszerrel a 3D objektumok valós világban történő megjelenítéséhez, valamint a Core ML-lel a gépi látáshoz és jelenetelemzéshez. Az Apple (2025) szerint a SceneKit legújabb változata csak a Metal API-t használja, támogatva a Metal 3 és GPU Family 9 szabványokat Apple Silicon chipeken.
A SceneKit a macOS-en 2012-ben jelent meg az OS X Mountain Lion részeként, és kezdetben OpenGL-t használt a megjelenítéshez. Az iOS 8 megjelenésével a keretrendszer mobileszközökön is elérhetővé vált. A SceneKit 2.0 (iOS 10) hozzáadta a PBR anyagok, a HDR világítás és a Model I/O rendszerrel való integráció támogatását a modellek importálásához.
Az iOS 12-ben a SceneKit teljesen áttért a Metalra. Az iOS 15 bevezette az USDZ formátum és az AR Quick Look támogatását. Az iOS 18 (2024) rendszerrel a SceneKit hardveres sugárkövetési gyorsítást kapott az A17 Pro és M4 chippel rendelkező eszközökön, lehetővé téve a valós idejű, élethű árnyékokat és tükröződéseket mobileszközökön.
A SceneKit architektúrája a jelenetgráfon alapul, ahol az SCNScene a győkérelem, amely az SCNNode hierarchiát tartalmazza. Minden csomópontnak vannak gyermek csomópontjai, és tartalmazhat geometriát, kamerát, fényt vagy fizikai testet. A csomópont pozícióját az SCNVector3 (x, y, z) határozza meg a bal oldali koordináta-rendszerben.
SCNScene tartalmazza a 3D világ teljes állapotát: a győkér csomópontot rootNode, a háttér beállításait (background), a fényforrásokat és a fizikai világot (SCNPhysicsWorld). A jelenet betölthető .scn fájlból (SceneKit Scene Format) vagy programozottan létrehozható. A .scn formátum nyílt és JSON-alapú.
import SceneKit
let scene = SCNScene()
scene.background.contents = UIColor.darkGray
// Kamera létrehozása
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(0, 5, 10)
scene.rootNode.addChildNode(cameraNode)
// Kocka létrehozása fizikával
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)
Az SCNCamera osztály konfigurálja a perspektív vagy ortografikus vetítést. Paraméterek: fieldOfView (látószög, alapértelmezett 45°), zNear/zFar (közeli/távoli vágósík). A SceneKit automatikusan kezeli a vetítési mátrixot ezen paraméterek és a képernyő képaránya alapján.
SCNNode összeköti a geometriát, transzformációt és fizikai testet. A csomópontok lehetnek üresek (tárolók más csomópontok számára) vagy tartalmazhatnak geometriát a geometry tulajdonságon keresztül. Minden csomópontnak van neve (name) a programozott kereséshez, és animálható CAAnimation vagy előre meghatározott SCNTransaction segítségével.
A csomópont transzformációját a position (SCNVector3), rotation (SCNVector4) és scale (SCNVector3) tulajdonságok határozzák meg. Összetett transzformációkhoz a transform (SCNMatrix4) tulajdonságot használjuk. Elérhető továbbá a pivot — a transzformációs középpont eltolása és a worldPosition — abszolút pozíció a világtérben, függetlenül a hierarchiától.
SCNView — UIView az SCNScene megjelenítéséhez. Az allowsCameraControl tulajdonság bekapcsolja a kamera felhasználó általi vezérlését gesztusokkal (mozgatás, forgatás, nagyítás). Hibakereséshez elérhető a showsStatistics (FPS, draw callok, poligonok) és a debugOptions (wireframe, bounding boxes).
SwiftUI-ban a SceneKit a SceneView segítségével ágyazható be, amely becsomagolja az SCNView-t és támogatja a jelenet paramétereinek kötését. Az Apple (2025) szerint a SceneView ugyanazt a Metal megjelenítőt használja, mint az SCNView, külön többletterhelés nélkül a SwiftUI és UIKit közötti hídban.
SCNMaterial határozza meg, hogy a geometria felülete hogyan kölcsönhatás a fénnyel. A SceneKit támogatja a PBR-t (Physically Based Rendering) az SCNMaterial.LightingModel.physicallyBased segítségével, amely a roughness, metalness, albedo és normal paramétereket használja. A PBR anyagok minden világításban élethűen néznek ki, kézi csillogásbeállítás nélkül.
SCNMaterial több csatornával rendelkezik: diffuse (szín/textúra), specular (tükröző csillogás), normal (normál térkép), emission (fénykibocsátás), roughness (érdesség) és metalness (fémesség). Minden csatorna tartalmazhat UIColor, UIImage, CALayer vagy SKScene értéket animált textúrák számára.
// PBR anyag 3D objektumhoz
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)
A roughness 0.3 és metalness 0.8 paraméterek matt felületű csiszolt fémhez hasonló anyagot hoznak létre. Dielektrikumok (fa, műanyag) esetén a metalness értéke 0, fémeknél pedig közel 1.0. A PBR anyagok automatikusan alkalmazkodnak a jelenet HDR világításához.
SCNLight több típusú fényforrást támogat: omni (pontszerű), directional (irányított), spot (reflektor), ambient (környezeti) és area (felületi). Minden forrásnak van intenzitása (intensity), színe (color) és vethet árnyékot (castsShadow). A SceneKit automatikusan kezeli az árnyékokat shadow maps segítségével.
A SceneKit támogatja a HDR világítást tónuskompresszióval (tone mapping). A wantsHDR tulajdonság az SCNView-n bekapcsolja a kiterjesztett dinamikatartományt. Kamera attribútumok: whitePoint, adaptativeLuminance és exposure a képet a jelenet fényességéhez igazítják, fotográfiai exponálási hatást keltve.
SCNPhysicsBody szimulálja a szilárd testek fizikáját: gravitáció, ütközések és súrlódás. Testtípusok: .static (mozdulatlan), .dynamic (erők hatása alatt) és .kinematic (programozottan vezérelt). A test alakját az SCNPhysicsShape határozza meg, amely alapulhat a csomópont geometriáján vagy egyszerűsített formán (box, sphere, concave polyhedron).
SCNPhysicsWorld kezeli a jelenet globális fizikáját: gravitáció (gravity), szimulációs sebesség (speed) és ütközésérzékelés az SCNPhysicsContactDelegate delegálton keresztül. A SceneKit fizikai kapcsolatokat támogat (SCNPhysicsHingeJoint, SCNPhysicsBallJoint, SCNPhysicsSliderJoint) mechanizmusok és összekapcsolt objektumok létrehozásához.
Fejlesztés a SceneKit-ben általában egy 3D modell betöltésével kezdődik a Model I/O vagy .scn fájl segítségével. Az Xcode jelenetszerkesztője (Scene Editor) lehetővé teszi az objektumok vizuális elhelyezését, az anyagok és világítás konfigurálását kód nélkül. A .scn fájlok JSON formátumban tárolódnak és támogatják a verziókezelést git segítségével.
Model I/O (ModelIO.framework) — egy hatékony eszköz 3D modellek importálására, exportálására és feldolgozására. A SceneKit közvetlenül használhatja az MDLAsset objektumokat, átalakítva azokat SCNScene-té. Támogatott formátumok: USD, USDZ, OBJ, STL, PLY, Collada (DAE) és Alembic (ABC). Animációs modellek (vázanimáció, morphing) szintén importálhatók.
// 3D modell betöltése Model I/O segítségével
import ModelIO
let url = Bundle.main.url(forResource: "robot",
withExtension: "usdz")!
let asset = MDLAsset(url: url)
let scene = SCNScene(mdlAsset: asset)
// Csomópontok keresése név szerint konfigurációhoz
if let robot = scene.rootNode.childNode(
withName: "RobotArmature", recursively: true
) {
robot.position = SCNVector3(0, 0, -3)
}
Importálás után a modell animálható a CAAnimation segítségével, amelyet MDLAnimation-ból másoltak, vagy SCNTransaction segítségével a tulajdonságok zökkenőmentes változtatásához. A SceneKit animációs rendszere támogatja az animációk keverését és a fizikával való szinkronizálást az élethű mozgások létrehozásához.
SCNTransaction lehetővé teszi a jelenet paramétereinek módosításainak csoportosítását egy adott időtartamú animációs blokkba. A begin() és commit() metódusok veszik körül a változtatásokat, a duration pedig az animáció időtartamát adja meg. Az egymásba ágyazott tranzakciók támogatottak különböző időtartamú párhuzamos animációkhoz. A Completion blokk az animáció befejezése után fut le.
Vázanimációhoz a SceneKit támogatja az SCNAnimation és SCNMorpher elemeket a blend-shape-ekhez (morph targets). Minden animáció ismételhető, időben skálázható és más animációkkal keverhető additive blending segítségével. Az Apple (2025) szerint a SceneKit akár 4 egyidejűleg kevert animációt is támogat egyetlen vázon.
SCNParticleSystem — beépített részecskerendszer effektek létrehozásához: füst, tűz, eső és szikrák. A részecskék kibocsáthatók pontból, gömbőből, kockából vagy geometria felüzetéről. Paraméterek: birthRate, particleLifeSpan, speed, acceleration és colorOverLife. A részecskerendszerek a GPU-n futnak a maximális teljesítmény érdekében.
Az Apple (2025) szerint a SCNParticleSystem akár 100 ezer részecskét is támogat 60 FPS-sel az A16+ eszközökön. A részecskék reagálhatnak a jelenet fizikai testeivel való ütközésekre. Összetett effektekhez több részecskerendszer kombinálható különböző paraméterekkel és mozgó csomópontokhoz köthető.
SceneKit az előnyben részesített magas szintű keretrendszer ARKit alkalmazásokhoz. Az ARSCNView kiterjeszti az SCNView-t, és automatikusan szinkronizálja a virtuális 3D világot a valós környezettel. A képelemzést, síkfelismerést és arckövetést az ARKit végzi, a megjelenítést pedig a SceneKit.
ARSCNView támogatja az SCNView összes funkcióját, de a jelenet kameráját az eszköz valós kamerájára cseréli. Az ARKit elemzi a kamera videóját és ARAnchort hoz létre, amelyet a SceneKit SCNNode-dé alakít. Az ARKit munkamenetet a session tulajdonságon keresztül kezeljük, amely konfigurációval (ARWorldTrackingConfiguration, ARFaceTrackingConfiguration) állítható be.
import ARKit
class ARViewController: UIViewController,
ARSessionDelegate {
let sceneView = ARSCNView()
override func viewDidLoad() {
super.viewDidLoad()
sceneView.session.run(
ARWorldTrackingConfiguration()
)
sceneView.autoenablesDefaultLighting = true
sceneView.delegate = self
}
}
Az autoenablesDefaultLighting tulajdonság beépített világítást ad hozzá, amely megfelel a valós környezetnek. Az ARKit 6 (iOS 18) támogatja a Location Anchors funkciót a 3D objektumok földrajzi koordinátákhoz való rögzítéséhez és a Room Tracking szolgáltatást a belső terek bútorozatig részletes térképezéséhez.
Az ARKit vízszintes és függőleges síkokat (padlók, asztalok, falak) érzékel a didAdd/didUpdate/didRemove anchor delegálton keresztül. Az ARPlaneAnchor-hoz kötött SceneKit csomópont automatikusan követi a sík pozícióját valós időben. Objektumok elhelyezéséhez a hitTest metódus használható az ARSCNView-n vagy a raycastQuery.
Az Apple (2025) szerint az ARKit maximális követési távolsága A17 Pro-n 50 méter 10 lux megvilágítás mellett. A SceneKit + ARKit kevesebb mint 20 ms vég-től-végig késleltetést (motion-to-photon) biztosít, ami kritikus fontosságú AR játékok és ipari alkalmazások számára, ahol 3D utasítások jelennek meg valós berendezéseken.
Gyakran ismételt kérdések
SceneKit — az Apple 3D grafikai keretrendszere, amely lehetővé teszi interaktív háromdimenziós jelenetek létrehozását alacsony szintű programozás nélkül. Játékokhoz, AR alkalmazásokhoz, adatvizualizációhoz és 3D szerkesztőkhöz használják iOS, macOS és tvOS rendszereken.
SceneKit — magas szintű API kész megjelenítővel és fizikával, alkalmas tipikus 3D feladatokra. Metal — alacsony szintű API a GPU teljes ellenőrzéséhez. A SceneKit belsőleg használja a Metalt, a Metal pedig egyedi megjelenítési effektekhez alkalmas.
A SceneKit a Model I/O-n keresztül támogatja az USD, USDZ, OBJ, STL, Collada (DAE), Alembic (ABC), PLY és GLTF formátumokat. A natív formátum — a JSON-alapú .scn (SceneKit Scene Format). Geometria programozottan is létrehozható az SCNGeometry segítségével.
Használjon LOD (Level of Detail) szinteket távoli objektumokhoz, vonja össze az azonos anyagú geometriát, korlátozza az árnyékok és fényforrások számát 3–4-re. Kapcsolja be a Statistics opciót az FPS és draw callok valós idejű figyeléséhez.
Igen, az ARSCNView segítségével — az SCNView kiterjesztésével ARKit-hez. A SceneKit automatikusan szinkronizálja a 3D jelenetet a valós világgal, támogatja a síkok, arcok és képek felismerését. Ez a legegyszerűbb mód 3D objektumok hozzáadásához AR-ben.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is