بدءًا من الإصدار alpha04 من مكتبات Jetpack XR، توجد تحديثات مهمة حول كيفية توفير أصول البيئة المكانية لتحقيق أفضل أداء وجودة مرئية. هذه التغييرات لها تأثير على التوافق وتتطلّب تحديث التطبيقات الحالية التي تضبط البيئات المكانية.
لتوفير بيئات مكانية، تحتاج إلى مكوّنَين رئيسيَّين:
- ملف .glb أو .gltf خاص بالبنية الهندسية للبيئة (مثل مستوى الأرض والأجسام القريبة) ونسيج skybox المرئي الأساسي الذي يراه المستخدمون
- ملف ZIP منفصل يحتوي على معلومات حول الإضاءة المستندة إلى الصور (IBL) تم إنشاؤها من صورة EXR بنطاق عالي الديناميكية باستخدام أداة cmgen: يُستخدم ملف ZIP لاحتساب الإضاءة، مثل الانعكاسات على الأجسام، وليس لنسيج skybox المرئي نفسه.
لماذا هذا النهج؟
توفّر بنية الأصول المحدَّثة المزايا التالية:
- أحجام ملفات أصغر: مقارنةً بالطرق السابقة، مثل استخدام ملف skybox واحد عالي الدقة بتقنية HDR لكل من العرض المرئي ومعلومات الإضاءة، يقلل هذا النهج من أحجام الملفات.
- تحسين الأداء: يتيح لك فصل نسيج skybox المرئي (المضمّن في ملف glb) عن بيانات IBL (في ملف ZIP) تحسين كل مكوّن بشكل مستقل. ويؤدي ذلك إلى خفض النطاق الترددي لقراءة بيانات النسيج من الذاكرة وخفض استهلاك الطاقة.
- الإضاءة المحسّنة: يؤدي استخدام مصدر skybox بدقة أقل -مخصّص لخريطة الإضاءة- إلى تحسين الأداء دون التأثير بشكل كبير على النتائج المرئية للإضاءة على الأجسام.
لمزيد من المعلومات حول إضافة بيئة مكانية إلى تطبيقك، راجِع دليلنا حول إضافة بيئات إلى تطبيقك.
تحسين ملف glb

يمثّل ملف glb البنية الهندسية حول المستخدم، ويتضمّن نسيجًا مرئيًا لـ skybox. بالنسبة إلى بنيتك الهندسية، احرص على ألا يتجاوز حجم الملف 80 ميغابايت.
لتحقيق ذلك، تتوفّر فرص عديدة لتحسين كفاءة بيئتك مع الحفاظ على الجودة العالية. على سبيل المثال، يجب أن تكون كثافة الشبكة هي الأعلى بالقرب من المستخدم، ويمكن تقليلها في الشبكات الأبعد عن المستخدم.
- مسافة العرض: تصل مسافة عرض البيئات في Android XR إلى 200 متر من موقع المستخدم، ويجب أن يلتزم نسيج skybox بهذا القيد. ويوفّر ذلك تجربة مثالية لأنّ اختلاف المنظر يصبح غير ملحوظ عند هذه المسافة.
طول المستخدم: يمكن أن تختلف التضاريس، ولكن يجب وضع المستخدم على تلّ بارتفاع يبلغ حوالي 1.5 متر لتجنُّب التداخل مع عناصر واجهة المستخدم الأكبر حجمًا في التطبيقات.
عدد المضلّعات: يجب الانتباه إلى عدد المضلّعات في ملفات glb، لأنّ العدد الكبير من المضلّعات قد يؤدي إلى استهلاك غير ضروري للطاقة. يجب ألا يتجاوز عدد الرؤوس في كل رقعة من البنية الهندسية 10,000 رأس.
ضغط KTX: يمكنك تحسين أداء وحدة معالجة الرسومات لملف glb من خلال التأكّد من أنّ ملف glb يستخدم صور mipmap وأنسجة ktx2.
ما ستحتاج إليه لتحسين IBL
نزِّل أداة سطر الأوامر cmgen:
- يمكنك العثور على أحدث إصدار في مستودع Filament.
- ابحث عن ملف .tgz الذي يحتوي على الإصدار المُنشأ مسبقًا من cmgen لمنصتك، ثم استخرِجه.
- تتوفّر الأداة المُنشأة مسبقًا في الدليل /bin الخاص بملف .tgz الذي تم استخراجه.
الأصول التي يجب إعدادها لإنشاء ملف .zip لـ IBL:
- ملف EXR منخفض الدقة يتطابق مع نسيج skybox
- يجب أن يكون ملف نسيج skybox المُدخل بتنسيق EXR. على الرغم من أنّ cmgen يدعم تنسيقات أخرى، ننصح باستخدام ملفات EXR لأنّها تتيح معلومات النطاق الديناميكي العالي الضرورية لتوفير إضاءة IBL عالية الجودة. يؤدي استخدام تنسيقات أخرى، مثل PNG، إلى إضاءة أقل دقة.
- يجب أن تكون نسبة العرض إلى الارتفاع للصورة المصدر (EXR) هي 2:1، وأن تكون الأبعاد من قوى العدد 2. استخدِم ملف EXR بدقة 1024 × 512 بكسل. ملاحظة: قد تبدو درجة الدقة 1024 × 512 منخفضة جدًا، ولكنّها مفيدة لتحسين الأداء. بالنسبة إلى IBL، تكون النتائج المرئية للمستخدم مشابهة جدًا للأصول ذات دقة IBL الأعلى.
- ملف png باللون الأسود الخالص
- يجب أن تكون نسبة العرض إلى الارتفاع لهذا الأصل هي 2:1. استخدِم دقة 100 × 50 بكسل.
- يُعد هذا نسيجًا محسّنًا مرافقًا لـ IBL. لن ينظر المستخدمون إلى هذا الأصل، لذا نركز فيه على تحسين الأداء.

يوضّح المثال التالي كيفية استخدام cmgen لإنشاء ملف .zip لـ IBL. في هذا المثال، نستخدم ملفات إدخال باسم my_360_skybox_1024_x_512.exr وblack_skybox.png، وننشئ ملف .zip باسم my_ibl.zip.
# Produce black cubemaps for the texture of the IBL asset.
./cmgen --format=rgb32f --size=128 --extract=./skybox_ibl ./black_skybox.png
# Produce lighting cubemaps and a Spherical Harmonics from EXR
./cmgen --format=rgb32f --size=128 --deploy=./skybox_ibl --ibl-ld=. --ibl-samples=1024 --extract-blur=0.0 --sh-irradiance --sh-shader --sh-output=./skybox_ibl/sh.txt ./my_360_skybox_1024_x_512.exr
# Copy all of the black cubemaps into the other folder.
cp -rf ./skybox_ibl/black_skybox/* ./skybox_ibl/my_360_skybox_1024_x_512
# Rename the directory to reflect that these are old assets.
mv ./skybox_ibl/black_skybox ./skybox_ibl/black_skybox_old
# Rename the directory to reflect that these are your cubemap assets.
mv ./skybox_ibl/my_360_skybox_1024_x_512 ./skybox_ibl/black_skybox
# Change into the child directory.
cd ./skybox_ibl
# Zip all of the cubemap and the Spherical Harmonics assets together.
zip -q my_ibl.zip black_skybox/*
# Return to the directory you started in.
cd ..