SceneKit — iOS, macOS va tvOS-da 3D grafikasi bilan ishlash uchun Apple freymvorki bo'lib, OpenGL yoki Metal bilmasdan uch o'lchamli sahnalar yaratish uchun yuqori darajali API taqdim etadi. Fizika, animatsiya, yoritish va ARKit bilan integratsiyani qo'llab-quvvatlaydi. Apple WWDC (2025) ma'lumotlariga ko'ra, SceneKit 50 mingdan ortiq ilova va o'yinlarda qo'llaniladi.
Asosiy ma'lumotlar
SceneKit — Apple SDK tarkibiga kiruvchi va iOS 8 (2014) da taqdim etilgan 3D grafikasi freymvorkidir. SceneKit interaktiv 3D sahnalarini yaratish uchun Metal va OpenGL ustida ishlaydigan to'liq skriptlanadigan API ni taqdim etadi. Freymvork Model I/O orqali Collada (DAE), Alembic (ABC), USD va GLTF formatlaridagi modellarni import qilishni qo'llab-quvvatlaydi.
Past darajali API-lardan (Metal, Vulkan) farqli o'laroq, SceneKit renderlash, yoritish va fizikani boshqarishni o'z zimmasiga oladi. Dasturchi sahnani deklarativ tarzda tasvirlaydi: tugunlarni qo'shadi, materiallar va animatsiyalarni o'rnatadi. SceneKit avtomatik ravishda geometriyani optimallashtiradi, draw calls-larni birlashtiradi va kerak bo'lganda LODni boshqaradi.
SceneKit real dunyoda 3D ob'ektlarni ko'rsatish uchun ARKit bilan, shuningdek, mashinaviy ko'rish va sahna tahlili uchun Core ML bilan birga ishlashi mumkin. Apple (2025) ma'lumotlariga ko'ra, eng so'nggi SceneKit versiyasi faqat Metal API dan foydalanadi va Apple Silicon chiplarida Metal 3 va GPU Family 9 ni qo'llab-quvvatlaydi.
SceneKit macOS-da 2012-yilda OS X Mountain Lion tarkibida paydo bo'ldi va dastlab renderlash uchun OpenGL-dan foydalangan. iOS 8 chiqishi bilan freymvork mobil qurilmalarda mavjud bo'ldi. SceneKit 2.0 (iOS 10) PBR materiallari, HDR yoritish va modellarni import qilish uchun Model I/O bilan integratsiyani qo'shdi.
iOS 12 da SceneKit butunlay Metal-ga o'tdi. iOS 15 USDZ formati va AR Quick Look qo'llab-quvvatlashini taqdim etdi. iOS 18 (2024) bilan SceneKit A17 Pro va M4 chipli qurilmalarda nurlarni kuzatishning apparat tezlashuvini oldi va mobil qurilmalarda real vaqtda realistik soyalar va aks ettirishlarni qo'llash imkonini berdi.
SceneKit arxitekturasi sahna grafiga asoslanadi, bunda SCNScene SCNNode iyerarxiyasini o'z ichiga olgan ildiz elementdir. Har bir tugunning bola tugunlari bor va geometriya, kamera, yorug'lik yoki fizik jismni o'z ichiga olishi mumkin. Tugunning joylashuvi chap tomonli koordinatalar tizimida SCNVector3 (x, y, z) orqali aniqlanadi.
SCNScene 3D dunyosining barcha holatini o'z ichiga oladi: rootNode ildiz tuguni, fon sozlamalari (background), yorug'lik manbalari va fizik dunyo (SCNPhysicsWorld). Sahna .scn faylidan (SceneKit Scene Format) yuklanishi yoki dasturiy ravishda yaratilishi mumkin. .scn formati ochiq va JSON-ga asoslangan.
import SceneKit
let scene = SCNScene()
scene.background.contents = UIColor.darkGray
// Kamerani yaratish
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(0, 5, 10)
scene.rootNode.addChildNode(cameraNode)
// Fizika bilan kub yaratish
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 klassi perspektiv yoki ortografik proyeksiyani sozlaydi. Parametrlar: fieldOfView (ko'rish burchagi, standart 45°), zNear/zFar (yaqin/uzoq kesish tekisligi). SceneKit bu parametrlar va ekran nisbati asosida proyeksiya matritsasini avtomatik boshqaradi.
SCNNode geometriya, transformatsiya va fizik jismni bog'laydi. Tugunlar bo'sh (boshqa tugunlar uchun konteynerlar) bo'lishi yoki geometry xususiyati orqali geometriyani o'z ichiga olishi mumkin. Har bir tugunning dasturiy qidiruv uchun nomi (name) bor va CAAnimation yoki oldindan belgilangan SCNTransaction orqali animatsiya qilinishi mumkin.
Tugunning transformatsiyasi position (SCNVector3), rotation (SCNVector4) va scale (SCNVector3) xususiyatlari orqali aniqlanadi. Murakkab transformatsiyalar uchun transform (SCNMatrix4) xususiyati ishlatiladi. Shuningdek, pivot — transformatsiya markazining siljishi va worldPosition — iyerarxiyadan qat'iy nazar dunyo fazosidagi mutlaq joylashuv mavjud.
SCNView — SCNScene ni ko'rsatish uchun UIView. allowsCameraControl xususiyati foydalanuvchining imo-ishoralar (siljitish, aylantirish, masshtablash) orqali kamerani boshqarishini yoqadi. Nosozliklarni tuzatish uchun showsStatistics (FPS, draw calls, poligonlar) va debugOptions (wireframe, bounding boxes) mavjud.
SwiftUI da SceneKit SceneView orqali o'rnatiladi, u SCNView ni o'rab oladi va sahna parametrlariga bog'lanishlarni qo'llab-quvvatlaydi. Apple (2025) ma'lumotlariga ko'ra, SceneView SCNView bilan bir xil Metal rendererdan foydalanadi va SwiftUI bilan UIKit o'rtasidagi ko'prikda qo'shimcha yuk yaratmaydi.
SCNMaterial geometriya sirtining yorug'lik bilan qanday o'zaro ta'sir qilishini aniqlaydi. SceneKit roughness, metalness, albedo va normal parametrlaridan foydalanadigan SCNMaterial.LightingModel.physicallyBased orqali PBR (Physically Based Rendering) ni qo'llab-quvvatlaydi. PBR materiallari porlashni qo'lda sozlashsiz har qanday yoritishda realistik ko'rinadi.
SCNMaterial bir nechta kanalga ega: diffuse (rang/tekstura), specular (oyna porlashi), normal (normal xaritalar), emission (nurlanish), roughness (g'adir-budurlik) va metalness (metallik). Har bir kanal animatsion teksturalar uchun UIColor, UIImage, CALayer yoki SKScene ni o'z ichiga olishi mumkin.
// 3D ob'ekt uchun PBR materiali
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 va metalness 0.8 parametrlari mat qoplamali sayqallangan metallga o'xshash material yaratadi. Dielektriklar (yog'och, plastik) uchun metalness 0 ga, metallar uchun esa 1.0 ga yaqin o'rnatiladi. PBR materiallari avtomatik ravishda sahnaning HDR yoritishiga moslashadi.
SCNLight bir necha turdagi yorug'lik manbalarini qo'llab-quvvatlaydi: omni (nuqtaviy), directional (yo'naltirilgan), spot (projektor), ambient (atrof) va area (sirt). Har bir manba intensivlik (intensity), rang (color) ga ega va soya tashlashi mumkin (castsShadow). SceneKit shadow maps orqali soyalarni avtomatik boshqaradi.
SceneKit tonal kompressiya (tone mapping) bilan HDR yoritishni qo'llab-quvvatlaydi. SCNView da wantsHDR xususiyati kengaytirilgan dinamik diapazonni yoqadi. Kamera atributlari: whitePoint, adaptativeLuminance va exposure tasvirni sahna yorqinligiga moslashtirib, fotografik ekspozitsiya effektini yaratadi.
SCNPhysicsBody qattiq jismlar fizikasini simulyatsiya qiladi: tortishish, to'qnashuvlar va ishqalanish. Tana turlari: .static (harakatsiz), .dynamic (kuchlar ta'siri ostida) va .kinematic (dasturiy boshqariladigan). Tana shakli tugunning geometriyasiga yoki soddalashtirilgan shaklga (box, sphere, concave polyhedron) asoslanishi mumkin bo'lgan SCNPhysicsShape orqali aniqlanadi.
SCNPhysicsWorld sahnaning global fizikasini boshqaradi: tortishish (gravity), simulyatsiya tezligi (speed) va SCNPhysicsContactDelegate orqali to'qnashuvlarni aniqlash. SceneKit mexanizmlar va bog'langan ob'ektlarni yaratish uchun fizik bog'lanishlarni (SCNPhysicsHingeJoint, SCNPhysicsBallJoint, SCNPhysicsSliderJoint) qo'llab-quvvatlaydi.
SceneKit-da ishlab chiqish odatda Model I/O yoki .scn fayli orqali 3D modelini yuklash bilan boshlanadi. Xcode-dagi sahna muharriri (Scene Editor) kod yozmasdan ob'ektlarni vizual joylashtirish, materiallar va yoritishni sozlash imkonini beradi. .scn fayllari JSON formatida saqlanadi va git orqali versiyalarni boshqarishni qo'llab-quvvatlaydi.
Model I/O (ModelIO.framework) — 3D modellarni import, eksport va qayta ishlash uchun kuchli vosita. SceneKit MDLAsset ob'ektlaridan to'g'ridan-to'g'ri foydalanib, ularni SCNScene ga aylantirishi mumkin. Qo'llab-quvvatlanadigan formatlar: USD, USDZ, OBJ, STL, PLY, Collada (DAE) va Alembic (ABC). Animatsiyali modellar (skelet animatsiyasi, morfing) ham import qilinadi.
// 3D modelini Model I/O orqali yuklash
import ModelIO
let url = Bundle.main.url(forResource: "robot",
withExtension: "usdz")!
let asset = MDLAsset(url: url)
let scene = SCNScene(mdlAsset: asset)
// Sozlash uchun tugunlarni nom bo'yicha qidirish
if let robot = scene.rootNode.childNode(
withName: "RobotArmature", recursively: true
) {
robot.position = SCNVector3(0, 0, -3)
}
Importdan so'ng modelni MDLAnimation dan nusxalangan CAAnimation orqali yoki xususiyatlarning silliq o'zgarishi uchun SCNTransaction orqali animatsiya qilish mumkin. SceneKit animatsiya tizimi animatsiyalar o'rtasida blending va realistik harakatlarni yaratish uchun fizika bilan sinxronlashni qo'llab-quvvatlaydi.
SCNTransaction sahna parametrlaridagi o'zgarishlarni belgilangan muddatli animatsiya blokida guruhlash imkonini beradi. begin() va commit() metodlari o'zgarishlarni o'rab oladi, duration esa animatsiya vaqtini belgilaydi. Ichki transaksiyalar turli muddatli parallel animatsiyalar uchun qo'llab-quvvatlanadi. Completion bloki animatsiya tugagandan so'ng bajariladi.
Skelet animatsiyasi uchun SceneKit SCNAnimation va blend-shakllar (morph targets) uchun SCNMorpher ni qo'llab-quvvatlaydi. Har bir animatsiya takrorlanishi, vaqt bo'yicha masshtablanishi va additive blending orqali boshqa animatsiyalar bilan aralashtirilishi mumkin. Apple (2025) ma'lumotlariga ko'ra, SceneKit bir skeletda bir vaqtning o'zida 4 tagacha aralashtirilgan animatsiyani qo'llab-quvvatlaydi.
SCNParticleSystem — tutun, olov, yomg'ir va uchqun kabi effektlarni yaratish uchun o'rnatilgan zarrachalar tizimi. Zarrachalar nuqtadan, sferadan, kubdan yoki geometriya sirtidan chiqarilishi mumkin. Parametrlar: birthRate, particleLifeSpan, speed, acceleration va colorOverLife. Zarrachalar tizimlari maksimal samaradorlik uchun GPU da ishlaydi.
Apple (2025) ma'lumotlariga ko'ra, SCNParticleSystem A16+ qurilmalarida 60 FPS chastotada 100 minggacha zarrachalarni qo'llab-quvvatlaydi. Zarrachalar sahna fizik jismlari bilan to'qnashuvlarga reaksiya berishi mumkin. Murakkab effektlar uchun turli parametrlarga ega bir nechta zarrachalar tizimini birlashtirish va harakatlanuvchi tugunlarga bog'lash mumkin.
SceneKit ARKit ilovalari uchun afzal ko'riladigan yuqori darajali freymvorkdir. ARSCNView SCNView ni kengaytiradi va virtual 3D dunyosini real muhit bilan avtomatik sinxronlashtiradi. Tasvir tahlili, tekisliklarni aniqlash va yuzni kuzatish ARKit tomonidan, renderlash esa SceneKit tomonidan amalga oshiriladi.
ARSCNView SCNView ning barcha funksiyalarini qo'llab-quvvatlaydi, lekin sahna kamerasini qurilmaning real kamerasi bilan almashtiradi. ARKit kameradan videoni tahlil qiladi va ARAnchor yaratadi, SceneKit esa ularni SCNNode ga aylantiradi. ARKit sessiyasi session xususiyati orqali boshqariladi va konfiguratsiya (ARWorldTrackingConfiguration, ARFaceTrackingConfiguration) bilan sozlanadi.
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 xususiyati real muhitga mos keladigan o'rnatilgan yoritishni qo'shadi. ARKit 6 (iOS 18) 3D ob'ektlarni geografik koordinatalarga bog'lash uchun Location Anchors va mebel detallarigacha bo'lgan ichki joylarni xaritalash uchun Room Tracking ni qo'llab-quvvatlaydi.
ARKit didAdd/didUpdate/didRemove anchor delegati orqali gorizontal va vertikal tekisliklarni (pollarni, stollarni, devorlarni) aniqlaydi. ARPlaneAnchor ga bog'langan SceneKit tuguni tekislikning joylashuvini real vaqtda avtomatik kuzatadi. Ob'ektlarni joylashtirish uchun ARSCNView da hitTest metodi yoki raycastQuery ishlatiladi.
Apple (2025) ma'lumotlariga ko'ra, A17 Pro da ARKit kuzatishning maksimal masofasi 10 lyuks yoritishda 50 metr ni tashkil qiladi. SceneKit + ARKit 20 ms dan kam motion-to-photon kechikishini ta'minlaydi, bu AR o'yinlari va real jihozlar ustida 3D ko'rsatmalarni joylashtirish bilan sanoat ilovalari uchun juda muhimdir.
Tez-tez so'raladigan savollar
SceneKit — Apple-ning 3D grafikasi freymvorki bo'lib, past darajali dasturlashsiz interaktiv uch o'lchamli sahnalarni yaratish imkonini beradi. iOS, macOS va tvOS da o'yinlar, AR ilovalari, ma'lumotlarni vizualizatsiya qilish va 3D muharrirlar uchun ishlatiladi.
SceneKit — tayyor renderer va fizika bilan yuqori darajali API, odatdagi 3D vazifalari uchun mos. Metal — GPU ustida to'liq nazorat uchun past darajali API. SceneKit ichki qismida Metal dan foydalanadi, Metal esa maxsus renderlash effektlari uchun mos keladi.
SceneKit Model I/O orqali USD, USDZ, OBJ, STL, Collada (DAE), Alembic (ABC), PLY va GLTF formatlarini qo'llab-quvvatlaydi. Mahalliy format — JSON ga asoslangan .scn (SceneKit Scene Format). SCNGeometry orqali dasturiy ravishda geometriya yaratish mumkin.
Uzoq ob'ektlar uchun LOD (Level of Detail) dan foydalaning, bir xil materialli geometriyani birlashtiring, soyalar va yorug'lik manbalari sonini 3–4 bilan cheklang. Real vaqtda FPS va draw calls larni kuzatish uchun Statistics ni yoqing.
Ha, ARKit uchun SCNView ning kengaytmasi bo'lgan ARSCNView orqali. SceneKit 3D sahnani real dunyo bilan avtomatik sinxronlashtiradi, tekisliklar, yuzlar va tasvirlarni aniqlashni qo'llab-quvvatlaydi. Bu AR ga 3D ob'ektlarni qo'shishning eng oson usuli.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.