SceneKit — Apple-ın iOS, macOS və tvOS-da 3D qrafika ilə iş üçün çərçivəsi olub, OpenGL və ya Metal bilmədən üölçülü səhnələr yaratmaq üçün yüksək səviyyəli API təmin edir. Fizika, animasiya, işıqlandırma və ARKit ilə inteqrasiyanı dəstəkləyir. Apple WWDC (2025) məlumatlarına görə, SceneKit 50 mindən çox tətbiq və oyunda istifadə olunur.
Əsas məqamlar
SceneKit — Apple SDK-sının tərkibinə daxil olan və iOS 8-də (2014) təqdim edilmiş 3D qrafika çərçivəsidir. SceneKit interaktiv 3D səhnələri yaratmaq üçün Metal və OpenGL üzərində işləyən tam skriptli API təmin edir. Çərçivə Model I/O vasitəsilə Collada (DAE), Alembic (ABC), USD və GLTF formatlarında modellərin idxalını dəstəkləyir.
Aşağı səviyyəli API-lərdən (Metal, Vulkan) fərqli olaraq, SceneKit renderinq, işıqlandırma və fizikanın idarə edilməsini üzərinə götürür. Tərtibatçı səhnəni deklarativ şəkildə təsvir edir: düyünlər əlavə edir, materiallar və animasiyalar təyin edir. SceneKit avtomatik olaraq həndəsəni optimallaşdırır, draw calls-ları birləşdirir və zəruri olduqda LOD-ə nəzarət edir.
SceneKit real dünyada 3D obyektləri göstərmək üçün ARKit ilə, habelə maşın görmü və səhnə təhlili üçün Core ML ilə birlikdə işləyə bilər. Apple-a görə (2025), ən son versiyasında SceneKit yalnız Metal API-dən istifadə edir və Apple Silicon çiplərində Metal 3 və GPU Family 9-u dəstəkləyir.
SceneKit macOS-də 2012-ci ildə OS X Mountain Lion tərkibində ortaya çıxdı və ilkin olaraq renderinq üçün OpenGL-dən istifadə edirdi. iOS 8-in buraxılması ilə çərçivə mobil cihazlarda əlçatan oldu. SceneKit 2.0 (iOS 10) PBR materialları, HDR işıqlandırmanı və modellərin idxalı üçün Model I/O ilə inteqrasiyanı əlavə etdi.
iOS 12-də SceneKit tamamilə Metal-a keçdi. iOS 15 USDZ formatı və AR Quick Look dəstəyini təqdim etdi. iOS 18 (2024) ilə SceneKit A17 Pro və M4 çipli cihazlarda aparot şüalərin izlənməsinin sürətləndirilməsini əldə etdi və mobil cihazlarda real vaxtda realist kölgələr və əkslərdənmələrə imkan verdi.
SceneKit arxitekturası səhnə qrafikinə əsaslanır, burada SCNScene SCNNode iyerarxiyasını ehtiva edən kök elementdir. Hər bir düyünün uşaq düyünləri var və həndəsə, kamera, işıq və ya fiziki cisim ehtiva edə bilər. Düyünün mövqeyi sol tərəfli koordinat sistemində SCNVector3 (x, y, z) vasitəsilə təyin edilir.
SCNScene 3D dünyasının bütün vəziyyətini ehtiva edir: kök düyün rootNode, fon parametrləri (background), işıq mənbələri və fiziki dünya (SCNPhysicsWorld). Səhnə .scn faylından (SceneKit Scene Format) yüklənə və ya proqram vasitəsilə yaradıla bilər. .scn formatı açıqdır və JSON-a əsaslanır.
import SceneKit
let scene = SCNScene()
scene.background.contents = UIColor.darkGray
// Kameranın yaradılması
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(0, 5, 10)
scene.rootNode.addChildNode(cameraNode)
// Fizika ilə kubun yaradılması
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 sinfi perspektiv və ya ortoqrafik proyeksiyanı konfiqurasiya edir. Parametrlər: fieldOfView (baxış bucağı, standart 45°), zNear/zFar (yaxın/uzaq kəsmə müstəvisi). SceneKit bu parametrlərə və ekran nisbətinə əsaslanaraq proyeksiya matrisini avtomatik idarə edir.
SCNNode həndəsə, transformasiya və fiziki cismi birləşdirir. Düyünlər boş (digər düyünlər üçün konteynerlər) ola və ya geometry xassəsi vasitəsilə həndəsə ehtiva edə bilər. Hər bir düyünün proqram axtarışı üçün adı (name) var və CAAnimation və ya əvvəlcədən təyin edilmiş SCNTransaction vasitəsilə animasiya edilə bilər.
Düyünün transformasiyası position (SCNVector3), rotation (SCNVector4) və scale (SCNVector3) xassələri vasitəsilə təyin edilir. Mürəkkəb transformasiyalar üçün transform (SCNMatrix4) xassəsi istifadə olunur. Həmçinin pivot — transformasiya mərkəzinin yerdəyişməsi və worldPosition — iyerarxiyadan asılı olmayaraq dünya məkanında mütləq mövqe mövcuddur.
SCNView — SCNScene-i göstərmək üçün UIView. allowsCameraControl xassəsi jestlərlə (hərəkət etdirmə, döndərmə, miqyaslama) istifadəçi kamera idarəsini aktivləşdirir. Debug üçün showsStatistics (FPS, draw calls, poliqonlar) və debugOptions (wireframe, bounding boxes) mövcuddur.
SwiftUI-də SceneKit SceneView vasitəsilə daxil edilir, bu da SCNView-i bükür və səhnə parametrlərinə bağlantıları dəstəkləyir. Apple-a görə (2025), SceneView SCNView ilə eyni Metal rendererindən istifadə edir və SwiftUI ilə UIKit arasındakı körpüdə əlavə yük yaratmır.
SCNMaterial həndəsə səthinin işıqla necə qarşılıqlı əlaqədə olduğunu müəyyən edir. SceneKit roughness, metalness, albedo və normal parametrlərindən istifadə edən SCNMaterial.LightingModel.physicallyBased vasitəsilə PBR (Physically Based Rendering) dəstəkləyir. PBR materialları parıltının əl ilə konfiqurasiyası olmadan istənilən işıqlandırmada realist görünür.
SCNMaterial bir neçə kanala malikdir: diffuse (rəng/tekstur), specular (güzgü parıltısı), normal (normal xəritə), emission (işıq saçma), roughness (kötürlük) və metalness (metalılıq). Hər bir kanal animasiyalı teksturlar üçün UIColor, UIImage, CALayer və ya SKScene ehtiva edə bilər.
// 3D obyekt üçön PBR materialı
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 və metalness 0.8 parametrləri tutqun örtüklü cilalanmış metalı xatırladan material yaradır. Dielektriklər (taxta, plastik) üçün metalness 0-a, metallar üçün isə 1.0-a yaxın təyin edilir. PBR materialları avtomatik olaraq səhnənin HDR işıqlandırmasına uyğunlaşır.
SCNLight bir neçə növ işıq mənbəyini dəstəkləyir: omni (nöqtəvi), directional (istiqamətli), spot (projektor), ambient (ətraf) və area (səth). Hər bir mənbə intensivliyə (intensity), rəngə (color) malikdir və kölgə sala bilər (castsShadow). SceneKit shadow maps vasitƏřsilə kölgələri avtomatik idarə edir.
SceneKit tonal kompressiya (tone mapping) ilə HDR işıqlandırmanı dəstəkləyir. SCNView-də wantsHDR xassəsi genişləndirilmiş dinamik diapazonu aktivləşdirir. Kamera atributları: whitePoint, adaptativeLuminance və exposure şəkli səhnənin parlaqlığına uyğunlaşdıraraq fotoqrafik ekspozisiya effekti yaradır.
SCNPhysicsBody bərk cisimlərin fizikasını simulyasiya edir: cazibə, toqquşmalar və sürtünmə. Bədən növləri: .static (hərəkətsiz), .dynamic (qüvvələrin təsiri altında) və .kinematic (proqram vasitəsilə idarə olunan). Bədənin forması düyünün həndəsəsinə və ya sadələşdirilmiş formaya (box, sphere, concave polyhedron) əsaslana bilən SCNPhysicsShape vasitəsilə təyin edilir.
SCNPhysicsWorld səhnənin qlobal fizikasını idarə edir: cazibə (gravity), simulyasiya sürəti (speed) və SCNPhysicsContactDelegate vasitəsilə toqquşmaların aşkarlanması. SceneKit mexanizmlər və birləşdirilmiş obyektlər yaratmaq üçün fiziki birləşmələri (SCNPhysicsHingeJoint, SCNPhysicsBallJoint, SCNPhysicsSliderJoint) dəstəkləyir.
SceneKit-də tərtibat adətən Model I/O və ya .scn faylı vasitəsilə 3D modelinin yüklənməsi ilə başlayır. Xcode-dakı səhnə redaktoru (Scene Editor) kod yazmadan obyektləri vizual yerləşdirməyə, materialları və işıqlandırmanı konfiqurasiya etməyə imkan verir. .scn faylları JSON formatında saxlanılır və git vasitəsilə versiya nəzarətini dəstəkləyir.
Model I/O (ModelIO.framework) — 3D modellərin idxalı, ixracı və emalı üçün güclü alət. SceneKit MDLAsset obyektlərindən birbaşa istifadə edərək onları SCNScene-ə çevirə bilər. Dəstəklənən formatlar: USD, USDZ, OBJ, STL, PLY, Collada (DAE) və Alembic (ABC). Animasiyalı modellər (skelet animasiyası, morfing) də idxal olunur.
// 3D modelinin Model I/O vasitəsilə yüklənməsi
import ModelIO
let url = Bundle.main.url(forResource: "robot",
withExtension: "usdz")!
let asset = MDLAsset(url: url)
let scene = SCNScene(mdlAsset: asset)
// Konfiqurasiya üçön düyünlərin adla axtarılması
if let robot = scene.rootNode.childNode(
withName: "RobotArmature", recursively: true
) {
robot.position = SCNVector3(0, 0, -3)
}
İdxaldan sonra model MDLAnimation-dan köçürülmüş CAAnimation vasitəsilə və ya xassələrin hamar dəyişməsi üçün SCNTransaction ilə animasiya edilə bilər. SceneKit animasiya sistemi animasiyalar arasında blending və realist hərəkətlər yaratmaq üçün fizika ilə sinxronizasiyanı dəstəkləyir.
SCNTransaction səhnə parametrlərindəki dəyişiklikləri müəyyən müddətlə animasiya blokunda qruplaşdırmağa imkan verir. begin() və commit() metodları dəyişiklikləri əhatə edir, duration isə animasiya müddətini təyin edir. İç-içə transaksiyalar müxtəlif müddətlə paralel animasiyalar üçün dəstəklənir. Completion bloku animasiya bitdikdən sonra icra olunur.
Skelet animasiyası üçün SceneKit SCNAnimation və blend-şeyplər (morph targets) üçün SCNMorpher dəstəkləyir. Hər bir animasiya təkrarlana, zamana görə miqyaslana və additive blending vasitəsilə digər animasiyalarla qarışdırıla bilər. Apple-a görə (2025), SceneKit bir skeletdə eyni anda 4-ə qədər qarışdırılan animasiyanı dəstəkləyir.
SCNParticleSystem — tüstü, od, yağış və qığılcım kimi effektlər yaratmaq üçön daxili hissəcik sistemi. Hissəciklər nöqtədən, sferadan, kubdan və ya həndəsə səthindən emit edilə bilər. Parametrlər: birthRate, particleLifeSpan, speed, acceleration və colorOverLife. Hissəcik sistemləri maksimum performans üçön GPU-da işləyir.
Apple-a görə (2025), SCNParticleSystem A16+ cihazlarında 60 FPS tezliyi ilə 100 minə qədər hissəcik dəstəkləyir. Hissəciklər səhnənin fiziki cisimləri ilə toqquşmalara reaksiya verə bilər. Mürəkkəb effektlər üçön müxtəlif parametrləri olan bir neçə hissəcik sistemi birləşdirilə bilər və hərəkətli düyünlərə bağlana bilər.
SceneKit ARKit tətbiqləri üçön üstünlük verilən yüksək səviyyəli çərçivədir. ARSCNView SCNView-i genişləndirir və virtual 3D dünyasını real mühitlə avtomatik sinxronlaşdırır. Şəkil təhlili, müstəvilərin aşkarlanması və üz izləməsi ARKit tərəfindən, renderinq isə SceneKit tərəfindən həyata keçirilir.
ARSCNView SCNView-in bütün funksiyalarını dəstəkləyir, lakin səhnə kamerasını cihazın real kamerası ilə əvəz edir. ARKit kameradan videonu təhlil edir və ARAnchor yaradır, SceneKit isə onları SCNNode-ə çevirir. ARKit sessiyası session xassəsi vasitəsilə idarə olunur və konfiqurasiya ilə (ARWorldTrackingConfiguration, ARFaceTrackingConfiguration) qurulur.
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 xassəsi real mühitə uyğun daxili işıqlandırma əlavə edir. ARKit 6 (iOS 18) 3D obyektləri coğrafi koordinatlara bağlamaq üçön Location Anchors və mebel dəqiqliyi ilə daxili məkanların xəritələnməsi üçön Room Tracking dəstəkləyir.
ARKit didAdd/didUpdate/didRemove anchor delegatı vasitəsilə üçföqi və şaquli müstəviləri (döşəmələr, masalar, divarlar) aşkar edir. ARPlaneAnchor-a bağlı SceneKit düyünü müstəvinin mövqeyini real vaxtda avtomatik izləyir. Obyektlərin yerləşdirilməsi üçön ARSCNView-də hitTest metodu və ya raycastQuery istifadə olunur.
Apple-a görə (2025), A17 Pro-da ARKit izləməsinin maksimum məsafəsi 10 lüks işıqlandırmada 50 metr təşkil edir. SceneKit + ARKit 20 ms-dən aşağı motion-to-photon gecikməsi təmin edir ki, bu da AR oyunları və real avadanlıq üzərində 3D təlimatların yerləşdirildiyi sənaye tətbiqləri üçön kritik əhəmiyyət kəsb edir.
Tez-tez verilən suallar
SceneKit — Apple-ın 3D qrafika çərçivəsi olub, aşağı səviyyəli proqramlaşdırma olmadan interaktiv üölçülü səhnələr yaratmağa imkan verir. iOS, macOS və tvOS-da oyunlar, AR tətbiqləri, məlumat vizuallaşdırma və 3D redaktorlar üçön istifadə olunur.
SceneKit — hazır renderer və fizika ilə yüksək səviyyəli API, tipik 3D tapşırıqları üçön uyğundur. Metal — GPU üzərində tam nəzarət üçön aşağı səviyyəli API. SceneKit daxildə Metal-dan istifadə edir, Metal isə fərdi renderinq effektləri üçön uyğundur.
SceneKit Model I/O vasitəsilə USD, USDZ, OBJ, STL, Collada (DAE), Alembic (ABC), PLY və GLTF formatlarını dəstəkləyir. Yerli format — JSON əsaslı .scn (SceneKit Scene Format). SCNGeometry vasitəsilə proqramla həndəsə yaratmaq mümkündür.
Uzaq obyektlər üçön LOD (Level of Detail) istifadə edin, eyni materiallı həndəsəni birləşdirin, kölgələrin və işıq mənbələrinin sayını 3-4 ilə məhdudlaşdırın. Real vaxtda FPS və draw calls izləmək üçön Statistics-i aktivləşdirin.
Bəli, ARKit üçön SCNView-in genişləndirilməsi olan ARSCNView vasitəsilə. SceneKit 3D səhnəni real dünya ilə avtomatik sinxronlaşdırır, müstəvilərin, üzlərin və şəkillərin aşkarlanmasını dəstəkləyir. Bu, AR-də 3D obyektləri əlavə etməyin ən asan yoludur.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun