أوامر الرسومات
قلنا قبل قليل أن دور المعالج هو "إصدار أوامره للمسرع الرسومي" فما هي هذه الأوامر؟
هناك العديد من الأوامر التي يستطيع المعالج أن يرسلها للمسرع الرسومي ، ويجدر الذكر أن ذلك يعتمد على نوع المسرع الرسومي نفسه فكل مسرع رسومي يستطيع "فهم" مجموعة معينة من الأوامر تقل أو تكثر بحسب جودة هذا المسرع ، فكلما استطاع المسرع الرسومي القيام بأكثر عدد من العمليات كما زاد أداء بطاقة الفيديو بشكل عام. ليس هذا فقط إنما هناك اختلاف في سرعة المعالجات التي تدعم نفس العدد والنوع من الأوامر هذا لأن المسرعات المختلفة لها سرعات مختلفة في تنفيذ هذه الأوامر.
إن عدد الأوامر الرسومية الموجودة في المسرعات على مستوى العالم كبير ولكن يوجد عدد منها شائع وهو الذي سوف نتكلم عنه هنا ، بعد قراءتك لهذا الموضوع تستطيع فهم العبارات المبهمة التي تراها على علب البطاقات فائقة السرعة فتستطيع اختيار ما تراه مناسباً منها.
أولاً : أوامر الرسومات الثنائية الأبعاد:
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 معناها الضعف ، أي أن معنى هذه العبارة هو "ذاكرة الفيديو المضاعفة" فما معنى ذلك ؟ ، تقسم بطاقة الرسومات الذاكرة العشوائية للفيديو إلى قسمين ، ويستعمل هذين القسمين لقراءة البيانات الموجودة فيه للمحول الرقمي التناظري بالتناوب ويقوم المعالج الرسومي كذلك بالكتابة عليه بالتناوب أيضاً والنتيجة هي أن كل قسم من القسمين يتعامل من أحد الطرفين إما المعالج الرسومي أو المحول الرقمي التناظري وليس مع كليهما (أنظر الرسم التوضيحي تحت )، وهذا يفيد كثيراً لأن أداء البطاقة في هذه الحالة لن يتأثر بوجود ذاكرة عشوائية أحادية المنفذ (أرجع لموضوع ذاكرة الفيديو )
This image has been resized. Click this bar to view the full image. The original image is sized 622x329 and weights 23KB.
إجراءات واجهة البرمجةAPI :
حتى يستطيع البرنامج الاستفادة من قدرات المسرعات الرسومية لا بد أن يكون قادراً على التفاهم معه ، وحتى يتفاهم معه لابد من أن يفهم كلا الطرفين (البرنامج والمسرع الرسومي) نفس "اللغة" ، ويتوفر لدينا عدد من اللغات في هذا العالم وهي :
Direct3D : وتعتبر هي اللغة القياسية
openGL