SceneKit, iOS, macOS ve tvOS'ta 3D grafiklerle çalışmak için Apple çerçevesidir ve OpenGL veya Metal bilgisi olmadan üç boyutlu sahneler oluşturmak için üst düzey bir API sağlar. Fizik, animasyon, aydınlatma ve ARKit ile entegrasyonu destekler. Apple WWDC (2025) verilerine göre SceneKit, 50 binden fazla uygulama ve oyunda kullanılmaktadır.
Önemli Noktalar
SceneKit, Apple SDK'sının bir parçası olan ve iOS 8'de (2014) tanıtılan bir 3D grafik çerçevesidir. SceneKit, etkileşimli 3D sahneler oluşturmak için Metal ve OpenGL üzerinde çalışan tamamen sahne tabanlı bir API sağlar. Çerçeve, Model I/O aracılığıyla Collada (DAE), Alembic (ABC), USD ve GLTF formatlarındaki modellerin içe aktarılmasını destekler.
Düşük seviyeli API'lerin (Metal, Vulkan) aksine SceneKit, işleme, aydınlatma ve fizik yönetimini üstlenir. Geliştirici sahneyi bildirimsel olarak tanımlar: düğümler ekler, malzemeler ve animasyonlar ayarlar. SceneKit geometriyi otomatik olarak optimize eder, draw call'ları birleştirir ve gerektiğinde LOD'u yönetir.
SceneKit, gerçek dünyada 3D nesneleri görüntülemek için ARKit ile ve makine görüşü ve sahne analizi için Core ML ile birlikte çalışabilir. Apple'a (2025) göre SceneKit'in en son sürümü, Apple Silicon çiplerinde Metal 3 ve GPU Family 9 desteğiyle yalnızca Metal API'sini kullanır.
SceneKit, 2012 yılında macOS'ta OS X Mountain Lion'un bir parçası olarak ortaya çıktı ve başlangıçta işleme için OpenGL kullandı. iOS 8'in piyasaya sürülmesiyle çerçeve mobil cihazlarda kullanılabilir hale geldi. SceneKit 2.0 (iOS 10), PBR malzemeleri, HDR aydınlatma ve model ithalatı için Model I/O ile entegrasyon desteği ekledi.
iOS 12'de SceneKit tamamen Metal'e geçti. iOS 15, USDZ formatı ve AR Quick Look desteğini tanıttı. iOS 18 (2024) ile SceneKit, A17 Pro ve M4 yongasına sahip cihazlarda donanım hızlandırmalı ışın izleme desteği aldı ve mobil cihazlarda gerçek zamanlı olarak gerçekçi gölgeler ve yansımalar sağladı.
SceneKit Mimarisi, SCNScene'in kök öğe olduğu ve SCNNode hiyerarşisi içerdiği bir sahne grafına dayanır. Her düğümün alt düğümleri vardır ve geometri, kamera, ışık veya fizik gövdesi içerebilir. Düğüm konumu, sol elli koordinat sisteminde SCNVector3 (x, y, z) aracılığıyla ayarlanır.
SCNScene, 3D dünyanın tüm durumunu içerir: kök düğüm rootNode, arka plan ayarları, ışık kaynakları ve fizik dünyası (SCNPhysicsWorld). Sahne bir .scn dosyasından (SceneKit Scene Format) yüklenebilir veya programlama yoluyla oluşturulabilir. .scn formatı açıktır ve JSON tabanlıdır.
import SceneKit
let scene = SCNScene()
scene.background.contents = UIColor.darkGray
// Kamera oluşturma
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(0, 5, 10)
scene.rootNode.addChildNode(cameraNode)
// Fizikli küp oluşturma
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 sınıfı, perspektif veya ortografik projeksiyonu yapılandırır. Parametreler: fieldOfView (görüş açısı, varsayılan 45°), zNear/zFar (yakın/uzak kırpma düzlemi). SceneKit, bu parametrelere ve ekran en-boy oranına göre projeksiyon matrisini otomatik olarak yönetir.
SCNNode, geometri, dönüşüm ve fizik gövdesini birbirine bağlar. Düğümler boş olabilir (diğer düğümler için kapsayıcılar) veya geometry özelliği aracılığıyla geometri içerebilir. Her düğümün programatik arama için bir adı (name) vardır ve CAAnimation veya önceden tanımlanmış SCNTransaction aracılığıyla canlandırılabilir.
Düğüm dönüşümü, position (SCNVector3), rotation (SCNVector4) ve scale (SCNVector3) özellikleri aracılığıyla ayarlanır. Karmaşık dönüşümler için transform özelliği (SCNMatrix4) kullanılır. Ayrıca pivot — dönüşüm merkezi ofseti ve worldPosition — hiyerarşiden bağımsız olarak dünya uzayındaki mutlak konum da mevcuttur.
SCNView, SCNScene'i görüntülemek için bir UIView'dir. allowsCameraControl özelliği, jestlerle (kaydırma, döndürme, yakınlaştırma) kamera kontrolünü sağlar. Hata ayıklama için showsStatistics (FPS, draw call'lar, çokgenler) ve debugOptions (tel kafes, sınırlama kutuları) mevcuttur.
SwiftUI'de SceneKit, SCNView'i saran ve sahne parametrelerine bağlamaları destekleyen SceneView aracılığıyla gömülür. Apple'a (2025) göre SceneView, SwiftUI ve UIKit arasındaki köprü için ek yük olmaksızın SCNView ile aynı Metal işleyicisini kullanır.
SCNMaterial, geometri yüzeyinin ışıkla nasıl etkileşime girdiğini tanımlar. SceneKit, roughness, metalness, albedo ve normal parametrelerini kullanan SCNMaterial.LightingModel.physicallyBased aracılığıyla PBR'yi (Fizik Tabanlı İşleme) destekler. PBR malzemeler, manuel parlaklık ayarı olmadan her türlü aydınlatma altında gerçekçi görünür.
SCNMaterial birkaç yuvaya sahiptir: diffuse (renk/doku), specular (aynasal parlaklık), normal (normal haritası), emission (parlama), roughness (pürüzlülük) ve metalness (metallik). Her yuva, animasyonlu dokular için UIColor, UIImage, CALayer veya SKScene içerebilir.
// 3D nesne için PBR malzeme
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 parametresi metalness 0.8 ile mat kaplamalı cilalı metale benzer bir malzeme oluşturur. Dielektrikler (ahşap, plastik) için metalness 0'a, metaller için ise 1.0'a yakın ayarlanır. PBR malzemeler, sahnenin HDR aydınlatmasına otomatik olarak uyum sağlar.
SCNLight birkaç tür ışık kaynağını destekler: omni (noktasal), directional (yönlü), spot (spot ışığı), ambient (ortam) ve area (alan). Her kaynağın yoğunluğu (intensity), rengi (color) vardır ve gölge oluşturabilir (castsShadow). SceneKit, gölge haritaları aracılığıyla gölgeleri otomatik olarak yönetir.
SceneKit, ton sıkıştırmalı (tone mapping) HDR aydınlatmayı destekler. SCNView üzerindeki wantsHDR özelliği genişletilmiş dinamik aralığı etkinleştirir. Kamera öznitelikleri: whitePoint, adaptativeLuminance ve exposure, görüntüyü sahne parlaklığına uyarlayarak fotografik pozlama efekti oluşturur.
SCNPhysicsBody katı cisim fiziğini simüle eder: yerçekimi, çarpışmalar ve sürtünme. Gövde türleri: .static (hareketsiz), .dynamic (kuvvetlerin etkisi altında) ve .kinematic (programlama yoluyla kontrol edilen). Gövde şekli, düğüm geometrisine veya basitleştirilmiş bir forma (box, sphere, concave polyhedron) dayanabilen SCNPhysicsShape aracılığıyla tanımlanır.
SCNPhysicsWorld, sahnenin küresel fiziğini yönetir: yerçekimi, simülasyon hızı ve SCNPhysicsContactDelegate aracılığıyla çarpışma tespiti. SceneKit, mekanizmalar ve bağlı nesneler oluşturmak için fizik mafsallarını (SCNPhysicsHingeJoint, SCNPhysicsBallJoint, SCNPhysicsSliderJoint) destekler.
SceneKit geliştirmesi genellikle Model I/O veya bir .scn dosyası aracılığıyla 3D model yüklemeyle başlar. Xcode'daki sahne düzenleyicisi (Scene Editor), kod olmadan nesneleri görsel olarak yerleştirmeye, malzemeleri ve aydınlatmayı yapılandırmaya olanak tanır. .scn dosyaları JSON formatında kaydedilir ve git aracılığıyla sürüm kontrolünü destekler.
Model I/O (ModelIO.framework), 3D modelleri içe aktarmak, dışa aktarmak ve işlemek için güçlü bir araçtır. SceneKit, MDLAsset nesnelerini doğrudan kullanarak bunları SCNScene'e dönüştürebilir. Desteklenen formatlar: USD, USDZ, OBJ, STL, PLY, Collada (DAE) ve Alembic (ABC). Animasyonlu modeller (iskelet animasyonu, morfing) de içe aktarılır.
// Model I/O aracılığıyla 3D model yükleme
import ModelIO
let url = Bundle.main.url(forResource: "robot",
withExtension: "usdz")!
let asset = MDLAsset(url: url)
let scene = SCNScene(mdlAsset: asset)
// Yapılandırma için ada göre düğüm bulma
if let robot = scene.rootNode.childNode(
withName: "RobotArmature", recursively: true
) {
robot.position = SCNVector3(0, 0, -3)
}
İçe aktardıktan sonra model, MDLAnimation'dan kopyalanan CAAnimation veya yumuşak özellik değişiklikleri için SCNTransaction aracılığıyla canlandırılabilir. SceneKit'in animasyon sistemi, animasyonlar arasında harmanlama ve gerçekçi hareketler oluşturmak için fizikle senkronizasyonu destekler.
SCNTransaction, sahne parametresi değişikliklerini belirtilen süreli bir animasyon bloğunda gruplamaya olanak tanır. begin() ve commit() yöntemleri değişiklikleri çevreler ve duration animasyon süresini ayarlar. Farklı sürelere sahip paralel animasyonlar için iç içe işlemler desteklenir. Animasyon tamamlandıktan sonra bir completion bloğu yürütülür.
İskelet animasyonu için SceneKit, harman şekilleri (morf hedefleri) için SCNAnimation ve SCNMorpher'ı destekler. Her animasyon döngüye alınabilir, zaman ölçeklenebilir ve toplamsal harmanlama yoluyla diğer animasyonlarla karıştırılabilir. Apple'a (2025) göre SceneKit, iskelet başına aynı anda 4'e kadar harmanlanmış animasyonu destekler.
SCNParticleSystem, duman, ateş, yağmur ve kıvılcım gibi efektler oluşturmak için yerleşik bir parçacık sistemidir. Parçacıklar bir noktadan, küredan, küpkten veya geometri yüzeyinden yayılabilir. Parametreler: birthRate, particleLifeSpan, speed, acceleration ve colorOverLife. Parçacık sistemleri maksimum performans için GPU'da çalışır.
Apple'a (2025) göre SCNParticleSystem, A16+ cihazlarda 60 FPS'de 100 bine kadar parçacığı destekler. Parçacıklar, sahnedeki fizik gövdeleriyle çarpışmalara tepki verebilir. Karmaşık efektler için farklı parametrelere sahip birden çok parçacık sistemi birleştirilebilir ve hareketli düğümlere eklenebilir.
SceneKit, ARKit uygulamaları için tercih edilen üst düzey çerçevedir. ARSCNView, SCNView'i genişletir ve sanal 3D dünyayı gerçek ortamla otomatik olarak senkronize eder. Görüntü analizi, düzlem tespiti ve yüz takibi ARKit tarafından, işleme ise SceneKit tarafından gerçekleştirilir.
ARSCNView tüm SCNView özelliklerini destekler ancak sahne kamerasını cihazın gerçek kamerasıyla değiştirir. ARKit, kameradaki videoyu analiz eder ve SceneKit'in SCNNode'e dönüştürdüğü ARAnchor'lar oluşturur. ARKit oturumu, bir yapılandırmayla (ARWorldTrackingConfiguration, ARFaceTrackingConfiguration) yapılandırılan session özelliği aracılığıyla yönetilir.
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 özelliği, gerçek ortama uygun yerleşik aydınlatma ekler. ARKit 6 (iOS 18), 3D nesneleri coğrafi koordinatlara bağlamak için Location Anchors ve mobilya düzeyinde ayrıntıyla iç mekanları haritalamak için Room Tracking'i destekler.
ARKit, didAdd/didUpdate/didRemove bağlantı noktası temsilcisi aracılığıyla yatay ve dikey düzlemleri (zeminler, masalar, duvarlar) algılar. ARPlaneAnchor'a bağlı bir SceneKit düğümü, düzlemin konumunu gerçek zamanlı olarak otomatik olarak izler. Nesne yerleştirmek için ARSCNView'da hitTest yöntemi veya raycastQuery kullanılır.
Apple'a (2025) göre A17 Pro'da ARKit'in maksimum izleme mesafesi 10 lüks aydınlatmada 50 metredir. SceneKit + ARKit, AR oyunları ve gerçek ekipman üzerinde 3D talimat katmanları içeren endüstriyel uygulamalar için kritik olan 20 ms'den az uçtan uca gecikme (motion-to-photon) sağlar.
Sıkça Sorulan Sorular
SceneKit, düşük seviyeli programlama olmadan etkileşimli üç boyutlu sahneler oluşturmayı sağlayan bir Apple 3D grafik çerçevesidir. iOS, macOS ve tvOS'ta oyunlar, AR uygulamaları, veri görselleştirme ve 3D düzenleyiciler için kullanılır.
SceneKit, yerleşik işleyici ve fizik ile üst düzey bir API'dir, tipik 3D görevler için uygundur. Metal, tam GPU kontrolü için düşük seviyeli bir API'dir. SceneKit dahili olarak Metal kullanırken, Metal özel işleme efektleri için uygundur.
SceneKit, Model I/O aracılığıyla USD, USDZ, OBJ, STL, Collada (DAE), Alembic (ABC), PLY ve GLTF'yi destekler. Yerel format, JSON tabanlı .scn'dir (SceneKit Scene Format). Geometri, SCNGeometry aracılığıyla programlama yoluyla oluşturulabilir.
Uzaktaki nesneler için LOD (Ayrıntı Düzeyi) kullanın, aynı malzemelere sahip geometriyi birleştirin, gölgeleri ve ışık kaynaklarını 3–4 ile sınırlayın. Gerçek zamanlı olarak FPS ve draw call'ları izlemek için Statistics'i etkinleştirin.
Evet, ARSCNView — ARKit için SCNView uzantısı aracılığıyla. SceneKit, 3D sahneyi gerçek dünyayla otomatik olarak senkronize eder, düzlem, yüz ve görüntü algılamayı destekler. AR'ye 3D nesneler eklemenin en kolay yoludur.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun