SceneKit — framework Apple untuk bekerja dengan grafis 3D di iOS, macOS dan tvOS, yang menyediakan API tingkat tinggi untuk membuat scene tiga dimensi tanpa pengetahuan OpenGL atau Metal. Ini mendukung fisika, animasi, pencahayaan dan integrasi dengan ARKit. Menurut data Apple WWDC (2025), SceneKit digunakan di lebih dari 50 ribu aplikasi dan game.
Poin utama
SceneKit — adalah framework untuk grafis 3D yang merupakan bagian dari SDK Apple dan diperkenalkan di iOS 8 (2014). SceneKit menyediakan API yang sepenuhnya dapat di-skrip yang bekerja di atas Metal dan OpenGL untuk membuat scene 3D interaktif. Framework ini mendukung impor model dalam format Collada (DAE), Alembic (ABC), USD dan GLTF melalui Model I/O.
Tidak seperti API tingkat rendah (Metal, Vulkan), SceneKit menangani manajemen rendering, pencahayaan dan fisika. Pengembang mendeskripsikan scene secara deklaratif: menambahkan node, mengatur material dan animasi. SceneKit secara otomatis mengoptimalkan geometri, menggabungkan draw calls dan mengelola LOD saat diperlukan.
SceneKit dapat bekerja bersama ARKit untuk menampilkan objek 3D di dunia nyata, serta dengan Core ML untuk visi mesin dan analisis scene. Menurut Apple (2025), versi terbaru SceneKit hanya menggunakan API Metal dengan dukungan untuk Metal 3 dan GPU Family 9 pada chip Apple Silicon.
SceneKit muncul di macOS pada tahun 2012 sebagai bagian dari OS X Mountain Lion dan awalnya menggunakan OpenGL untuk rendering. Dengan dirilisnya iOS 8, framework ini tersedia di perangkat seluler. SceneKit 2.0 (iOS 10) menambahkan dukungan untuk material PBR, pencahayaan HDR dan integrasi dengan Model I/O untuk impor model.
Di iOS 12, SceneKit sepenuhnya beralih ke Metal. iOS 15 memperkenalkan dukungan untuk format USDZ dan AR Quick Look. Dengan iOS 18 (2024), SceneKit mendapatkan percepatan hardware ray tracing pada perangkat dengan chip A17 Pro dan M4, memungkinkan bayangan dan pantulan realistis secara real-time di perangkat seluler.
Arsitektur SceneKit didasarkan pada graf scene, di mana SCNScene adalah elemen root yang berisi hierarki SCNNode. Setiap node memiliki node anak dan dapat berisi geometri, kamera, cahaya atau benda fisik. Posisi node ditentukan melalui SCNVector3 (x, y, z) dalam sistem koordinat kidal.
SCNScene berisi seluruh keadaan dunia 3D: node root rootNode, pengaturan latar belakang (background), sumber cahaya dan dunia fisik (SCNPhysicsWorld). Scene dapat dimuat dari file .scn (SceneKit Scene Format) atau dibuat secara terprogram. Format .scn bersifat terbuka dan berbasis JSON.
import SceneKit
let scene = SCNScene()
scene.background.contents = UIColor.darkGray
// Membuat kamera
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(0, 5, 10)
scene.rootNode.addChildNode(cameraNode)
// Membuat kubus dengan fisika
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)
Kelas SCNCamera mengonfigurasi proyeksi perspektif atau ortografis. Parameter: fieldOfView (sudut pandang, default 45°), zNear/zFar (bidang potong dekat/jauh). SceneKit secara otomatis mengelola matriks proyeksi berdasarkan parameter ini dan rasio aspek layar.
SCNNode menghubungkan geometri, transformasi dan benda fisik. Node dapat kosong (container untuk node lain) atau berisi geometri melalui properti geometry. Setiap node memiliki nama (name) untuk pencarian terprogram dan dapat dianimasikan melalui CAAnimation atau SCNTransaction yang telah ditentukan sebelumnya.
Transformasi node ditentukan melalui properti position (SCNVector3), rotation (SCNVector4) dan scale (SCNVector3). Untuk transformasi kompleks, digunakan properti transform (SCNMatrix4). Juga tersedia pivot — pergeseran pusat transformasi dan worldPosition — posisi absolut di ruang dunia terlepas dari hierarki.
SCNView — UIView untuk menampilkan SCNScene. Properti allowsCameraControl mengaktifkan kontrol kamera pengguna melalui gerakan (memindahkan, memutar, memperbesar). Untuk debugging, tersedia showsStatistics (FPS, draw calls, poligon) dan debugOptions (wireframe, bounding boxes).
Di SwiftUI, SceneKit disematkan melalui SceneView, yang membungkus SCNView dan mendukung binding ke parameter scene. Menurut Apple (2025), SceneView menggunakan renderer Metal yang sama dengan SCNView, tanpa overhead tambahan untuk jembatan antara SwiftUI dan UIKit.
SCNMaterial menentukan bagaimana permukaan geometri berinteraksi dengan cahaya. SceneKit mendukung PBR (Physically Based Rendering) melalui SCNMaterial.LightingModel.physicallyBased, yang menggunakan parameter roughness, metalness, albedo dan normal. Material PBR terlihat realistis dalam pencahayaan apa pun tanpa konfigurasi kilau manual.
SCNMaterial memiliki beberapa slot: diffuse (warna/tekstur), specular (kilau cermin), normal (peta normal), emission (pendaran), roughness (kekasaran) dan metalness (sifat logam). Setiap slot dapat berisi UIColor, UIImage, CALayer atau SKScene untuk tekstur animasi.
// Material PBR untuk objek 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)
Parameter roughness 0.3 dengan metalness 0.8 menciptakan material yang menyerupai logam poles dengan lapisan matte. Untuk dielektrik (kayu, plastik) metalness diatur ke 0, dan untuk logam — mendekati 1.0. Material PBR secara otomatis beradaptasi dengan pencahayaan HDR scene.
SCNLight mendukung beberapa jenis sumber cahaya: omni (titik), directional (terarah), spot (sorot), ambient (sekitar) dan area (permukaan). Setiap sumber memiliki intensitas (intensity), warna (color) dan dapat menghasilkan bayangan (castsShadow). SceneKit secara otomatis mengelola bayangan melalui shadow maps.
SceneKit mendukung pencahayaan HDR dengan kompresi tonal (tone mapping). Properti wantsHDR pada SCNView mengaktifkan rentang dinamis yang diperluas. Atribut kamera: whitePoint, adaptativeLuminance dan exposure menyesuaikan gambar dengan kecerahan scene, menciptakan efek eksposur fotografi.
SCNPhysicsBody mensimulasikan fisika benda padat: gravitasi, tabrakan dan gesekan. Jenis benda: .static (tetap), .dynamic (di bawah pengaruh gaya) dan .kinematic (dikendalikan secara terprogram). Bentuk benda ditentukan melalui SCNPhysicsShape, yang dapat didasarkan pada geometri node atau bentuk yang disederhanakan (box, sphere, concave polyhedron).
SCNPhysicsWorld mengelola fisika global scene: gravitasi (gravity), kecepatan simulasi (speed) dan deteksi tabrakan melalui delegasi SCNPhysicsContactDelegate. SceneKit mendukung sambungan fisik (SCNPhysicsHingeJoint, SCNPhysicsBallJoint, SCNPhysicsSliderJoint) untuk membuat mekanisme dan objek yang terhubung.
Pengembangan di SceneKit biasanya dimulai dengan memuat model 3D melalui Model I/O atau file .scn. Editor scene di Xcode (Scene Editor) memungkinkan penempatan objek secara visual, mengonfigurasi material dan pencahayaan tanpa kode. File .scn disimpan dalam format JSON dan mendukung kontrol versi melalui git.
Model I/O (ModelIO.framework) — alat yang kuat untuk mengimpor, mengekspor dan memproses model 3D. SceneKit dapat langsung menggunakan objek MDLAsset, mengubahnya menjadi SCNScene. Format yang didukung: USD, USDZ, OBJ, STL, PLY, Collada (DAE) dan Alembic (ABC). Model dengan animasi (animasi kerangka, morphing) juga diimpor.
// Memuat model 3D melalui Model I/O
import ModelIO
let url = Bundle.main.url(forResource: "robot",
withExtension: "usdz")!
let asset = MDLAsset(url: url)
let scene = SCNScene(mdlAsset: asset)
// Mencari node berdasarkan nama untuk konfigurasi
if let robot = scene.rootNode.childNode(
withName: "RobotArmature", recursively: true
) {
robot.position = SCNVector3(0, 0, -3)
}
Setelah impor, model dapat dianimasikan melalui CAAnimation, disalin dari MDLAnimation, atau melalui SCNTransaction untuk perubahan properti yang halus. Sistem animasi SceneKit mendukung pencampuran antar animasi dan sinkronisasi dengan fisika untuk menciptakan gerakan realistis.
SCNTransaction memungkinkan pengelompokan perubahan parameter scene dalam blok animasi dengan durasi tertentu. Metode begin() dan commit() mengelilingi perubahan, dan duration menentukan durasi animasi. Transaksi bersarang didukung untuk animasi paralel dengan durasi berbeda. Blok Completion dijalankan setelah animasi selesai.
Untuk animasi kerangka, SceneKit mendukung SCNAnimation dan SCNMorpher untuk blend-shape (morph targets). Setiap animasi dapat diulang, diskalakan waktu dan dicampur dengan animasi lain melalui additive blending. Menurut Apple (2025), SceneKit mendukung hingga 4 animasi campuran simultan pada satu kerangka.
SCNParticleSystem — sistem partikel bawaan untuk membuat efek: asap, api, hujan dan percikan. Partikel dapat dipancarkan dari titik, bola, kubus atau permukaan geometri. Parameter: birthRate, particleLifeSpan, speed, acceleration dan colorOverLife. Sistem partikel bekerja di GPU untuk kinerja maksimal.
Menurut Apple (2025), SCNParticleSystem mendukung hingga 100 ribu partikel dengan 60 FPS pada perangkat A16+. Partikel dapat bereaksi terhadap tabrakan dengan benda fisik scene. Untuk efek kompleks, beberapa sistem partikel dengan parameter berbeda dapat dikombinasikan dan diikat ke node bergerak.
SceneKit adalah framework tingkat tinggi yang lebih disukai untuk aplikasi ARKit. ARSCNView memperluas SCNView dan secara otomatis menyinkronkan dunia virtual 3D dengan lingkungan nyata. Analisis gambar, deteksi bidang dan pelacakan wajah dilakukan oleh ARKit, dan rendering oleh SceneKit.
ARSCNView mendukung semua fungsi SCNView, tetapi mengganti kamera scene dengan kamera nyata perangkat. ARKit menganalisis video dari kamera dan membuat ARAnchor, yang diubah SceneKit menjadi SCNNode. Sesi ARKit dikelola melalui properti session, yang dikonfigurasi dengan konfigurasi (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
}
}
Properti autoenablesDefaultLighting menambahkan pencahayaan bawaan yang sesuai dengan lingkungan nyata. ARKit 6 (iOS 18) mendukung Location Anchors untuk menambatkan objek 3D ke koordinat geografis dan Room Tracking untuk memetakan ruang interior dengan detail hingga furnitur.
ARKit mendeteksi bidang horizontal dan vertikal (lantai, meja, dinding) melalui delegasi didAdd/didUpdate/didRemove anchor. Node SceneKit yang terikat pada ARPlaneAnchor secara otomatis melacak posisi bidang secara real-time. Untuk menempatkan objek, digunakan metode hitTest pada ARSCNView atau raycastQuery.
Menurut Apple (2025), jarak pelacakan maksimum ARKit pada A17 Pro adalah 50 meter pada pencahayaan 10 lux. SceneKit + ARKit memberikan latensi ujung-ke-ujung (motion-to-photon) kurang dari 20 ms, yang sangat penting untuk game AR dan aplikasi industri dengan overlay instruksi 3D pada peralatan nyata.
Pertanyaan yang sering diajukan
SceneKit — framework Apple untuk grafis 3D, yang memungkinkan pembuatan scene tiga dimensi interaktif tanpa pemrograman tingkat rendah. Digunakan untuk game, aplikasi AR, visualisasi data dan editor 3D di iOS, macOS dan tvOS.
SceneKit — API tingkat tinggi dengan renderer dan fisika siap pakai, cocok untuk tugas 3D tipikal. Metal — API tingkat rendah untuk kontrol penuh atas GPU. SceneKit menggunakan Metal secara internal, dan Metal cocok untuk efek rendering kustom.
SceneKit melalui Model I/O mendukung USD, USDZ, OBJ, STL, Collada (DAE), Alembic (ABC), PLY dan GLTF. Format asli — .scn (SceneKit Scene Format) berbasis JSON. Geometri dapat dibuat secara terprogram melalui SCNGeometry.
Gunakan LOD (Level of Detail) untuk objek jauh, gabungkan geometri dengan material yang sama, batasi jumlah bayangan dan sumber cahaya hingga 3–4. Aktifkan Statistics untuk memantau FPS dan draw calls secara real-time.
Ya, melalui ARSCNView — ekstensi SCNView untuk ARKit. SceneKit secara otomatis menyinkronkan scene 3D dengan dunia nyata, mendukung deteksi bidang, wajah dan gambar. Ini adalah cara termudah untuk menambahkan objek 3D ke AR.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga