دايركت ثري دي

تاريخ

في عام 1992 افتتح سيرفان كوينديان شركة باسم ريندر مورفيكس (بالإنجليزية: RenderMorphics) قامت بتطوير مكتبة برمجة رسوميات ثلاثية الأبعاد تدعى رياليتي لاب Reality Lab بهدف تخديم احتياجات قطاعي الطب والرسم الهندسي. بعد الإصدار الثاني من المكتبة وفي فبراير 1995 تقدمت مايكروسوفت لشرائها وتوظيف سيرفان لتطوير مكتبة برمجة رسوميات ثلاثية الأبعاد لنظام تشغيل ويندوز 95، لتكون بذلك الإصدار الأول من دايركت ثري دي، والذي طُرح في الإصدار الثاني والثالث من دايركت إكس.
عبر إصداراته الأولى، قدم دايركت ثري دي واجهتـَيْ برمجة فيما يدعى بالبرمجة بالنمط المُصان (بالإنجليزية: Retained Mode)، والنمط المباشر (بالإنجليزية: Immediate Mode). حيث يعتبر النمط الأول الطريقة المبسطة لبرمجة دايركت ثري دي ويعمل وفقاً لمخطط مشهد مبنياً بالاعتماد على تقنية كوم COM، إلا أنه لم يلقَ رواجاً بين المبرمجين الذين طمحوا لمزيد من التحكم، فابتعدت مايكروسوفت عن تحديثه بُعَيْد الإصدار الثالث من دايركت إكس. أما النمط المباشر فقد اعتمد على مبدأ ملء ما يدعى بمخزن التنفيذ (بالإنجليزية: Execute Buffer) بتعليمات الرسم التي يريدها المبرمج. حيث طمحت مايكروسوفت أن يقوم كُتـَّاب برامج تشغيل بطاقات العرض بدعم وتفسير التعليمات في مخزن التنفيذ مباشرة للحصول على أسرع أداء. إلا أن التعامل مع مخازن التنفيذ كان مربكاً للعديد من المبرمجين، مما منع من اعتناق دايركت ثري دي، ليقود الوضع لمطالبة مايكروسوفت لاعتماد أوبن جي إل كمكتبة رئيسة للتعامل مع الرسوميات ثلاثية الأبعاد لكل من الحاسبات الشخصية ومحطات العمل. إلا أن مايكروسوفت استمرت في تحسين دايركت ثري دي ليكون بذلك منافساً لأوبن جي إل ومكتبة جلايد الخاصة بشركة ثري دي إف إكس. تم تسليم العمل على النمط المباشر من دايركت ثري دي لفريق من المبرمجين في ريدموند، بينما استمر فريق سيرفان في تطوير النمط المصان.

إصدارات

يبقى رقم إصدار دايركت ثري دي مرتبطاً برقم إصدار مكتبة دايركت إكس الشاملة، لذلك فإن أرقام الإصدارات المذكورة هنا هي أرقام إصدار مكتبة دايركت إكس والتي حَوَت دايركت ثري دي من الإصدار الثاني (دايركت إكس 2.0):

الثاني والثالث

ظهر دايركت ثري دي لأول مرة مع الإصدار الثاني من دايركت إكس في 2 يونيو 1996، وطرأت عليه تغييرات طفيفة في الإصدار الثالث في نفس العام. حوى الإصدار واجهتي البرمجة بالنمط المباشر والنمط المصان. يتطابق النمط المصان مع ما يدعى اليوم بمحرك رسوميات ثلاثية الأبعاد، حيث أنه حوى وظائف تحميل المشاهد والإكساءات والتحريك والإضاءة والظلال وإدارة المشهد بمستوى عالي.
في هذا الإصدار ظهرت هيئة ملفات دايركت ثري دي والتي سُميت فيما بعد بملفات إكس بسبب كونها تحمل الامتداد (.x). كما اقترنت مع مجموعة أدوات مساعدة في عدة التطوير تسمح للمبرمجين بتحويل ملفات ثري دي ستوديو (.3ds) إلى هيئة ملفات إكس.
بُني النمط المصان كطبقة فوق النمط المباشر، والذي يعمل من خلال دايركت درو لإظهار الصورة بشكل نهائي على الشاشة ضمن الأنماط التي يدعمها دايركت درو.
من الجدير بالذكر أن هذا الإصدار من دايركت ثري دي لا يدعم معالجات الرسوميات وذلك لانعدامها من سوق المستهلك آنذاك؛ لذا كافة حسابات الرسم كانت تتم على المعالج المركزي. دعم دايركت ثري دي الرسم بعمق لوني 8-بت (باستخدام لوح لوني، أو تدريجات الأبيض والأسود)، وعمق 16-بت وَ 24-بت.
من أشهر أمثلة دايركت ثري دي التي طُرحت مع عدة تطوير دايركت إكس هو مثال روكيم (Rockem)، وهو لعبة قتال ثلاثية الأبعاد بين ربوتين خصمين في حلبة دائرية تحمل شعار دايركت إكس النووي. استمر هذا المثال في مرافقة عدة التطوير حتى آخر ظهور له في الإصدار 5.2، وقد بُرمج باستخدام النمط المصان من دايركت ثري دي، ليظهر كيفية الاستفادة من خدمات التحريك والإضاءة والكاميرا. المجسمات يتم تحميلها من ملفات بهيئة دايركت ثري دي (.x) وتحوي المجسمات وحركاتها. تستخدم اللعبة موسيقى ميدي وأصوات بهيئة ويف (.wav)، وتعتمد على دايركت درو لإعداد النافذة في نمط عرض ملء الشاشة. من الجدير بالذكر أن الإكساءات في اللعبة محفوظة بدقة لونية 8-بت بالاعتماد على لوح ألوان، وهو ما لم يعد مدعوماً في معالجات الرسوميات الحديثة.

الخامس

إصدار يوليو 1997. تم استبدال مخازن التنفيذ بأوامر رسم مباشرة (DrawPrimitive) في نمط الرسم المباشر، مما يعتبر نقلة نوعية عن أسلوب الرسم السابق والذي كان مصدر إزعاج للعديد من المبرمجين. كما استقدَمَ نمطُ الرسم المصان إمكانية دمج الألوان وتحريك الأجسام بسلاسة من موقع لآخر وتحوير المجسمات إضافة إلى تحويلات أخرى. استقدم النمط المصان أيضاً ميزة المجسمات التدريجية (بالإنجليزية: progressive meshes) التي تتيح للمبرمج زيادة دقة وعدد السطوح في المجسم وفقاً لبعده عن عين الناظر أو زيادة التفاصيل تدريجياً بينما يتم تحميل المجسم عبر الإنترنت.

السادس

إصدار أغسطس 1998. تم استقدام مزايا عديدة لدعم معالجات الرسوميات المعاصرة، كالإكساء المتعدد ومخزن الرؤوس ومخزن ستنسل وتخزين دبليو (بالإنجليزية: W Buffering)، وحسابات تحويل مسرعة بالاستفادة من تعليمات المعالجات المتقدمة مثل إس إس إي SSE وثري دي ناو 3DNow!، إضافة إلى مدير ذاكرة إكساءات اختياري لتبسيط البرمجة واستقدام هيئة ملفات دي دي إس (.dds). كما أن هذا الإصدار احتوى على مزايا حصلت مايكروسوفت على ترخيصها من شركات العتاد مقابل طرح هذه المزايا على العموم من خلال دايركت ثري دي. من أبرز هذه المزايا ضغط الإكساءات الذي طورته شركة إس3 S3 والذي أُطلق عليه اسم دي إكس تي سي (بالإنجليزية: DXTC) ليتماشى مع تسمية دايركت إكس. من المزايا المرخصة الأخرى ميزة إظهار النتوءات من شركة ترايتيك (بالإنجليزية: TriTech). بهذا الأسلوب ضمنت مايكروسوفت أن تدعم شركات العتاد كافة مزايا دايركت ثري دي في أقرب فرصة، مما قدّم الصناعة بسرعة لم تكن ممكنة بحضور هيئة مراجعة مواصفات أوبن جي إل.
احتوى الإصدار السادس أيضاً على مصيّر مرجعي يستخدم لمقارنة حسابات معالج الرسوميات مع حسابات دايركت ثري دي كما يجب أن تكون، وذلك لمساعدة المبرمجين على كشف أخطاء برامج تشغيل بطاقات العرض.
بالنسبة للنمط المصان، فإن التطويرات انحصرت في تحسين الواجهات البرمجية وإعطاء المبرمج المزيد من الوصولية لمعلومات الرسم والتحريك، إضافة إلى اعتماد المزيد من خصائص النمط المباشر في برمجة النمط المصان. في هذا الإصدار أيضاً تمت إزالة هذا النمط من مكتبة دايركت إكس الأساسية (بالإنجليزية: DirectX Foundation) ونُقِل إلى مكتبة وسائط دايركت إكس (بالإنجليزية: DirectX Media) إلى جانب دايركت شو ودايركت ميوزيك.

الثامن

إصدار نوفمبر 2000. تميز باستقدام برمجة المظللات لكل من الرؤوس والبكسلات باستخدام لغة تجميع المظللات التي طورتها مايكروسوفت، وقد احتوت عدة التطوير على مترجم خاص لتحويل نص المظلل إلى تعليمات رمزية يستقبلها برنامج تشغيل بطاقة العرض وينفذها على رؤوس المجسمات أو البكسلات.
بالرغم من مرونة مجموعة تعليمات مظلل البكسلات في دايركت ثري دي 8، إلا أن الاعتماد على بعض إعدادات خط المعالجة الثابت بقي ضرورياً مما سبب بعض الإرباك للمبرمجين.
يعتبر استقدام المظللات نقلة نوعية عن أسلوب أوبن جي إل في ضبط الرسم عن طريق الكم الهائل من الإعدادات. دَعَم دايركت ثري دي 8 وَ 8.1 الجيل الأول من المظللات للإصدار 1.1 من مظلل الرؤوس و 1.4 من مظلل البكسلات.
في هذا الإصدار أيضاً أزيل الارتباط مع دايركت درو تماماً، ونُقلت بعض العمليات إلى دايركت ثري دي 8.0 (كنسخ البكسلات بين سطوح الرسم المختلفة) وطُرحت تسهيلات لإنجاز مهام الرسم ثنائي البعد من خلال دايركت ثري دي (باستخدام وحدة ID3DXSprite من مكتبة امتدادات دايركت ثري دي).
بجانب التطويرات أعلاه، أضيفت إمكانية الرسم على سطوح متعددة العينات (بالإنجليزية: multisampling)، ورسم الأشكال الشبحية النقطية، واستخدام الإكساءات الحجمية.

التاسع إل

طُرح هذا الامتداد على ويندوز فيستا برقم 9L لمعاونة تطبيقات دايركت ثري دي 9 للعمل على نظام ويندوز لبرامج تشغيل العرض (بالإنجليزية: Windows Display Driver Model) أو WDDM، والمستخدم في رسم سطح مكتب آيرو (بالإنجليزية: Windows Aero). كما أن هذا الامتداد استـُخدم كوسيط لتحويل أوامر أوبن جي إل إلى أوامر دايركت ثري دي ورسمها عن طريق دايركت ثري دي في النهاية دون الحاجة لوجود برنامج تشغيل أوبن جي إل. دُعيت هذه الامتدادات بـقاعدة رسوميات ويندوز 1.0.

التاسع إكس

إصدار خاص من دايركت ثري دي 9.0 على ويندوز 7 برقم 9.0Ex. يتيح هذا النظام إمكانية استخدام ذاكرة عرض افتراضية مدعومة بذاكرة الحاسوب الرئيسية، وتوقيت ومقاطعة أوامر الرسم، ومشاركة سطوح الرسم عبر عدة تطبيقات مستقلة.

التاسع المُدار

نشرت مايكروسوفت طبقة إضافية مُدارة من دايركت ثري دي 9 ضمن حزمة دايركت إكس المدار (بالإنجليزية: Managed DirectX) تتيح لمستخدمي لغات دوت نت الاستفادة من خدمات دايركت ثري دي في برامجهم. الإصدار الأول من هذه الطبقة (برقم MDX 1.1) عمل بنسبة 40% من الأداء الكامل لدايركت ثري دي، والممكن تحقيقه عن طريق استخدام دايركت ثري دي من خلال سي بلس بلس. في الإصدارات اللاحقة من عدة التطوير، طرح الإصدار الثاني من الطبقة المدارة بنسخة بيتا (MDX 2.0 Beta). صرّح فريق تطوير دايركت إكس آنذاك أن هذا الإصدار يحقق أداء لا يقل عن 98% منه في برامج السي والسي بلس بلس الاعتيادية. يُعتبر توم ميلر من أبرز أسماء العاملين في الطبقة المدارة من دايركت إكس. توقف تطوير دايركت إكس المدار عند الإصدار الثاني بيتا، واستُبدل بإطار عمل إكس إن إيه.

الثاني عشر

إصدار 29 يوليوز 2015 طرح مع ويندوز 10

المعمارية

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

الواجهة البرمجية لمبرمجي التطبيقات

تمثلها عدة التطوير البرمجية التي تـُنشر للمبرمجين مجاناً. تتألف عدة التطوير من الملفات اللازمة للمبرمج كي يحقق نداءات لدايركت ثري دي ويستخدم مكوناته، هذه الملفات هي ملفات الترويسة (h.) والمكتبات المترجمة (lib.) لكتابة التطبيقات بلغة سي بلس بلس. إضافة إلى ذلك تشمل عدة التطوير وثائق تعليمية ومرجعية وعدد كبير من الأمثلة التطبيقية.

الواجهة البرمجية لمبرمجي برامج تشغيل بطاقات العرض

تمثلها عدة تطوير برامج التشغيل (DDK) التي تـُنشر لمبرمجي برامج التشغيل للتعامل مع أوامر دايركت ثري دي. يتأثر هذا الجزء كثيراً باختلاف إصدارات ويندوز. وقد تعرض لتطويرات جذرية مع استقدام نموذج ويندوز لبرامج تشغيل العرض WDDM الذي طُرح مع ويندوز فيستا وويندوز 7؛ أهم التطويرات أن برنامج التشغيل أصبح يعمل في مستوى المستخدم بدلاً من مستوى النواة كما كان الحال سابقاً في ويندوز إكس بي وما قبله. بهذه الطريقة فإن أخطاء برنامج التشغيل لم تعُد قاتلة أو تتسبب بشاشة الموت الزرقاء كما كان الوضع سابقاً، مما يعني مزيداً من الثبات لنظام التشغيل ككل.

خط المعالجة البرمجي

يقدم بديلاً لمبرمجي التطبيقات لإنجاز الحسابات حتى وإن لم تكن مدعومة على معالج الرسوميات، وذلك عن طريق إنجازها على المعالج المركزي. يشمل خط المعالجة البرمجي في دايركت ثري دي على كافة حسابات تحويل الرؤوس وإضاءتها ومظللات الرؤوس وحسابات رؤوس خط المعالجة الثابت. للمبرمج حرية اختيار أي الحسابات تنفذ على معالج الرسوميات، وأيها ينفذ على خط المعالجة البرمجي. إضافة لذلك، يحوي خط المعالجة البرمجي عدد من المصيـّرات البرمجية أيضاً. بعضها مقبول الأداء (كمصير درجات الرمادي ومصير وارب الذي أضيف في الإصدار الحادي عشر) وبعضها الآخر فقط للمرجعية والتحقق من صحة البرنامج (المصير المرجعي (بالإنجليزية: Reference Rasterizer)). في أغلب الحالات يلاحظ أن أداء خط المعالجة البرمجي أبطأ من معالج الرسوميات، إلا أن مايكروسوفت تستمر في تحسين أداء خط المعالجة البرمجي عن طريق الاستفادة القصوى من قدرات المعالج المركزي وتعليماته المتقدمة (مثل SSE و 3DNow!).

خط المعالجة

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

تجميع المدخلات

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

معالجة الرؤوس والمجسم

تقوم هذه الخطوة بتحويل مواقع الرؤوس لتصبح في ما يدعى بنظام إحداثيات القص (بالإنجليزية: clip space) حيث تتراوح إحداثيات الرؤوس في المجال [1،1-]، وأي إحداثيات خارجة عن هذا المجال تقع خارج سطح الرسم ويتم قصها في الخطوة التالية في خط المعالجة (لذلك يدعى بنظام إحداثيات القص).
بدءاً من الإصدار الثامن، أصبحت هذه الخطوة قابلة للبرمجة المباشرة باستخدام مظلل الرؤوس، على أن يقوم المظلل في النهاية بتخريج إحداثي الرأس في نظام إحداثيات القص.
بدءاً من الإصدار العاشر، أُتبع مظلل الرؤوس بمظلل المجسم (بالإنجليزية: geometry shader). والذي يتميز عن مظلل الرؤوس بإمكانية توليد مجسم كامل انطلاقاً من عدد محدود من الرؤوس المكونة لمضلعات أو قطع مستقيمة أو نقاط (كمثال، توليد مجسم شجرة انطلاقاً من سلسلة رؤوس تمثل هيكل الشجرة). أيضاً يزيل الإصدار العاشر من دايركت ثري دي ضرورة تخريج موقع الرأس في نظام إحداثيات القص إن كانت نتائج المظلل ستذهب إلى خطوة تخريج الدفق في خط المعالجة بدلاً من خطوة الرسترة أو التصيير.

تخريج الدفق

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

رسترة البكسلات

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

معالجة البكسلات

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

دمج الخرج

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

أنماط العرض

يستطيع المبرمج أن يستخدم دايركت ثري دي لعرض المحتوى الثلاثي الأبعاد في نافذة في برنامجه أو أن يجعل البرنامج يحتل كامل مساحة الشاشة.

ضمن نافذة

في هذا النمط يتم إظهار نتائج الرسم ضمن مربع نافذة يحددها المبرمج في برنامجه. من الأمثلة على هذا النمط نوافذ الرؤية في برنامج ثري دي ستوديو ماكس. في أنظمة التشغيل السابقة لويندوز فيستا، يتم إظهار كل لقطة في النافذة عن طريق تعليمة نقل وتحجيم بيت بليت بدلاً من عملية قلب الصفحة (بالإنجليزية: page flip) وذلك لأن الإظهار لا يشمل كامل الشاشة، وبالتالي لا يمكن قلب كافة صفحة الشاشة.

كامل الشاشة

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

مترجم المظللات (إف إكس سي)

أداة ملحقة مع عدة تطوير دايركت إكس يمكن استدعاؤها من سطر الأوامر لترجمة المظللات المحفوظة في ملفات (fx.) أو غيرها.