SceneKit — Apple-ов оквир за рад са 3D графиком на iOS, macOS и tvOS, који пружа високонивоан API за креирање тродимензионалних сцена без познавања OpenGL или Metal-а. Подржава физику, анимацију, осветљење и интеграцију са ARKit. Према подацима Apple WWDC (2025), SceneKit се користи у преко 50 хиљада апликација и игараца.
Главно
SceneKit — је оквир за 3D графику који је део Apple SDK-а и представљен у iOS 8 (2014). SceneKit пружа потпуно скриптабилни API који ради на Metal и OpenGL за креирање интерактивних 3D сцена. Оквир подржава увоз модела у форматима Collada (DAE), Alembic (ABC), USD и GLTF путем Model I/O.
За разлику од нисконивоаних API-ја (Metal, Vulkan), SceneKit преузима управљање рендеровањем, осветљењем и физиком. Програмер описује сцену декларативно: додаје чворове, поставља материјале и анимације. SceneKit аутоматски оптимизује геометрију, спаја draw calls и управља LOD када је потребно.
SceneKit може да ради заједно са ARKit за приказ 3D објеката у реалном свету, као и са Core ML за машински вид и анализу сцене. Према Apple (2025), најновија верзија SceneKit-а користи само Metal API са подршком за Metal 3 и GPU Family 9 на чиповима Apple Silicon.
SceneKit се појавио на macOS-у 2012. године у саставу OS X Mountain Lion и инијално је користио OpenGL за рендеровање. Изласком iOS 8, оквир је постао доступан на мобилним уређајима. Верзија SceneKit 2.0 (iOS 10) додала је подршку за PBR материјале, HDR осветљење и интеграцију са Model I/O за увоз модела.
У iOS 12, SceneKit је потпуно прешао на Metal. iOS 15 је увео подршку за USDZ формат и AR Quick Look. Са iOS 18 (2024), SceneKit је добио хардверску акселерацију праћења зрака на уређајима са A17 Pro и M4 чиповима, омогућавши реалистичне сенке и одразе у реалном времену на мобилним уређајима.
Архитектура SceneKit-а се заснива на графу сцене, где је SCNScene корени елемент који садржи хијерархију SCNNode. Сваки чвор има подређене чворове и може да садржи геометрију, камеру, светло или физичко тело. Положај чвора се одређује путем SCNVector3 (x, y, z) у леворуком координатном систему.
SCNScene садржи целокупно стање 3D света: корени чвор rootNode, подешавања позадине (background), изворе светлости и физички свет (SCNPhysicsWorld). Сцена се може учитати из .scn датотеке (SceneKit Scene Format) или креирати програмски. .scn формат је отворен и заснован на JSON-у.
import SceneKit
let scene = SCNScene()
scene.background.contents = UIColor.darkGray
// Креирање камере
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(0, 5, 10)
scene.rootNode.addChildNode(cameraNode)
// Креирање куба са физиком
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)
Класа SCNCamera конфигурише перспективну или ортографску пројекцију. Параметри: fieldOfView (угао видика, подразумевано 45°), zNear/zFar (блиска/далека раван одсецања). SceneKit аутоматски управља пројекционом матрицом на основу ових параметара и односа страница екрана.
SCNNode повезује геометрију, трансформацију и физичко тело. Чворови могу бити празни (контејнери за друге чворове) или садржати геометрију кроз својство geometry. Сваки чвор има име (name) за програмско претраживање и може бити анимиран кроз CAAnimation или унапред дефинисане SCNTransaction.
Трансформација чвора се одређује кроз својства position (SCNVector3), rotation (SCNVector4) и scale (SCNVector3). За сложене трансформације користи се својство transform (SCNMatrix4). Такође су доступни pivot — померање центра трансформације и worldPosition — апсолутна позиција у светском простору независно од хијерархије.
SCNView — UIView за приказ SCNScene. Својство allowsCameraControl укључује корисничку контролу над камером путем покрета (померање, ротација, зумирање). За дебагирање су доступни showsStatistics (FPS, draw calls, полигони) и debugOptions (wireframe, bounding boxes).
У SwiftUI-у, SceneKit се уграђује кроз SceneView, која омотава SCNView и подржава везе ка параметрима сцене. Према Apple (2025), SceneView користи исти Metal рендер као и SCNView, без додатних оптерећења на мосту између SwiftUI-а и UIKit-а.
SCNMaterial одређује како површина геометрије интерагује са светлошћу. SceneKit подржава PBR (Physically Based Rendering) кроз SCNMaterial.LightingModel.physicallyBased, који користи параметре roughness, metalness, albedo и normal. PBR материјали изгледају реалистично под било којим осветљењем без ручног подешавања сјаја.
SCNMaterial има више канала: diffuse (боја/текстура), specular (огљедалски сјај), normal (мапа нормала), emission (сјај), roughness (храпавост) и metalness (металност). Сваки канал може да садржи UIColor, UIImage, CALayer или SKScene за анимиране текстуре.
// PBR материјал за 3D објекат
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)
Параметар roughness 0.3 са metalness 0.8 ствара материјал налик полираном металу са мат завршницом. За диелектрике (дрво, пластик) metalness се поставља на 0, а за метале — близу 1.0. PBR материјали се аутоматски прилагодавају HDR осветљењу сцене.
SCNLight подржава више типова извора светлости: omni (тачкасти), directional (усмерени), spot (рефлектор), ambient (околно) и area (површински). Сваки извор има интензитет (intensity), боју (color) и може да баца сенке (castsShadow). SceneKit аутоматски управља сенкама путем shadow maps.
SceneKit подржава HDR осветљење са тоналном компресијом (tone mapping). Својство wantsHDR на SCNView-у укључује проширени динамички опсег. Атрибути камере: whitePoint, adaptativeLuminance и exposure прилагодавају слику сјају сцене, стварајући ефекат фотографске експозиције.
SCNPhysicsBody симулира физику чврстих тела: гравитацију, колизије и трење. Типови тела: .static (непокретно), .dynamic (под дејством сила) и .kinematic (програмски контролисано). Облик тела се одређује кроз SCNPhysicsShape, која може бити заснована на геометрији чвора или на поједностављеној форми (box, sphere, concave polyhedron).
SCNPhysicsWorld управља глобалном физиком сцене: гравитација (gravity), брзина симулације (speed) и откривање колизија кроз делегата SCNPhysicsContactDelegate. SceneKit подржава физичке зглобове (SCNPhysicsHingeJoint, SCNPhysicsBallJoint, SCNPhysicsSliderJoint) за стварање механизама и повезаних објеката.
Развој на SceneKit-у обично почиње учитавањем 3D модела путем Model I/O или .scn датотеке. Уређивач сцена у Xcode-у (Scene Editor) омогућава визуелно постављање објеката, подешавање материјала и осветљења без кода. .scn датотеке се чувају у JSON формату и подржавају контролу верзија кроз git.
Model I/O (ModelIO.framework) — моћна алатка за увоз, извоз и обраду 3D модела. SceneKit може директно да користи MDLAsset објекте, претварајући их у SCNScene. Подржани формати: USD, USDZ, OBJ, STL, PLY, Collada (DAE) и Alembic (ABC). Модели са анимацијама (скелетна анимација, морфинг) такође се увозе.
// Учитавање 3D модела путем Model I/O
import ModelIO
let url = Bundle.main.url(forResource: "robot",
withExtension: "usdz")!
let asset = MDLAsset(url: url)
let scene = SCNScene(mdlAsset: asset)
// Претраживање чворова по имену за конфигурацију
if let robot = scene.rootNode.childNode(
withName: "RobotArmature", recursively: true
) {
robot.position = SCNVector3(0, 0, -3)
}
Након увоза, модел се може анимирати кроз CAAnimation, копиран из MDLAnimation, или кроз SCNTransaction за глатке промјене својстава. Систем анимација SceneKit-а подржава меш8ање анимација и синхронизацију са физиком за стварање реалистичних покрета.
SCNTransaction омогућава груписање промјена параметара сцене у анимациони блок са одређеним трајањем. Методе begin() и commit() окружају промјене, а duration одређује трајање анимације. Угнијеждене транзакције су подржане за паралелне анимације са различитим трајањем. Completion блок се извршава након завршетка анимације.
За скелетну анимацију, SceneKit подржава SCNAnimation и SCNMorpher за blend-облике (morph targets). Свака анимација може бити поновљена, временски скалирана и помеш8ана са другим анимацијама кроз additive blending. Према Apple (2025), SceneKit подржава до 4 истовремено помеш8аних анимација на један скелет.
SCNParticleSystem — уграђени систем честица за стварање ефеката: дима, ватре, кише и искрица. Честице се могу емитовати из тачке, сфере, куба или површине геометрије. Параметри: birthRate, particleLifeSpan, speed, acceleration и colorOverLife. Системи честица раде на GPU-у за максималну перформансу.
Према Apple (2025), SCNParticleSystem подржава до 100 хиљада честица са 60 FPS на уређајима са A16+. Честице могу да реагују на колизије са физичким телима сцене. За сложене ефекте, може се комбиновати више система честица са различитим параметрима и повезати за покретне чворове.
SceneKit је пожењни високонивоани оквир за ARKit апликације. ARSCNView проширује SCNView и аутоматски синхронизује виртуелни 3D свет са реалним окружењем. Анализа слике, детекција равни и праћење лица се обављају у ARKit-у, а рендеровање у SceneKit-у.
ARSCNView подржава све функције SCNView-а, али замењује камеру сцене реалном камером уређаја. ARKit анализира видео са камере и ствара ARAnchor, које SceneKit претвара у SCNNode. ARKit сесија се управља кроз својство session, које се конфигурише са конфигурацијом (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
}
}
Својство autoenablesDefaultLighting додаје уграђено осветљење које одговара реалном окружењу. ARKit 6 (iOS 18) подржава Location Anchors за повезивање 3D објеката са географским координатама и Room Tracking за мапирање унутрашњих простора са детаљима до намештаја.
ARKit открива хоризонталне и вертикалне равни (подове, столове, зидови) кроз делегата didAdd/didUpdate/didRemove anchor. SceneKit чвор повезан за ARPlaneAnchor аутоматски прати положај равни у реалном времену. За постављање објеката користи се метода hitTest на ARSCNView-у или raycastQuery.
Према Apple (2025), максимална удаљеност праћења ARKit-а на A17 Pro износи 50 метара при осветљењу од 10 лукса. SceneKit + ARKit осигурају касну закасњење (motion-to-photon) мање од 20 мс, што је критично за AR игре и индустријске апликације са преклапањем 3D инструкција на реалну опрему.
Често постављана питања
SceneKit — Apple-ов оквир за 3D графику, који омогућава стварање интерактивних тродимензионалних сцена без нисконивоаног програмирања. Користи се за игре, AR апликације, визуелизацију података и 3D уређиваче на iOS, macOS и tvOS.
SceneKit — високонивоани API са готовим рендерером и физиком, погодан за типичне 3D задатке. Metal — нисконивоани API за потпуну контролу над GPU. SceneKit унутра користи Metal, а Metal је погодан за прилагођене ефекте рендеровања.
SceneKit путем Model I/O подржава USD, USDZ, OBJ, STL, Collada (DAE), Alembic (ABC), PLY и GLTF. Изворни формат — .scn (SceneKit Scene Format) заснован на JSON-у. Геометрија се може креирати програмски кроз SCNGeometry.
Користите LOD (Level of Detail) за удаљене објекте, спајајте геометрију са истим материјалима, ограничите број сенки и извора светлости на 3–4. Укључите Statistics за праћење FPS-а и draw calls-а у реалном времену.
Да, кроз ARSCNView — проширење SCNView-а за ARKit. SceneKit аутоматски синхронизује 3D сцену са реалним светом, подржава детекцију равни, лица и слика. То је најједноставнији начин да се додају 3D објекти у AR.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође