الأشكال الهندسية الإجرائية في جودو

من موسوعة حسوب


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

  • استخدام شبكة المصفوفة ArrayMesh
  • استخدام أداة بيانات الشبكة MeshDataTool
  • استخدام أداة السطح SurfaceTool
  • استخدام الشبكة المباشرة ImmediateMesh

ملاحظة: كل عمليات إنشاء الأشكال الهندسية الإجرائية الموصوفة هنا تعمل على المعالج. لا تدعم جودو إنشاء الأشكال الهندسية على كرت الشاشة بعد.

ما هي الأشكال الهندسية؟

الأشكال الهندسية هي طريقة منمقة لقول الأشكال. تمثل الأشكال الهندسية عاجة في رسوميات الحاسوب عن طريق مصفوفة أماكن تدعى "الرؤوس". تمثل الأشكال الهندسية في جودو بالشبكة.

ما هي الشبكة؟

العديد من الأشياء في جودو لديها شبكة mesh في اسمها: Mesh وArrayMesh وMeshInstance3D وMultiMesh وMultiMeshInstance3D. مع العلم أنها كلها متشابهة لكن كل واحدة لديها استخدام معين.

إن الشبكات ومصفوفة الشبكات هي موارد ترسم باستخدام عقدة MeshInstance3D. لا يمكن إضافة الموارد مثل الشبكات ومصفوفة الشبكات إلى المشهد مباشرة. تمثل MeshInstance3D نسخة واحدة من الشبكة في المشهد الخاص بك. يمكن إعادة استخدام شبكة واحدة في العديد من MeshInstance3D لرسمها في عدة أماكن من المشهد باستخدام مواد وتحولات مختلفة (تدرج، دوران/ توضّع إلخ).

من المفيد استخدام MultiMesh مع MultiMeshInstance3D إذا أردت رسم نفس الكائن عدة مرات. ترسم MultiMeshInstance3D الشبكات آلاف المرات بدون إرهاق العتاد عن طريق استغلال استنساخ العتاد. من سلبيات استخدام MultiMeshInstance3D هي أن سطح الشبكة يقتصر فقط على نوع واحد من المواد لكل النسخ. تستعمل مصفوفة نسخ لتخزين الألوان المختلفة والتحولات لكل نسخةـ ولكن كل النسخ للسطح هي من نفس المادة.

ما الشبكة

تتكون الشبكة من سطح واحد أو أكثر، ويتكون السطح من مصفوفة مؤلفة من مصفوفات فرعية تحتوي الرؤوس و normals و إلخ. تكون بالعادة عملية إنشاء الأسطح والشبكات مخفية عن المستخدم في RenderingServer ولكن مع مصفوفة الشبكة يمكن للمستخدم إنشاء الشبكة يدويًا عن طريق تمرير مصفوفة تحتوي معلومات السطح.

السطوح

لدى كل سطح مادة خاصة به. يمكن إعادة ضبط المواد لكل سطوح الشبكة عند استخدام MeshInstance3D باستخدام خاصية material_override.

مصفوفة السطح

إن مصفوفة السطوح هي مصفوفة طول ArrayMesh.ARRAY_MAX. كل مكان في المصفوفة يكون فيه مصفوفة فرعية تحتوي على معلومات لكل رأس. مثلًا تكون المصفوفة الموضوعة في ArrayMesh.ARRAY_NORMAL هي  PackedVector3Arrayمن الرأس العادي. راجع Mesh.ArrayType لمزيد من المعلومات.

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

الأدوات

تقدم جودو العديد من الطرق للوصول والعمل على الأشكال الهندسية. سنقدم المزيد من المعلومات عن كل أداة في الدليل التالي.

مصفوفة الشبكة

تزيد مصفوفة الشبكة العديد من خاصيات المساعدة وبشكل خاص قابلية بناء شبكة سطح من خلال السكربت.

لمزيد من المعلومات عن مصفوفة الشبكة راجع دليل مصفوفة الشبكة

أداة بيانات الشبكة

إن أداة بيانات الشبكة هو مورد يحول بيانات الشبكة إلى مصفوفات رؤوس ووجوه وحواف يمكن تعديلها وقت التنفيذ.

لمزيد من المعلومات عن أداة بيانات الشبكة راجع دليل أداة بيانات الشبكة

أداة السطح

تسمح أداة السطح إنشاء الشبكات باستخدام واجهة نمط OpenGL 1.x المباشر.

لمزيد من المعلومات عن أداة السطح راجع دليل أداة السطح

الشبكة المباشرة

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

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

لمزيد من المعلومات عن الشبكة المباشرة راجع دليل الشبكة المباشرة.

ماذا يجب أن استعمل؟

يعتمد ذلك على مقاربتك على ماذا تريد أن تعمل وما نوع الإجراء المريح لك.

تفيد كل من أداة السطح ومصفوفة الشبكة في إنشاء أشكال هندسية ساكنة (شبكات) لا تتغير مع الوقت.

استخدام شبكة المصفوفة أسرع قليلًا من استخدام أداة السطح، ولكن واجهة برمجة التطبيقات هي أصعب. إضافة أن أداة السطح لديها توابع مفيدة أقل مثل generate_normals()‎‏‏ وindex()‎.

تعيد الشبكة المباشرة إنشاء الشبكة كل إطار، لذا هي أبطأ من شبكة المصفوفة أو أداة السطح. ولكن تقدم واجهة أسهل إذا احتجت أن تتغير الأشكال الهندسية كل إطار ويمكن أن تكون أسرع من إنشاء شبكة مصفوفة كل إطار.

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

مصادر