مخطط المشهد

بنية OpenSceneGraph ، وهي واجهة برمجة تطبيقات رسومية ثلاثية الأبعاد مفتوحة المصدر تدعم تنفيذ الرسم البياني للمشاهد الغني بالميزات والمعتمد على نطاق واسع.

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

في أدوات تحرير الرسومات

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

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

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

في الألعاب والتطبيقات ثلاثية الأبعاد

تُعدّ مخططات المشاهد مفيدة للألعاب الحديثة التي تستخدم رسومات ثلاثية الأبعاد وعوالم أو مستويات متزايدة الحجم. في مثل هذه التطبيقات، تمثل العقد في مخطط المشهد (عمومًا) الكيانات أو الكائنات الموجودة في المشهد.

على سبيل المثال، قد تُحدد لعبة ما علاقة منطقية بين الفارس والحصان بحيث يُعتبر الفارس امتدادًا للحصان. سيحتوي مخطط المشهد على عقدة "حصان" مُرتبطة بعقدة "فارس".

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

في هذه التطبيقات الضخمة، تُعدّ متطلبات الذاكرة من الاعتبارات الرئيسية عند تصميم مخطط المشهد. لهذا السبب، تستخدم العديد من أنظمة مخططات المشاهد الضخمة تقنية نسخ العناصر الهندسية لتقليل استهلاك الذاكرة وزيادة السرعة. في المثال المذكور أعلاه، يُمثّل كل فارس عقدة مشهد منفصلة، ​​ولكن يتم نسخ التمثيل الرسومي للفارس (المكوّن من شبكة ثلاثية الأبعاد، وقوام، ومواد، ومؤثرات بصرية). هذا يعني الاحتفاظ بنسخة واحدة فقط من البيانات، والتي يُشار إليها بعد ذلك من قِبل أي عقدة "فارس" في مخطط المشهد. يُتيح ذلك تقليل استهلاك الذاكرة وزيادة السرعة، حيث لا يلزم تكرار بيانات المظهر عند إنشاء عقدة فارس جديدة.

تطبيق

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

العمليات والإرسال

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

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

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

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

اجتياز

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

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

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

مخططات المشهد وتسلسلات حجم الإحاطة (BVHs)

تُعدّ التسلسلات الهرمية للأحجام المحيطة (BVHs) مفيدةً للعديد من المهام، بما في ذلك الاستبعاد الفعال وتسريع اكتشاف التصادم بين الكائنات. التسلسل الهرمي للأحجام المحيطة هو بنية مكانية، ولكنه لا يشترط أن يقسم الهندسة (انظر التقسيم المكاني أدناه).

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

تُعدّ هياكل BVH مفيدة لتسريع عملية اكتشاف التصادم بين الكائنات. فإذا لم يتقاطع حجم حدود الكائن مع حجم أعلى في الشجرة، فلن يتقاطع مع أي كائن أسفل تلك العقدة (وبالتالي يتم رفضها جميعًا بسرعة كبيرة).

توجد بعض أوجه التشابه بين مخططات BVH ومخططات المشاهد. يمكن بسهولة تكييف مخطط المشهد ليشمل/يصبح مخطط BVH - إذا كان لكل عقدة وحدة تخزين مرتبطة بها أو إذا تمت إضافة "عقدة مرتبطة" مصممة خصيصًا في موقع مناسب في التسلسل الهرمي. قد لا يكون هذا هو العرض النموذجي لمخطط المشهد، ولكن هناك فوائد لإدراج مخطط BVH في مخطط المشهد.

مخططات المشاهد والتقسيم المكاني

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

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

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

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

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

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

المعايير

فيغز

كانت PHIGS أول مواصفة تجارية لرسومات المشاهد، وأصبحت معيارًا معتمدًا من قبل المعهد الوطني الأمريكي للمعايير (ANSI) عام 1988. وقدّم مورّدو أجهزة يونكس تطبيقاتٍ متباينة لها. ويبدو أن نظام HOOPS للرسومات ثلاثية الأبعاد كان أول مكتبة تجارية لرسومات المشاهد تُقدّمها شركة برمجيات واحدة. وقد صُمّم للعمل على واجهات ثنائية وثلاثية الأبعاد متباينة منخفضة المستوى، حيث اكتملت أول نسخة إنتاجية رئيسية (الإصدار 3.0) عام 1991.

SGI

أصدرت شركة سيليكون غرافيكس (SGI) برنامج OpenGL Performer، أو كما يُعرف اختصارًا بـ Performer، عام 1991، والذي شكّل نظام رسم المشاهد الرئيسي لمعظم منتجات SGI اللاحقة. وفي عام 1992، أصدرت SGI برنامج IRIS Inventor 1.0، وهو برنامج رسم مشاهد عالي المستوى مبني على Performer. تبعه برنامج Open Inventor عام 1994، وهو نسخة مطورة أخرى من برنامج رسم المشاهد عالي المستوى مبنية على إصدارات أحدث من Performer. يمكنكم الاطلاع على المزيد من مكتبات رسم المشاهد ثلاثية الأبعاد في قسم: واجهات برمجة تطبيقات رسم المشاهد ثلاثية الأبعاد .

ثلاثي الأبعاد

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

انظر أيضاً

مراجع

الكتب

  • ليلر، ويليام وميري، جيم (1996) ثلاثي الأبعاد مع حلقات ، أديسون-ويسلي
  • فيرنيكي، جوزي (1994) دليل المخترع: برمجة الرسومات ثلاثية الأبعاد الموجهة للكائنات باستخدام أوبن إنفينتور ، أديسون-ويسلي، ISBN 0-201-62495-8(الإصدار 2)

مقالات