أنت في قسم : بطاقة الفيديو
المسرع الرسومي
يجب هنا أن أركز على شئ مهم جداً وهو أن الرسومات بشكل عام تستهلك الكثير من طاقة وحدة المعالجة المركزية وكذلك الكثير من مساحة التخزين بالمقارنة مع النصوص العادية وهذا لأن على البطاقة الرسومية تحريك المئات من الميجابايتات من البيانات في الثانية الواحدة عبر أجزاء البطاقة أو من المعالج والذاكرة العشوائية للبطاقة الرسومية ، وكان الغالب في بدايات الحاسب الشخصي أن ما يعرض على الشاشة نصوص فقط لذا كانت عملية معالجة المخرجات تتم في المعالج ثم ترسل مباشرة لبطاقة الفيديو ، وكانت مهمة بطاقة الفيديو هي استقبال البيانات وإرسالها إلى الشاشة فقط ولكن مع دخول الرسومات والرسومات الثلاثية الأبعاد (النظام وندوز ) ، لم تعد قوة المعالج تكفي حيث أن الرسومات الكثيرة في حاسبات هذه الأيام تبطئ عمل المعالج المركزي.
هذا منظر ثلاثي الأبعاد من برنامج final reality الخاص بقياس سرعة أداء البطاقات الرسومية ويظهر فيه:
|
الآن أنظر لنفس الصورة ولكن هذه المرة مأخوذة ببطاقة 3dfx voodoo 3 المتطورة لا بد أنك لاحظت الفرق الشاسع ، فالجزء الذي كان يظهر أنه جسم بدون texture mapping ظهر أنه عبارة عن جسم شفاف وكذلك الأرضية أصبحت شفافة في الصورة الثانية أما ما كان يبدو أنه أرجل للجسم الذي في منتصف الغرفة فما هو إلا إضاءة لأرضية الغرفة هل رأيت كم تؤثر إمكانيات بطاقة العرض في الصورة المعروضة. |
لذا كان لا بد من بطاقة الرسوميات الحديثة أن تحوي على مسرعات رسومية * وما هي إلا عبارة عن وحدة معالجة مركزية شبيهة بالمعالج و لكنها مصممة خصيصاً لمعالجة الرسوميات ، توضع هذه المعالجات في بطاقة الفيديو و تقوم بأغلب العمليات الحسابية التي تتطلبها إخراج الرسومات إلى الشاشة ، ويكون دور المعالج المركزي في هذه الحالة هو إصدار أوامره للمسرع الرسومي فيقوم المسرع الرسومي بالقيام بعمليات المعالجة اللازمة ثم إرسال النتائج إلى الشاشة .
تعرف أن الألعاب الثلاثية الأبعاد تحتاج للكثير من الرسومات لذا فإن الفارق بين الحاسب المزود بمسرع رسومي وبين الحاسب الغير مزود به يبرز كثيراً عند تشغيل هذه الألعاب. إذا كان حاسبك غير مزود بمسرع رسومي فإن على المعالج القيام بكل العمل لوحده لذا سيكون الأداء بطئ ولن يكون اللعب ممتع.
تعرف أن الحاسب لا يتعامل إلا مع الأرقام وحتى يتعامل الحاسب مع الرسوم الثلاثية الأبعاد لا بد من أن يحولها لأرقام ويتم ذلك بتجزيء الأجسام الثلاثية الأبعاد إلى أجزاء صغيرة ( عادة مثلثات) حتى يستطيع الحاسب القيام بالحسابات على كل مثلث على حدة ثم يقوم بتصفية الشكل وإظهاره على الشاشة ، يقاس أداء البطاقة بعدد الوحدات (المثلثات) التي تستطيع رسمها على الشاشة في الثانية ، ويوجد في السوق حالياً بطاقات تبلغ سرعتها الملايين من المثلثات في الثانية.
لاحظ أن حساب سرعة الرسم بعدد المثلثات في الثانية لهو مقياس نظري لحد ما لأن الأجسام عادة ما يوجد عليها بعض الرسومات أو الألوان التي تحتاج لوقت إضافي لرسمها .
قلنا أن البطاقات الغير مزودة بالمسرع الرسومي تكون بطيئة لأنه في هذه الحالة على المعالج المركزي أن يقوم بجميع الحسابات اللازمة لإظهار الصورة بنفسه ، وذلك لأن على المعالج أن يرسم الصورة في الذاكرة العشوائية ثم يرسلها بالكامل للبطاقة عبر الناقل المحلي * وهذا معناه شغل الناقل المحلي كثيراً ، بينما في البطاقات المزودة بمعالج رسومي لا يتم نقل ولكن يأمر المعالج الرئيسي المعالج الرسومي برسم ما يريده ، لذا تكون العملية أسرع وأقل أشغالا للناقل المحلي ، لذا لا أنصحك بشراء بطاقة بدون مسرع رسومي جيد إلا إذا كانت السرعة غير مهمة بالنسبة لك ، و كان الحاسب لا يستخدم الرسوم أو الألعاب .
إن المسرع الرسومي هو المكون الأكثر أهمية في بطاقة الفيديو،لأنه كلما كانت المسرع أسرع كلما كان بإمكانه إنتاج الرسوم بسرعة أكبر وبالتالي أداء أعلى ، والمسرعات الرسومية بعضها أفضل من الآخر لا بل بعضها يسرع الرسوم ثنائية الأبعاد والبعض الآخر يسرع الرسوم الثلاثية الأبعاد والبعض يسرع كليهما .
لذا تلعب بطاقة الفيديو دوراً كبيراً في تحديد سرعة الحاسب حيث أن المسرع الرسومي يقوم بتخفيف عبئ كبير من أعباء المعالجة من المعالج المركزي وهو بهذا يعتبر كمعالج ثاني أو معالج مساعد * للمعالج الرئيسي * .
أوامر الرسومات
قلنا قبل قليل أن دور المعالج هو "إصدار أوامره للمسرع الرسومي" فما هي هذه الأوامر؟
هناك العديد من الأوامر التي يستطيع المعالج أن يرسلها للمسرع الرسومي ، ويجدر الذكر أن ذلك يعتمد على نوع المسرع الرسومي نفسه فكل مسرع رسومي يستطيع "فهم" مجموعة معينة من الأوامر تقل أو تكثر بحسب جودة هذا المسرع ، فكلما استطاع المسرع الرسومي القيام بأكثر عدد من العمليات كما زاد أداء بطاقة الفيديو بشكل عام. ليس هذا فقط إنما هناك اختلاف في سرعة المعالجات التي تدعم نفس العدد والنوع من الأوامر هذا لأن المسرعات المختلفة لها سرعات مختلفة في تنفيذ هذه الأوامر.
إن عدد الأوامر الرسومية الموجودة في المسرعات على مستوى العالم كبير ولكن يوجد عدد منها شائع وهو الذي سوف نتكلم عنه هنا ، بعد قراءتك لهذا الموضوع تستطيع فهم العبارات المبهمة التي تراها على علب البطاقات فائقة السرعة فتستطيع اختيار ما تراه مناسباً منها.
أولاً : أوامر الرسومات الثنائية الأبعاد:
bit block transfer : وهو يمكن المعالج من تحريك قطعة كاملة من البتات من مكان إلى آخر على الشاشة بأمر واحد بدلاً من إشغال المعالج بتحريكهم واحداً تلو الآخر. يكتفي المعالج بتحديد القطعة التي يود تحريكها وإلى أين يود فعل ذلك. أحياناً تختصر هذه الميزة بكلمة واحدة وهي "BitBlt "
drawing commands : أو يمكن تسميتها بالعربية " أوامر الرسم " وهي مجموعة من الأوامر التي تعطي للمسرع الرسومي القدرة على رسم الأشكال البسيطة مثل المربعات والدوائر والخطوط المستقيمة ، وطبعاً لا حاجة للقول أن المعالج عليه فقط تحديد نقطة البدء والانتهاء وسيعمل المسرع الرسومي على رسم الخط وهكذا .
sprites : هل سبق وأن رأيت لعبة يتحرك فيها "وحش" في أجزاء الشاشة يمناً ويساراً فوق وتحت؟ هذا هو الـ sprites ويوفر مشقة حساب كل هذا على وحدة المعالجة المركزية
windowing : في أنظمة التشغيل هذه الأيام يوجد الكثير من النوافذ فلماذا لا نجعل لرسم النوافذ أوامر رسومية فتصبح أسرع؟ إن هذا النوع من الأوامر الثنائية الأبعاد لهو أكثرها انتشاراً بين البطاقات. عندما تعمل البطاقة بهذا الأسلوب فإن البتات التي تمثل الشاشة لا تكون كلها في منطقة واحدة بل تقسم الذاكرة العشوائية لمناطق تمثل كلاً منها نافذة يتم التحكم بها بصورة مستقلة ، إن ذلك يسرع رسم النوافذ بصورة دراماتيكية .
ثانياً : أوامر الرسومات الثلاثية الأبعاد (في الحقيقة هي تقنيات وليست أوامر) :
texture mapping : وهي عملية إضافة الرسوم أو الصور على سطوح الأجسام لجعلها تبدو واقعية ، مثلاً إذا أردنا رسم منزل ثلاثي الأبعاد فإن عملية إضافة الرسوم تجعل منظر الشبابيك والأبواب تماثل الحقيقة وليست مجرد رسم أحادي اللون - أنظر الرسمة في الأعلى .
bilinear filtering : هي عملية تتم خلال عمل الـ texture mapping وتتلخص (بعد الكثير من التبسيط) في أن المسرع يختار اللون المناسب ليظهره عندما يحدث "ازدحام " للألوان في الرسوم الثلاثية الأبعاد مما يجعل الصورة أكثر واقعية .
perspective divide : وهي تقنية تجعل الأشياء البعيدة تبدو أصغر وذلك ضروري لكي يشعر المستخدم أن الصورة ثلاثية الأبعاد.
fogging : في الطبيعة تبدو الأشياء البعيدة أقل سطوعاً وأكثر ازرقاقا من الأشياء القريبة ، التقنية التي تمكن البطاقة من عمل هذا التأثير تسمى fogging ويمكن ترجمتها بالعربية إلى "إضافة الضباب" وتسمى أيضاً haze أو depth cueing .
chiaroscuro : وهي تتلخص في عملية رسم مواضع النور والظلال وهي من أكثر الأمور صعوبة في تصميم البطاقات .
shading : يسمح بتقليد الـ chiaroscuro ولكن بدرجة أقل واقعية .
gouraud shading : وهي عملية تحسين مستوى الـ shading لذا تسمى أيضاً smooth shading .
ray tracing : هذا الشيء يجعل الأمور معقدة كثيراً ، في هذه العملية يقوم الحاسب بحساب كمية الضوء التي تقع على كل جسم من أجسام الصورة من مختلف الزوايا ويحدد بذلك مجموع كمية الضوء الواقعة على كل جسم من مختلف الجهات ، لا يوجد بطاقة في السوق تدعم هذه الميزة لأن أقوى بطاقة في السوق يلزمها أن تكون أقوى بما لا يقل عن 50 مرة قوتها الآن حتى تستطيع عمل ذلك ، تستخدم هذه الميزة فقط في الرسومات الثابتة مثل تصميم رسومات المنازل وغيرها وليس في الصور المتحركة.
z-buffering : وتستخدم في حالة وجود جسمين واحد خلف الآخر فتمكن هذه الميزة البطاقة الرسومية من تحديد أي جسم يوجد قبل الآخر حتى تظهره وتخفي الجسم الذي يقع خلفه، وبذلك تمنع ظهور أجزاء من الأجسام التي لا يجب أن تظهر في الصورة.
alpha channel و alpha blending : وتتلخص في إمكانية إظهار الأجسام الشفافة ( الزجاج) . ومثال على ذلك الصورة التي رأيتها سابقاً والتي كان فيها اختلاف بين بطاقتي رسومات حيث ظهر الجسم الشفاف في إحدى البطاقتين كأنه جسم معتم .
double buffer : والـ buffer المقصود به ذاكرة الفيديو ، وكلمة double معناها الضعف ، أي أن معنى هذه العبارة هو "ذاكرة الفيديو المضاعفة" فما معنى ذلك ؟ ، تقسم بطاقة الرسومات الذاكرة العشوائية للفيديو إلى قسمين ، ويستعمل هذين القسمين لقراءة البيانات الموجودة فيه للمحول الرقمي التناظري بالتناوب ويقوم المعالج الرسومي كذلك بالكتابة عليه بالتناوب أيضاً والنتيجة هي أن كل قسم من القسمين يتعامل من أحد الطرفين إما المعالج الرسومي أو المحول الرقمي التناظري وليس مع كليهما (أنظر الرسم التوضيحي تحت )، وهذا يفيد كثيراً لأن أداء البطاقة في هذه الحالة لن يتأثر بوجود ذاكرة عشوائية أحادية المنفذ (أرجع لموضوع ذاكرة الفيديو )
الخطوة الأولى : المعالج الرسومي يكتب للقسم الثاني من الذاكرة العشوائية بينما القسم الأول يستعمل للقراءة من قبل المحول الرقمي التناظري DAC |
الخطوة الثانية : يستعمل القسم الثاني الآن كذاكرة للقراءة من قبل المحول الرقمي التناظري بينما يكتب المعالج الرسومي للقسم الأول وتستمر الحلقة |
إجراءات واجهة البرمجة API :
حتى يستطيع البرنامج الاستفادة من قدرات المسرعات الرسومية لا بد أن يكون قادراً على التفاهم معه ، وحتى يتفاهم معه لابد من أن يفهم كلا الطرفين (البرنامج والمسرع الرسومي) نفس "اللغة" ، ويتوفر لدينا عدد من اللغات في هذا العالم وهي :
Direct3D : وتعتبر هي اللغة القياسية
openGL