SceneKit — фреймворк Apple для роботи з 3D-графікою на iOS, macOS і tvOS, що надає високорівневий API для створення тривимірних сцен без знання OpenGL або Metal. Він підтримує фізику, анімацію, освітлення та інтеграцію з ARKit. За даними Apple WWDC (2025), SceneKit використовується в понад 50 тисячах додатків та ігор.
Головне
SceneKit — це фреймворк для 3D-графіки, що входить до складу SDK Apple та представлений у 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 підтримує blending між анімаціями та синхронізацію з фізикою для створення реалістичних рухів.
SCNTransaction дозволяє групувати зміни параметрів сцени в анімаційний блок із заданою тривалістю. Методи begin() і commit() оточують зміни, а duration задає час анімації. Вкладені транзакції підтримуються для паралельних анімацій з різною тривалістю. Completion-блок виконується після завершення анімації.
Для скелетної анімації SceneKit підтримує SCNAnimation та SCNMorpher для бленд-шейпів (morph targets). Кожна анімація може бути зациклена, масштабована за часом та змішана з іншими анімаціями через additive blending. За даними Apple (2025), SceneKit підтримує до 4 одночасно змішуваних анімацій на один скелет.
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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.