SceneKit: τι είναι, 3D σκηνές και γράφημα σκηνής

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-05-03 Χρόνος ανάγνωσης: 10 λεπ

SceneKit — το framework της Apple για εργασία με 3D γραφικά σε iOS, macOS και tvOS, που παρέχει API υψηλού επιπέδου για τη δημιουργία τρισδιάστατων σκηνών χωρίς γνώση OpenGL ή Metal. Υποστηρίζει φυσική, κίνηση, φωτισμό και ενσωμάτωση με ARKit. Σύμφωνα με τα δεδομένα της Apple WWDC (2025), το SceneKit χρησιμοποιείται σε πάνω από 50 χιλιάδες εφαρμογές και παιχνίδια.

Βασικά σημεία

  • SceneKit — framework για 3D γραφικά με γράφημα σκηνής και απόδοση GPU
  • SCNScene — δοχείο ρίζας που περιέχει το δέντρο SCNNode
  • SCNMaterial καθορίζει την εμφάνιση αντικειμένων μέσω shader και υφής
  • Φυσική μηχανή του SceneKit προσομοιώνει βαρύτητα, συγκρούσεις και αρθρώσεις
  • Ενσωμάτωση με ARKit και Metal επιτρέπει τη δημιουργία εφαρμογών AR υψηλής απόδοσης

Τι είναι το SceneKit;

SceneKit — είναι ένα framework για 3D γραφικά που αποτελεί μέρος του SDK της Apple και παρουσιάστηκε στο iOS 8 (2014). Το SceneKit παρέχει ένα πλήρως διαχειρίσιμο API που λειτουργεί πάνω από Metal και OpenGL για τη δημιουργία διαδραστικών 3D σκηνών. Το framework υποστηρίζει εισαγωγή μοντέλων σε μορφές 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

Το SceneKit εμφανίστηκε στο macOS το 2012 ως μέρος του OS X Mountain Lion και αρχικά χρησιμοποιούσε OpenGL για απόδοση. Με την κυκλοφορία του iOS 8, το framework έγινε διαθέσιμο σε κινητές συσκευές. Η έκδοση 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: γράφημα σκηνής και κόμβοι

Η αρχιτεκτονική του SceneKit βασίζεται στο γράφημα σκηνής, όπου το SCNScene είναι το ριζικό στοιχείο που περιέχει την ιεραρχία SCNNode. Κάθε κόμβος έχει θυγατρικούς κόμβους και μπορεί να περιέχει γεωμετρία, κάμερα, φως ή φυσικό σώμα. Η θέση του κόμβου καθορίζεται μέσω SCNVector3 (x, y, z) σε αριστερόστροφο σύστημα συντεταγμένων.

SCNScene — δοχείο ρίζας

SCNScene περιέχει ολόκληρη την κατάσταση του 3D κόσμου: τον ριζικό κόμβο rootNode, ρυθμίσεις φόντου (background), πηγές φωτός και τον φυσικό κόσμο (SCNPhysicsWorld). Η σκηνή μπορεί να φορτωθεί από ένα .scn αρχείο (SceneKit Scene Format) ή να δημιουργηθεί με προγραμματισμό. Η μορφή .scn είναι ανοικτή και βασίζεται σε JSON.

swift
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 — κόμβοι σκηνής

SCNNode συνδέει γεωμετρία, μετασχηματισμό και φυσικό σώμα. Οι κόμβοι μπορεί να είναι κενοί (δοχεία για άλλους κόμβους) ή να περιέχουν γεωμετρία μέσω της ιδιότητας geometry. Κάθε κόμβος έχει όνομα (name) για προγραμματική αναζήτηση και μπορεί να κινητοποιηθεί μέσω CAAnimation ή προκαθορισμένων SCNTransaction.

Ο μετασχηματισμός του κόμβου καθορίζεται από τις ιδιότητες position (SCNVector3), rotation (SCNVector4) και scale (SCNVector3). Για σύνθετους μετασχηματισμούς χρησιμοποιείται η ιδιότητα transform (SCNMatrix4). Επίσης διατίθενται pivot — μετατόπιση του κέντρου μετασχηματισμού και worldPosition — η απόλυτη θέση στον χώρο του κόσμου ανεξάρτητα από την ιεραρχία.

SCNView — απόδοση

SCNView — UIView για την εμφάνιση του SCNScene. Η ιδιότητα allowsCameraControl ενεργοποιεί τον έλεγχο της κάμερας από τον χρήστη μέσω χειρονομιών (μετακίνηση, περιστροφή, ζουμ). Για αποσφαλμάτωση διατίθενται τα showsStatistics (FPS, draw calls, πολύγωνα) και debugOptions (wireframe, bounding boxes).

Στο SwiftUI, το SceneKit ενσωματώνεται μέσω SceneView, το οποίο περιτυλίσσει το SCNView και υποστηρίζει συνδέσεις σε παραμέτρους σκηνής. Σύμφωνα με την Apple (2025), το SceneView χρησιμοποιεί τον ίδιο Metal renderer με το SCNView, χωρίς επιπλέον επιβάρυνση για τη γέφυρα μεταξύ SwiftUI και UIKit.

Υλικά, φωτισμός και φυσική στο SceneKit

SCNMaterial καθορίζει πώς η επιφάνεια της γεωμετρίας αλληλεπιδρά με το φως. Το SceneKit υποστηρίζει PBR (Physically Based Rendering) μέσω του SCNMaterial.LightingModel.physicallyBased, το οποίο χρησιμοποιεί τις παραμέτρους roughness, metalness, albedo και normal. Τα PBR υλικά εμφανίζονται ρεαλιστικά σε κάθε φωτισμό χωρίς χειροκίνητη ρύθμιση λάμψης.

SCNMaterial και υφή

SCNMaterial έχει πολλά κανάλια: diffuse (χρώμα/υφή), specular (κατοπτρική λάμψη), normal (χάρτης κανονικών), emission (εκπομπή φωτός), roughness (τραχύτητα) και metalness (μεταλλικότητα). Κάθε κανάλι μπορεί να περιέχει UIColor, UIImage, CALayer ή SKScene για κινούμενες υφές.

swift
// Υλικό 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 φωτισμό της σκηνής.

Φωτισμός στο SceneKit

SCNLight υποστηρίζει πολλούς τύπους πηγών φωτός: omni (σημειακή), directional (κατευθυνόμενη), spot (προβολέας), ambient (περιβάλλοντος) και area (επιφάνειας). Κάθε πηγή έχει ένταση (intensity), χρώμα (color) και μπορεί να ρίχνει σκιές (castsShadow). Το SceneKit διαχειρίζεται αυτόματα τις σκιές μέσω shadow maps.

Το SceneKit υποστηρίζει φωτισμό HDR με τονική συμπίεση (tone mapping). Η ιδιότητα wantsHDR στο SCNView ενεργοποιεί το εκτεταμένο δυναμικό εύρος. Χαρακτηριστικά κάμερας: whitePoint, adaptativeLuminance και exposure προσαρμόζουν την εικόνα στη φωτεινότητα της σκηνής, δημιουργώντας εφέ φωτογραφικής έκθεσης.

Φυσική SCNPhysicsBody

SCNPhysicsBody προσομοιώνει τη φυσική στερεών σωμάτων: βαρύτητα, συγκρούσεις και τριβή. Τύποι σωμάτων: .static (ακίνητο), .dynamic (υπό την επίδραση δυνάμεων) και .kinematic (ελεγχόμενο με προγραμματισμό). Το σχήμα του σώματος καθορίζεται από το SCNPhysicsShape, το οποίο μπορεί να βασίζεται στη γεωμετρία του κόμβου ή σε απλοποιημένη μορφή (box, sphere, concave polyhedron).

SCNPhysicsWorld διαχειρίζεται την παγκόσμια φυσική της σκηνής: βαρύτητα (gravity), ταχύτητα προσομοίωσης (speed) και ανίχνευση συγκρούσεων μέσω του αντιπροσώπου SCNPhysicsContactDelegate. Το SceneKit υποστηρίζει φυσικές αρθρώσεις (SCNPhysicsHingeJoint, SCNPhysicsBallJoint, SCNPhysicsSliderJoint) για τη δημιουργία μηχανισμών και συνδεδεμένων αντικειμένων.

Ανάπτυξη 3D σκηνών στο SceneKit

Η ανάπτυξη στο SceneKit συνήθως ξεκινά με τη φόρτωση ενός 3D μοντέλου μέσω Model I/O ή αρχείου .scn. Ο επεξεργαστής σκηνών στο Xcode (Scene Editor) επιτρέπει την οπτική τοποθέτηση αντικειμένων, τη ρύθμιση υλικών και φωτισμού χωρίς κωδικό. Τα .scn αρχεία αποθηκεύονται σε μορφή JSON και υποστηρίζουν έλεγχο εκδόσεων μέσω git.

Εισαγωγή 3D μοντέλων

Model I/O (ModelIO.framework) — ένα ισχυρό εργαλείο για εισαγωγή, εξαγωγή και επεξεργασία 3D μοντέλων. Το SceneKit μπορεί να χρησιμοποιήσει απευθείας τα αντικείμενα MDLAsset, μετατρέποντάς τα σε SCNScene. Υποστηριζόμενες μορφές: USD, USDZ, OBJ, STL, PLY, Collada (DAE) και Alembic (ABC). Μοντέλα με κινήσεις (σκελετική κίνηση, morphing) εισάγονται επίσης.

swift
// Φόρτωση 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 υποστηρίζει ανάμειξη κινήσεων και συγχρονισμό με τη φυσική για ρεαλιστικές κινήσεις.

Κίνηση και συναλλαγές

SCNTransaction επιτρέπει την ομαδοποίηση αλλαγών παραμέτρων σκηνής σε ένα μπλοκ κίνησης με καθορισμένη διάρκεια. Οι μέθοδοι begin() και commit() περιβάλλουν τις αλλαγές, και το duration καθορίζει τη διάρκεια της κίνησης. Οι ένθετες συναλλαγές υποστηρίζονται για παράλληλες κινήσεις με διαφορετικές διάρκειες. Το Completion block εκτελείται μετά το τέλος της κίνησης.

Για σκελετική κίνηση, το SceneKit υποστηρίζει SCNAnimation και SCNMorpher για blend-shape (morph targets). Κάθε κίνηση μπορεί να επαναληφθεί, να κλιμακωθεί χρονικά και να αναμειχθεί με άλλες κινήσεις μέσω additive blending. Σύμφωνα με την Apple (2025), το SceneKit υποστηρίζει έως 4 ταυτόχρονα αναμεμειγμένες κινήσεις σε έναν σκελετό.

Συστήματα σωματιδίων SCNParticleSystem

SCNParticleSystem — ενσωματωμένο σύστημα σωματιδίων για δημιουργία εφέ: καπνός, φωτιά, βροχή και σπινθήρες. Τα σωματίδια μπορούν να εκπεμφθούν από ένα σημείο, σφαίρα, κύβο ή επιφάνεια γεωμετρίας. Παράμετροι: birthRate, particleLifeSpan, speed, acceleration και colorOverLife. Τα συστήματα σωματιδίων λειτουργούν στη GPU για μέγιστη απόδοση.

Σύμφωνα με την Apple (2025), το SCNParticleSystem υποστηρίζει έως 100 χιλιάδες σωματίδια με 60 FPS σε συσκευές με A16+. Τα σωματίδια μπορούν να αντιδράσουν σε συγκρούσεις με φυσικά σώματα της σκηνής. Για σύνθετα εφέ, πολλά συστήματα σωματιδίων με διαφορετικές παραμέτρους μπορούν να συνδυαστούν και να δεθούν σε κινούμενους κόμβους.

SceneKit και ARKit: επαυξημένη πραγματικότητα

SceneKit είναι το προτιμώμενο υψηλού επιπέδου framework για εφαρμογές ARKit. Το ARSCNView επεκτείνει το SCNView και συγχρονίζει αυτόματα τον εικονικό 3D κόσμο με το πραγματικό περιβάλλον. Η ανάλυση εικόνας, η ανίχνευση επιπέδων και η παρακολούθηση προσώπου εκτελούνται από το ARKit, και η απόδοση από το SceneKit.

ARSCNView και ARAnchor

ARSCNView υποστηρίζει όλες τις λειτουργίες του SCNView, αλλά αντικαθιστά την κάμερα σκηνής με την πραγματική κάμερα της συσκευής. Το ARKit αναλύει βίντεο από την κάμερα και δημιουργεί ARAnchor, τα οποία το SceneKit μετατρέπει σε SCNNode. Η συνεδρία ARKit διαχειρίζεται μέσω της ιδιότητας session, η οποία ρυθμίζεται με μια διαμόρφωση (ARWorldTrackingConfiguration, ARFaceTrackingConfiguration).

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 προσθέτει ενσωματωμένο φωτισμό που αντιστοιχεί στο πραγματικό περιβάλλον. Το 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 lux. Το SceneKit + ARKit παρέχει καθυστέρηση άκρου-άκρου (motion-to-photon) μικρότερη από 20 ms, κρίσιμη για παιχνίδια AR και βιομηχανικές εφαρμογές με προσθήκη 3D οδηγιών σε πραγματικό εξοπλισμό.

Συχνές ερωτήσεις

Τι είναι το SceneKit και για τι χρησιμοποιείται;

SceneKit — το framework της Apple για 3D γραφικά, που επιτρέπει τη δημιουργία διαδραστικών τρισδιάστατων σκηνών χωρίς προγραμματισμό χαμηλού επιπέδου. Χρησιμοποιείται για παιχνίδια, εφαρμογές AR, οπτικοποίηση δεδομένων και 3D επεξεργαστές σε iOS, macOS και tvOS.

Ποια είναι η διαφορά μεταξύ SceneKit και Metal;

SceneKit — API υψηλού επιπέδου με έτοιμο renderer και φυσική, κατάλληλο για τυπικές 3D εργασίες. Metal — API χαμηλού επιπέδου για πλήρη έλεγχο της GPU. Το SceneKit χρησιμοποιεί το Metal εσωτερικά, και το Metal είναι κατάλληλο για προσαρμοσμένα εφέ απόδοσης.

Ποιες μορφές 3D μοντέλων υποστηρίζει το SceneKit;

Το SceneKit μέσω Model I/O υποστηρίζει USD, USDZ, OBJ, STL, Collada (DAE), Alembic (ABC), PLY και GLTF. Η εγγενής μορφή — .scn (SceneKit Scene Format) βασισμένη σε JSON. Μπορεί να δημιουργηθεί γεωμετρία προγραμματιστικά μέσω SCNGeometry.

Πώς να βελτιστοποιήσετε την απόδοση του SceneKit;

Χρησιμοποιήστε LOD (Level of Detail) για μακρινά αντικείμενα, συγχωνεύστε γεωμετρία με ίδια υλικά, περιορίστε τον αριθμό σκιών και πηγών φωτός σε 3–4. Ενεργοποιήστε Statistics για παρακολούθηση FPS και draw calls σε πραγματικό χρόνο.

Μπορεί το SceneKit να χρησιμοποιηθεί για εφαρμογές AR;

Ναι, μέσω ARSCNView — επέκταση του SCNView για ARKit. Το SceneKit συγχρονίζει αυτόματα τη 3D σκηνή με τον πραγματικό κόσμο, υποστηρίζει ανίχνευση επιπέδων, προσώπων και εικόνων. Αυτός είναι ο απλούστερος τρόπος να προσθέσετε 3D αντικείμενα σε AR.

Σύνοψη

  • SceneKit — το framework της Apple για υψηλού επιπέδου 3D γραφικά με απόδοση GPU μέσω Metal
  • SCNScene και SCNNode αποτελούν το γράφημα σκηνής με κληρονομικότητα μετασχηματισμών
  • SCNMaterial υποστηρίζει απόδοση PBR με roughness, metalness και χάρτες κανονικών
  • SCNPhysicsBody παρέχει προσομοίωση φυσικής με συγκρούσεις και αρθρώσεις
  • Model I/O εισάγει μοντέλα σε USD, OBJ, Collada και άλλες μορφές
  • ARSCNView ενσωματώνει 3D σκηνές με επαυξημένη πραγματικότητα μέσω ARKit
  • SCNParticleSystem δημιουργεί εφέ GPU με εκατομμύρια σωματίδια σε πραγματικό χρόνο

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης