SceneKit لـ Swift: الدليل الشامل للرسوميات ثلاثية الأبعاد
SceneKit هو إطار عمل قوي للتعامل مع الرسوميات ثلاثية الأبعاد، طورته شركة Apple. يوفر للمطورين واجهة برمجة تطبيقات عالية المستوى لإنشاء وتصور وتحريك المشاهد ثلاثية الأبعاد على جميع منصات Apple: iOS و macOS و tvOS و watchOS. على عكس واجهات الرسوميات منخفضة المستوى (مثل Metal و OpenGL)، يقوم SceneKit بتجريد العمليات الحسابية الرياضية المعقدة والعمل مع وحدة معالجة الرسوميات (GPU)، مما يسمح لك بالتركيز على منطق التطبيق.
لماذا تحتاج SceneKit؟ هذا الإطار مثالي لإنشاء الألعاب والعروض التقديمية ثلاثية الأبعاد التفاعلية وتصور البيانات والنماذج المعمارية والتطبيقات التعليمية. يدعم محركًا فيزيائيًا (محاكاة الجاذبية والتصادمات)، ونظام الجسيمات، والتحريك الهيكلي، والعمل مع الظلال والإضاءة، بالإضافة إلى التكامل مع الواقع المعزز (ARKit). يتيح لك SceneKit تحميل النماذج بتنسيقات .dae (Collada) و .scn (تنسيق Apple الخاص) و .usdz، مما يجعله أداة ممتازة لاستيراد الأصول من Blender أو Maya أو 3ds Max.
الميزة الرئيسية لـ SceneKit مقارنة بالمنافسين (مثل Unity) هي التكامل الأصلي مع نظام Apple البيئي. يمكنك استخدام SwiftUI أو UIKit أو AppKit لإنشاء الواجهة، و SceneKit لعرض المحتوى ثلاثي الأبعاد، مع كتابة كل الكود بلغة واحدة (Swift). يقوم الإطار تلقائيًا بإدارة الذاكرة وتحسين العرض وفقًا للجهاز المحدد، وهو أمر مهم بشكل خاص لتطبيقات الهواتف المحمولة.
التثبيت والإعداد
SceneKit جزء من SDK القياسي لـ Apple، لذلك لا يتطلب تثبيتًا منفصلاً عبر مديري الحزم (CocoaPods, Swift Package Manager). للبدء، ما عليك سوى استيراد الإطار إلى مشروعك.
لا يوجد أمر تثبيت محدد، حيث أن الإطار مثبت مسبقًا. ومع ذلك، إذا كنت تستخدم Swift Package Manager للتبعيات، فتأكد من أن مشروعك مهيأ لنظام iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 3.0+.
للاستيراد في الكود، استخدم:
import SceneKit
import SceneKit.ModelIO // لتحميل النماذج عبر Model I/O
إذا كنت تعمل مع Xcode، ما عليك سوى إضافة SceneKit.framework في قسم "Frameworks, Libraries, and Embedded Content" الخاص بالهدف (target).
بداية سريعة: مثال عملي بسيط
لنقم بإنشاء مشهد ثلاثي الأبعاد بسيط بمكعب دوار. يمكن تشغيل هذا المثال في Playground أو في تطبيق iOS/macOS.
import SceneKit
import PlaygroundSupport
// 1. إنشاء المشهد
let scene = SCNScene()
// 2. إنشاء الكاميرا
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(x: 0, y: 0, z: 5)
scene.rootNode.addChildNode(cameraNode)
// 3. إنشاء المكعب
let boxGeometry = SCNBox(width: 1.0, height: 1.0, length: 1.0, chamferRadius: 0.0)
let boxNode = SCNNode(geometry: boxGeometry)
boxNode.position = SCNVector3(x: 0, y: 0, z: 0)
scene.rootNode.addChildNode(boxNode)
// 4. إضافة حركة دورانية
let rotateAction = SCNAction.rotateBy(x: 0, y: CGFloat.pi * 2, z: 0, duration: 5.0)
let repeatAction = SCNAction.repeatForever(rotateAction)
boxNode.runAction(repeatAction)
// 5. إعداد العرض في Playground
let scnView = SCNView(frame: CGRect(x: 0, y: 0, width: 400, height: 400))
scnView.scene = scene
scnView.backgroundColor = UIColor.darkGray
scnView.autoenablesDefaultLighting = true
PlaygroundPage.current.liveView = scnView
الفئات والطرق الأساسية في SceneKit
فيما يلي المكونات الرئيسية للإطار مع أمثلة على الاستخدام.
1. SCNScene — حاوية المشهد ثلاثي الأبعاد بأكمله
التوقيع: class SCNScene : NSObject
الوظيفة: هو الكائن الجذري الذي يحتوي على جميع العقد (SCNNode) والأشكال الهندسية ومصادر الضوء والكاميرات والأجسام الفيزيائية. المشهد هو عبارة عن رسم بياني للعقد.
let scene = SCNScene()
scene.background.contents = UIC