SceneKit: mi ez, 3D jelenetek és a jelenetgráf

Szerző: IT Sectr Megjelenés: 2026-05-03 Olvasási idő: 10 perc

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 — keretrendszer 3D grafikához jelenetgráffal és GPU-megjelenítéssel
  • SCNScene — a győkér-tároló, amely az SCNNode csomópontok fáját tartalmazza
  • SCNMaterial meghatározza az objektumok megjelenését shaderek és textúrák segítségével
  • Fizikai motor A SceneKit szimulálja a gravitációt, ütközéseket és kapcsolatokat
  • Integráció az ARKit és Metal rendszerekkel lehetővé teszi nagy teljesítményű AR alkalmazások létrehozását

Mi az a SceneKit?

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 története

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: jelenetgráf és csomópontok

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 — a győkér-tároló

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ú.

swift
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 — jelenet csomópontok

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 — megjelenítés

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.

Anyagok, világítás és fizika a SceneKit-ben

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 és textúrák

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.

swift
// 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.

Világítás a SceneKit-ben

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 fizika

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.

3D jelenetek fejlesztése a SceneKit-ben

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.

3D modellek importálása

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.

swift
// 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.

Animáció és tranzakciók

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 részecskerendszerek

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 és ARKit: kiterjesztett valóság

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 és ARAnchor

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.

swift
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.

Síkfelismerés és objektumok elhelyezése

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

Mi az a SceneKit és mire használják?

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.

Mi a különbség a SceneKit és a Metal között?

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.

Milyen 3D modell formátumokat támogat a SceneKit?

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.

Hogyan optimalizálható a SceneKit teljesítménye?

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.

Használható a SceneKit AR alkalmazásokhoz?

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ó

  • SceneKit — az Apple keretrendszere magas szintű 3D grafikához GPU megjelenítéssel Metal segítségével
  • SCNScene és SCNNode alkotják a jelenetgráfot transzformációs örökléssel
  • SCNMaterial támogatja a PBR megjelenítést roughness, metalness és normal térképekkel
  • SCNPhysicsBody fizikai szimulációt biztosít ütközésekkel és kapcsolatokkal
  • Model I/O modelleket importál USD, OBJ, Collada és egyéb formátumokban
  • ARSCNView integrálja a 3D jeleneteket a kiterjesztett valósággal az ARKit segítségével
  • SCNParticleSystem GPU effekteket hoz létre milliónyi részecskével valós időben

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.

Projekt megbeszélése

Olvassa el is