النص ثلاثي الأبعاد في جودو

من موسوعة حسوب
مراجعة 11:34، 25 نوفمبر 2023 بواسطة Naser-dakhel (نقاش | مساهمات) (إضافة الصفحة)
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)

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

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

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

Label3D


تتصرف Label3D مثل عقدة العنوان ولمن في الفضاء ثلاثي البعد، وعلى عكس عقدة العنوان لا ترث عقدة Label3D خاصيات سمة واجهة المستخدم الرسومية. ولكن مظهرها يبقى قابل للتعديل ويستخدم نفس المورد الفرعي نوع الخط وعقدة التحكم (بما فيه دعم تصيير الخط Multi-Channel Signed Distance Font أو اختصارًا MSDF).

الميزات

  • إن Label3D أسرع في الإنشاء من شبكة النص TextMesh. على الرغم من كونهما يستخدمان طرق التخزين المؤقت لتصيير الحروف الجديدة مرة واحدة، تكون Label3D أسرع في إعادة الإنشاء خاصة للنصوص الطويلة. لتفادي التشويش أثناء اللعب على المعالجات الضعيفة أو الهواتف.
  • يمكن أن يستخدم Label3D الخطوط الديناميكية وخطوط الخارطة النقطية bitmap (مع أو بدون MSDF أو mipmaps). هذا يجعلها أكثر مرونة في هذه الناحية مقارنة بشبكة النص، خاصة لتصيير الخطوط مع الحدود المتقاطعة.

راجع أيضًا: راجع استخدام الخطوط لقواعد عن ضبط استيرادات الخطوط.

المحدوديات

لدى Label3D تفاعل محدود مع البيئة ثلاثية البعد افتراضيًا. إذ يمكن حجبها من الأشكال الهندسية وإنارتها باستخدام منابع ضوئية إذا تم تفعيل خاصية تظليل. ولكنها لا تنشر ظلال حتى لو كان خيار نشر الظل مفعلًا في خاصيات GeometryInstance3D الخاص بالعقدة Label3D. لأن العقدة تُنشئ داخليًا شبكة رباعية quad mesh (رمز glyph واحد لكل رباعي) مع ملمس شفاف ولديها نفس محدوديات Sprite3D. تظهر مشاكل ترتيب الشفافية عندما تتراكب عدة Label3D فوق بعضها خاصة إذا كان لديها حدود خارجية.

يمكن تفادي ذلك عن طريق ضبط نمط شفافية Label3D إلى Alpha Cut، على حساب تصيير نص أقل سلاسة. يحفظ نمط الشفافية Opaque Pre-Pass سلاسة النص مع السماح للعقدة Label3D بنشر الظلال، ولكن بعض مشاكل ترتيب الشفافية ستبقى موجودة.

راجع قسم ترتيب الشفافية في محدوديات التصيير ثلاثي البعد لمزيد من المعلومات.

TextMesh


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

هذا مثال عن ملمس وكيفية تطبيقه على الشبكة. يمكنك استخدام الملمس التالي كمرجع لإنشاء خريطة UV الخاصة بالشبكة:

الميزات

لدى شبكة النص بعض الميزات أكثر من Label3D

  • تستخدم شبكة النص الملمس texture لتعديل لون النص لكل طرف
  • يكون للأشكال الهندسية لشبكة النص عمق حقيقي مما يعطي الأحرف شكل ثلاثي البعد.
  • يمكن أن يكون لشبكة النص ظلال shaders مخصصة على عكس Label3D  

المحدوديات

هناك بعض المحدوديات لشبكة النص

  • لا يوجد دعم للحدود الخارجية على عكس Label3D، ويمكن محاكاة هذا الأمر باستخدام ظلال shaders مخصصة.
  • الخطوط الديناميكية هي المدعومة فقط (ttf, otf, woff, woff2). أنماط خطوط خريطة النقط fnt وfont ليست مدعومة
  • لا تُصير الخطوط ذات الحدود المتقاطعة بشكل صحيح. جرب تنزيل نمط الخط من الموقع الرسمي لصانع النمط إذا واجهت مشاكل تصيير للنص بدلا من المواقع الأخرى مثل Google Fonts.

عقدة العنوان المُسقطة (أو أي عقدة تحكم أخرى)

الحل الأخير الأعقد في الضبط ولكنه يقدم مرونة أكثر هو إسقاط عقدة ثنائية البعد على الفضاء ثلاثي البعد. يمكن الحصول على ذلك عن طريق استخدام القيمة المرجعة للتابع unproject_position على عقدة Camera3D في سكربت الدالة ‎_process()‎. يجب استخدام القيمة المُعادة لضبط خاصية position على عقدة التحكم.

شاهد العرض التجريبي لنقاط الطريق ثلاثية البعد لمثال عن ذلك.

ميزات

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

المحدوديات

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

هل يجب علي أن استخدم Label3D أو TextMesh أو التحكم المُسقط؟

يُفضل استخدام Label3D في معظم الحالات كونه أسهل للضبط ويقدم نوعية تصيير أفضل (خاصة إذا تم تعطيل تنعيم التشويش).

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

استخدم عقدة عنوان النص الغني RichTextLabel مُسقطة إذا كنت بحاجة ميزات مثل BBCode أو دعم التحكم بالسمة. 

مصادر