SceneKit: nedir, 3D sahneler ve sahne grafı

Yazar: IT Sectr Yayınlanma: 2026-05-03 Okuma süresi: 10 dk

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 — sahne grafı ve GPU işleme ile 3D grafikler için bir çerçeve
  • SCNScene — SCNNode düğümlerinden oluşan bir ağaç içeren kök kapsayıcı
  • SCNMaterial gölgeler ve dokular aracılığıyla nesnelerin görünümünü tanımlar
  • Fizik motoru SceneKit yerçekimi, çarpışmalar ve mafsalları simüle eder
  • ARKit ve Metal ile entegrasyon yüksek performanslı AR uygulamaları oluşturmayı sağlar

SceneKit Nedir?

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 Geçmişi

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: Sahne Grafı ve Düğümler

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 — Kök Kapsayıcı

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.

swift
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 — Sahne Düğümleri

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 — İşleme

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.

SceneKit'te Malzemeler, Aydınlatma ve Fizik

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 ve Dokular

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.

swift
// 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.

SceneKit'te Aydınlatma

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 Fiziği

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 ile 3D Sahne Geliştirme

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.

3D Modelleri İçe Aktarma

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.

swift
// 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.

Animasyon ve İşlemler

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 Parçacık Sistemi

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 ve ARKit: Artırılmış Gerçeklik

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 ve ARAnchor

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.

swift
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.

Düzlem Tespiti ve Nesne Yerleştirme

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 nedir ve ne için kullanılır?

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 ve Metal arasındaki fark nedir?

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 hangi 3D model formatlarını destekler?

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.

SceneKit performansı nasıl optimize edilir?

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.

SceneKit AR uygulamaları için kullanılabilir mi?

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

  • SceneKit — Metal aracılığıyla GPU işleme ile üst düzey 3D grafikler için Apple çerçevesi
  • SCNScene ve SCNNode dönüşüm kalıtımıyla bir sahne grafı oluşturur
  • SCNMaterial roughness, metalness ve normal haritalarıyla PBR işlemeyi destekler
  • SCNPhysicsBody çarpışmalar ve mafsallarla fizik simülasyonu sağlar
  • Model I/O USD, OBJ, Collada ve diğer formatlarda modelleri içe aktarır
  • ARSCNView ARKit aracılığıyla 3D sahneleri artırılmış gerçeklikle entegre eder
  • SCNParticleSystem gerçek zamanlı olarak milyonlarca parçacıkla GPU efektleri oluşturur

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.

Projeyi tartış

Ayrıca okuyun