SceneKit هو إطار عمل من Apple للعمل مع الرسومات ثلاثية الأبعاد على iOS و macOS و tvOS، ويوفر واجهة برمجة تطبيقات عالية المستوى لإنشاء مشاهد ثلاثية الأبعاد دون الحاجة إلى معرفة OpenGL أو Metal. وهو يدعم الفيزياء والرسوم المتحركة والإضاءة والتكامل مع ARKit. وفقًا لـ Apple WWDC (2025)، يُستخدم SceneKit في أكثر من 50 ألف تطبيق ولعبة.
النقاط الرئيسية
SceneKit هو إطار عمل للرسومات ثلاثية الأبعاد وهو جزء من SDK من Apple وتم تقديمه في iOS 8 (2014). يوفر SceneKit واجهة برمجة تطبيقات كاملة تعتمد على المشاهد تعمل فوق Metal و OpenGL لإنشاء مشاهد ثلاثية الأبعاد تفاعلية. يدعم الإطار استيراد النماذج بتنسيقات Collada (DAE) و Alembic (ABC) و USD و GLTF عبر Model I/O.
على عكس واجهات برمجة التطبيقات منخفضة المستوى (Metal و Vulkan)، يتولى SceneKit إدارة العرض والإضاءة والفيزياء. يصف المطور المشهد بطريقة تعريفية: يضيف العقد ويحدد المواد والرسوم المتحركة. SceneKit يعمل تلقائيًا على تحسين الهندسة ودمج draw calls وإدارة LOD عند الحاجة.
يمكن لـ SceneKit العمل مع ARKit لعرض الكائنات ثلاثية الأبعاد في العالم الحقيقي، وكذلك مع Core ML للرؤية الآلية وتحليل المشهد. وفقًا لـ Apple (2025)، يستخدم أحدث إصدار من SceneKit واجهة Metal API فقط مع دعم Metal 3 و GPU Family 9 على شرائح Apple Silicon.
ظهر SceneKit على macOS في عام 2012 كجزء من OS X Mountain Lion وكان يستخدم في البداية OpenGL للعرض. مع إصدار iOS 8، أصبح الإطار متاحًا على الأجهزة المحمولة. أضاف 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 يحتوي على الحالة الكاملة للعالم ثلاثي الأبعاد: العقدة الجذرية rootNode وإعدادات الخلفية ومصادر الضوء والعالم الفيزيائي (SCNPhysicsWorld). يمكن تحميل المشهد من ملف .scn (تنسيق مشهد SceneKit) أو إنشاؤه برمجيًا. تنسيق .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 مثل SCNView، دون أي عبء إضافي للجسر بين SwiftUI و UIKit.
SCNMaterial يحدد كيف يتفاعل سطح الهندسة مع الضوء. يدعم SceneKit PBR (العرض الفيزيائي) عبر SCNMaterial.LightingModel.physicallyBased، الذي يستخدم معلمات roughness و metalness و albedo و normal. تبدو المواد PBR واقعية تحت أي إضاءة دون ضبط يدوي للبريق.
SCNMaterial له عدة فتحات: diffuse (لون/نسیج) و specular (بريق مرآوي) و normal (خريطة الطبيعيات) و emission (توهج) و roughness (خشونة) و metalness (معدنية). يمكن أن تحتوي كل فتحة على UIColor أو UIImage أو CALayer أو SKScene لأنسجة متحركة.
// مادة PBR لكائن ثلاثي الأبعاد
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 يدير الفيزياء العالمية للمشهد: الجاذبية وسرعة المحاكاة واكتشاف التصادمات عبر المفوض SCNPhysicsContactDelegate. يدعم SceneKit المفاصل الفيزيائية (SCNPhysicsHingeJoint و SCNPhysicsBallJoint و SCNPhysicsSliderJoint) لإنشاء الآليات والأجسام المتصلة.
التطوير على SceneKit يبدأ عادةً بتحميل نموذج ثلاثي الأبعاد عبر Model I/O أو ملف .scn. يسمح محرر المشاهد في Xcode (Scene Editor) بترتيب الكائنات بصريًا وتكوين المواد والإضاءة دون كتابة كود. يتم حفظ ملفات .scn بتنسيق JSON وتدعم التحكم في الإصدارات عبر git.
Model I/O (ModelIO.framework) هو أداة قوية لاستيراد وتصدير ومعالجة النماذج ثلاثية الأبعاد. يمكن لـ SceneKit استخدام كائنات MDLAsset مباشرةً وتحويلها إلى SCNScene. التنسيقات المدعومة: USD و USDZ و OBJ و STL و PLY و Collada (DAE) و Alembic (ABC). يتم أيضًا استيراد النماذج ذات الرسوم المتحركة (الرسوم الهيكلية والتشكيل).
// تحميل نموذج ثلاثي الأبعاد عبر 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 بعد انتهاء الرسوم المتحركة.
للرسوم الهيكلية، يدعم SceneKit SCNAnimation و SCNMorpher لأشكال المزج (morph targets). يمكن لكل رسم متحرك أن يتكرر ويتم قياسه زمنيًا ومزجه مع رسوم أخرى عبر المزج الإضافي. وفقًا لـ Apple (2025)، يدعم SceneKit حتى 4 رسوم متحركة ممزوجة في وقت واحد لهيكل عظمي واحد.
SCNParticleSystem هو نظام جسيمات مدمج لإنشاء التأثيرات: الدخان والنار والمطر والشرر. يمكن إصدار الجسيمات من نقطة أو كرة أو مكعب أو سطح هندسي. المعلمات: birthRate و particleLifeSpan و speed و acceleration و colorOverLife. تعمل أنظمة الجسيمات على GPU للحصول على أقصى أداء.
وفقًا لـ Apple (2025)، SCNParticleSystem يدعم حتى 100 ألف جسيم بمعدل 60 إطارًا في الثانية على الأجهزة المزودة بـ A16+. يمكن للجسيمات التفاعل مع التصادمات مع الأجسام الفيزيائية للمشهد. للتأثيرات المعقدة، يمكن دمج عدة أنظمة جسيمات بمعلمات مختلفة وربطها بعقد متحركة.
SceneKit هو الإطار المفضل عالي المستوى لتطبيقات ARKit. ARSCNView يوسع SCNView ويزامن تلقائيًا العالم ثلاثي الأبعاد الافتراضي مع البيئة الحقيقية. تحليل الصورة واكتشاف المستويات وتتبع الوجه تتم بواسطة 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 لربط الكائنات ثلاثية الأبعاد بإحداثيات جغرافية و Room Tracking لرسم الخرائط الداخلية للأماكن بتفاصيل مستوى الأثاث.
يكتشف ARKit المستويات الأفقية والرأسية (الأرضيات والطاولات والجدران) عبر المفوض didAdd/didUpdate/didRemove anchor. عقدة SceneKit المرتبطة بـ ARPlaneAnchor تتبع تلقائيًا موضع المستوى في الوقت الفعلي. لوضع الكائنات، يتم استخدام طريقة hitTest على ARSCNView أو raycastQuery.
وفقًا لـ Apple (2025)، أقصى مسافة تتبع لـ ARKit على A17 Pro هي 50 مترًا عند إضاءة من 10 لوكس. SceneKit + ARKit يوفران زمن استجابة شامل (motion-to-photon) أقل من 20 مللي ثانية، وهو أمر بالغ الأهمية لألعاب AR والتطبيقات الصناعية مع تراكب التعليمات ثلاثية الأبعاد على المعدات الحقيقية.
الأسئلة الشائعة
SceneKit هو إطار عمل من Apple للرسومات ثلاثية الأبعاد يتيح إنشاء مشاهد ثلاثية الأبعاد تفاعلية دون برمجة منخفضة المستوى. يُستخدم للألعاب وتطبيقات AR وتصور البيانات ومحررات 3D على iOS و macOS و tvOS.
SceneKit هو واجهة برمجة تطبيقات عالية المستوى مع عارض وفيزياء مدمجين، مناسب للمهام ثلاثية الأبعاد النموذجية. Metal هو واجهة برمجة تطبيقات منخفضة المستوى للتحكم الكامل في GPU. يستخدم SceneKit Metal داخليًا، بينما Metal مناسب لتأثيرات العرض المخصصة.
SceneKit عبر Model I/O يدعم USD و USDZ و OBJ و STL و Collada (DAE) و Alembic (ABC) و PLY و GLTF. التنسيق الأصلي هو .scn (تنسيق مشهد SceneKit) المستند إلى JSON. يمكن إنشاء الهندسة برمجيًا عبر SCNGeometry.
استخدم LOD (مستوى التفاصيل) للكائنات البعيدة، وادمج الهندسة ذات المواد المتطابقة، وحدد الظلال ومصادر الضوء إلى 3–4. فعّل Statistics لمراقبة FPS و draw calls في الوقت الفعلي.
نعم، عبر ARSCNView — امتداد SCNView لـ ARKit. يقوم SceneKit تلقائيًا بمزامنة المشهد ثلاثي الأبعاد مع العالم الحقيقي، ويدعم اكتشاف المستويات والوجوه والصور. هذه هي أسهل طريقة لإضافة كائنات ثلاثية الأبعاد إلى AR.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.