# محرك ثلاثي الأبعاد

المحرك الثلاثي الأبعاد هو وحدة برمجية ذات بنية واضحة تهدف إلى تقديم وظائف مخصصة لأداء حسابات فراغية بهدف إظهار رسوميات ثلاثية الأبعاد باستخدام الحاسوب.

## سبب التسمية

محرك ثلاثي الأبعاد هي الترجمة العربية للمصطلح الإنجليزي 3D Engine. لذلك، فإن الكلمة لا علاقة لها بالتحريك Animation بالرغم من أن وظيفة التحريك هي إحدى الوظائف التي قد يقوم بها المحرك ثلاثي الأبعاد (انظر في الأسفل). يمكن ربط الاسم مع المحرك الحقيقي (كمحرك السيارة) حيث أنهما يتشابهان من ناحية وجود هيكلية معقدة مخبأة يمكن الاستفادة منها عن طريق واجهة استخدام مبسطة (المقود والدواسات في السيارة مثلاً والإجراءات المتاحة في محرك الـ 3D بالمقابل).

## الحاجة لمحرك ثلاثي الأبعاد

تتألف عملية إظهار الرسوميات في الحاسوب من سلسلة طويلة من العمليات المتلاحقة مُشكـِّلة ما يدعى بـ"خط تجهيز" (pipeline). أغلب البرامج التي تقوم بإظهار ثلاثي الأبعاد تحتاج إلى أن تحتوي على التعليمات التي تقوم بإعداد خط التجهيز هذا. هذه العمليات لا تختلف في قسم كبير منها بين برنامج وآخر، مما يعني أن كُتـَّـاب هذه البرامج يمنكهم إعادة استخدام المنطق نفسه فيما بينهم وتوفير الوقت. يقوم محرك الـ 3D بتجميع هذه العمليات الشائعة وتنظيمها ضمن بنية موحدة يمكن إعادة استخدامها بسهولة. إضافة إلى ذلك، يمكن لمحرك الـ 3D أن يقدم واجهة تعامل interface مجردة من التفاصيل الخاصة بالنظام التحتي low-level system. هذا المفهوم ازدادت أهميته في الآونة الأخيرة بسبب الحاجة لاستهداف عدة منصات مختلفة platforms (مثلاً نظام تشغيل ويندوز ونظام تشغيل لينكس).

## وظائف المحرك ثلاثي الأبعاد

تختلف شمولية وظائف المحرك ثلاثي الأبعاد بحسب أهدافه وضخامته. قد تتركز الوظائف في طبقة بسيطة تدير عملية تسليم المعلومات (المضلعات الفراغية مثلاً) لمعالج الرسوميات rendering hardware (كدايركت ثري دي مثلاً)، وقد تتسع لتغطي كل شيء بدءاً من نقل المعلومات (مضلعات وإكساءات وحركات ...الخ) من البيئة المستخدمة لخلق وتحرير هذه المعلومات (برنامج 3D عادةً) وحتى لحظة إظهار الألوان على جهاز الخرج (كمثال، محرك مينتال راي). فيما يلي قائمة تحاول أن تشمل كل العمليات التي يمكن للمحرك ثلاثي الأبعاد القيام بها ودعمها، مذكورة بترتيب تطبيقها:

### أدوات خط الإنتاج

* أدوات تحرير تستخدم لتجهيز معلومات خاصة بالمحرك لا يمكن عادة تجهيزها بأدوات أخرى. كمثال، بعض المحركات تقدم أداة خاصة لتجهيز المظللات أو المواد materials المستخدمة لرسم الأجسام، ثم حفظ هذه المواد في ملف يمكن للمحرك قراءته واستخراج تفاصيل المواد المطلوبة منه (كما هو الحال في محرك أنريل).
* بريمجات scripts تساعد على تهيئة المعلومات في بيئة التحرير بشكل يلائم طبيعة حسابات المحرك. مثلاً، بريمج يقوم بتحويل الهيكل العظمي rig لشخصية من سلاسل عظام bone chains إلى عقد تحويل بسيطة transformation nodes، حيث أن أغلب المحركات تنفذ حسابات الشجرية على مجموعة من مصفوفات التحويل transformation matrices يمكن التعبير عنها بشكل بصري عن طريق عقد التحويل.
* تقديم إضافة برمجية plug-in إلى بيئة التحرير تقوم بتحويل المشهد المطلوب (أو جزء منه) إلى صيغة يستطيع المحرك قراءتها والتعامل معها بسرعة وفعالية. كمثال، إضافة وحدة تصدير ملفات MD3 الخاصة بشخصيات كوايك 3 Quake3 من شخصيات مبنية في برنامج ثري دي ستوديو ماكس، أو تحويل مشهد في برنامج سوفت إيماج إكس إس آي إلى صيغة MI الخاصة بمينتال راي.
* أدوات خارجية تقوم بمعالجة البيانات الناتجة من بيئة التحرير لتنظيفها واختصار غير المطلوب منها، تمهيداً لتجميعها بشكل مختصر يسهـِّل قراءتها من قبل المحرك أو يحسن أداء حساباتها. كمثال، أداة خارجية command-line tool تقوم بالكشف عن المثلثات ذات المساحة الصغيرة جداً وحذفها من قائمة المثلثات التي تشكل الجسم.

### مكتبات زمن التشغيل

* تقديم هيكلية framework يمكن للمستفيدين من المحرك بناء برنامجهم عليها. كمثال، نافذة جاهزة للتخريج مع حلقة رسم مجهزة يمكن تعبئتها بالأجسام المطلوب رسمها وترك بقية مهمات التخريج على المحرك.
* تقديم خدمات إدارة الذاكرة. عدة محركات تقدم نظام لتنظيف الموارد غير المستخدمة garbage collection يريح المستخدم من أعباء متابعة الموارد التي يقوم باستخدامها في المشهد (كالإكساءات مثلاً).
* تسهيلات لكشف الأخطاء ومتابعتها. كالتأكيدات asserts والتقارير ومقاييس الأداء وتكاليف الذاكرة والمعالجة.
* مكتبة لأداء الحسابات الرياضية كالمصفوفات والمتجهات وتتبع الأشعة ray tracing. غالباً ما تكون هذه المكتبة محسنة للعمل على أحجام كبيرة من البيانات.
* عدة تطوير software development kit يمكن للمستخدمين التعامل معها لاستحداث عمليات إضافية مخصصة تخدم متطلبات معينة. كمثال، عدة مينتال راي الخاصة بتأليف مظللات جديدة.
* مكتبة حسابات لتقسيم المشهد تمهيداً لرسم الأجزاء الظاهرة منه فقط عن طريق استبعاد cull الأجزاء الغير داخلة ضمن كادر المشهد. كمثال، نظام استبعاد يعتمد على الكرات المحيطة للأجسام bounding spheres.
* وحدة لترتيب عناصر المشهد ليتم رسمه بترتيب معين يساعد على تحسين الأداء أو الجودة (مثلاً بالاعتماد على التقسيم الفراغي الثنائي binary space partitioning).
* وحدات لأداء مهام التحريك animation المختلفة. كتحريك الشخصيات باستخدام حركات مسبقة التسجيل، أو بنظام حسابات فورية كالحركيات العكسية inverse kinematics والحسابات الفيزيائية. بعض المحركات الحديثة تتضمن إمكانيات دمج عدة حركات من مصادر مختلفة بهدف إنشاء حركات جديدة. يمكن تعميم خدمات التحريك على أية قيمة قابلة للتغير مع الزمن وفقاً لتابع ما. تستعمل طرق الاستيفاء الرياضي بكثرة لإيجاد القيم الوسيطة في أية لحظة من زمن المشهد.
* تنظيم المشهد ضمن بنية معينة تمكن المستخدمين من الوصول لمحتوياته واستنتاج الروابط المختلفة بين عناصر المشهد. عادة يطلق على مثل هذه البنية مخطط المشهد scene graph، وتشمل عناصر المشهد ممثلة بشجرية تظهر علاقات الربط والأب/الابن بين العناصر.
* وحدات يمكن التعامل معها من أجل بناء المجسمات ورسمها بالمواصفات المطلوبة. يمكن لهذا البند أن يشمل تلبيس الشخصيات وتحوير المجسمات كعمليات ممكن تنفيذها على المجسمات.
* مهام أخرى خاصة مطلوبة من قبل مكتبات أخرى يعتمد عليها المحرك. كمثال، فلترة النداءات المتكررة لمكتبة دايركت ثري دي المستخدمة في الرسم.

## أنظمة المحركات الرئيسية

يوجد حالياً نظامين رئيسين في معالجة ورسم المشاهد الثلاثية الأبعاد
* من الشاشة إلى العالم screen-to-world: الانطلاق من البكسلات على الشاشة وتتبع الأشعة عودة إلى المشهد التخيلي. هذه الطريقة تعرف بتتبع الأشعة. كل شعاع ينطلق من أحد بكسلات الشاشة ليرتطم بجسم ما في العالم. من نقطة الارتطام هذه يتم بعث أشعة إضافية في العالم تتوجه نحو مصادر الضوء الرئيسية في المشهد. هذه الأشعة قد ترتطم بأجسام أخرى وتنعكس عنها لتتشتت باتجاهات أخرى يتم تتبعها بشكل مستمر حتى حد معين (كعدد ثابت من الارتطامات أو نفاذ طاقة الضوء مثلاً).
* من العالم إلى الشاشة world-to-screen: الانطلاق من المشهد التخيلي وإسقاطه على سطح الشاشة. وهي الطريقة المعاكسة للطريقة السابقة. حيث يتم إيجاد البكسلات التي سيغطيها كل جسم بشكل مستقل، ويتم حساب ألوان هذه البكسلات عن طريق حسابات مبسطة تتجاهل في كثير من الأحيان الموجودات المحيطة.
أغلب المحركات الثلاثية الأبعاد المستخدمة في الإنتاج الفلمي تعتمد النظام الأول (متتبعة للأشعة) بسبب إمكانية هذه المحركات تنفيذ حسابات بمماثلة فيزيائية للظواهر الطبيعية مما قد يسهل إنتاج صور أكثر واقعية. بينما ينتشر النظام الثاني بين المحركات المسموح لها بالتنازل عن صحة الحسابات الناتجة عنها. كمثال، أغلب بطاقات الإظهار الاستهلاكية لأجهزة الكمبيوتر الشخصي تعتمد على نظام الإسقاط المباشر (world-to-screen) لرسم الأجسام المكونة من مثلثات، حيث يتم رسم كل مثلث على حدة.

## طرق التوزيع والاستخدام

يمكن طرح المحرك للاستخدام بعدة أشكال. القائمة التالية تلخص الخيارات المتاحة:
* كود مفتوح المصدر: بحيث يمكن للمستفيد أن يعدل الكود كما يشاء، أو أن يستخدم المحرك المبني بالكود الأساسي.
* مكتبة برمجية مترجمة: أو تسمى بالصندوق الأسود. حيث تقدم هذه المكتبة وظائف برمجية محددة يتعامل معها المستخدم، بينما الحسابات الحقيقية تكون مخبأة وتتم دون أن تحتاج المستخدم أن يقلق نفسه بتفاصيلها.
* أدوات تنفيذية بسيطة مع واجهة برمجية: يكون المحرك في هذه الحالة ذا خط تنفيذ واضح ومحدد يتم اتباعه دائماً ولا يمكن تعديله جوهرياً. لإعطاء بعض المرونة، تقوم هذه الأدوات بتقديم نقاط وصل plug-in connections يمكن للمستخدم أن يستفيد منها ليدخل حساباته الخاصة ضمن الخط العام عن طريق كتابة بريمج صغير باستخدام عدة تطوير برمجية يقدمها المحرك.
* أدوات بواجهة استخدام فقط: تكون واجهة الاستخدام هي الوسيلة لتحديد مواصفات وطرق حساب الأجسام التي سيتم رسمها بالمحرك. ثم يقوم المحرك برسم هذه الأجسام طبقاً للمواصفات وبدون إدخال المستخدم في تفاصيل العمل.

## أمثلة

فيما يلي مثالين مختلفين يوضحان الفرق بين الوظائف التي يقوم بها محرك ثلاثي الأبعاد للإنتاج الفلمي وآخر موجه للرسم الفوري.

### مينتال راي

يعتمد طريقة التوزيع والاستخدام الثالثة (أدوات تنفيذية بسيطة مع واجهة برمجية). الواجهة البرمجية لمينتال راي مرنة بشكل يتيح للمبرمجين تنفيذ طيف واسع من طلبات المعلومات عن العالم المحيط بالنقطة التي يتم رسمها. مع إمكانية مفتوحة لدفع معلومات إضافية في المشهد يمكن استقبالها لاحقاً أثناء الرسم والتصرف بناءً على فحواها. يتم توزيع مينتال راي أيضاً بحسب الطريقة الرابعة من طرق التوزيع أعلاه، وهذا ما نراه في برامج مثل سوفت إيماج إكس إس آي ومايا ومؤخراً ثري دي ستوديو ماكس.

### جيم برايو

يعتمد طريقة التوزيع والاستخدام الثانية. يقدم أدوات لاختبار المظللات الفورية داخل برنامج ثري دي ستوديو ماكس ومايا، ومكتبات زمن تشغيل واسعة كالحسابات الرياضية وتحويل الموارد. يستهدف عدد من أنظمة التشغيل المختلفة.