SceneKit — το framework της Apple για εργασία με 3D γραφικά σε iOS, macOS και tvOS, που παρέχει API υψηλού επιπέδου για τη δημιουργία τρισδιάστατων σκηνών χωρίς γνώση OpenGL ή Metal. Υποστηρίζει φυσική, κίνηση, φωτισμό και ενσωμάτωση με ARKit. Σύμφωνα με τα δεδομένα της Apple WWDC (2025), το SceneKit χρησιμοποιείται σε πάνω από 50 χιλιάδες εφαρμογές και παιχνίδια.
Βασικά σημεία
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 εμφανίστηκε στο 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 βασίζεται στο γράφημα σκηνής, όπου το 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 renderer με το 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). Μοντέλα με κινήσεις (σκελετική κίνηση, morphing) εισάγονται επίσης.
// Φόρτωση 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 — ενσωματωμένο σύστημα σωματιδίων για δημιουργία εφέ: καπνός, φωτιά, βροχή και σπινθήρες. Τα σωματίδια μπορούν να εκπεμφθούν από ένα σημείο, σφαίρα, κύβο ή επιφάνεια γεωμετρίας. Παράμετροι: birthRate, particleLifeSpan, speed, acceleration και colorOverLife. Τα συστήματα σωματιδίων λειτουργούν στη GPU για μέγιστη απόδοση.
Σύμφωνα με την Apple (2025), το SCNParticleSystem υποστηρίζει έως 100 χιλιάδες σωματίδια με 60 FPS σε συσκευές με A16+. Τα σωματίδια μπορούν να αντιδράσουν σε συγκρούσεις με φυσικά σώματα της σκηνής. Για σύνθετα εφέ, πολλά συστήματα σωματιδίων με διαφορετικές παραμέτρους μπορούν να συνδυαστούν και να δεθούν σε κινούμενους κόμβους.
SceneKit είναι το προτιμώμενο υψηλού επιπέδου framework για εφαρμογές 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 lux. Το SceneKit + ARKit παρέχει καθυστέρηση άκρου-άκρου (motion-to-photon) μικρότερη από 20 ms, κρίσιμη για παιχνίδια AR και βιομηχανικές εφαρμογές με προσθήκη 3D οδηγιών σε πραγματικό εξοπλισμό.
Συχνές ερωτήσεις
SceneKit — το framework της Apple για 3D γραφικά, που επιτρέπει τη δημιουργία διαδραστικών τρισδιάστατων σκηνών χωρίς προγραμματισμό χαμηλού επιπέδου. Χρησιμοποιείται για παιχνίδια, εφαρμογές AR, οπτικοποίηση δεδομένων και 3D επεξεργαστές σε iOS, macOS και tvOS.
SceneKit — API υψηλού επιπέδου με έτοιμο renderer και φυσική, κατάλληλο για τυπικές 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. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης