با شروع انتشار نسخه آلفای ۰۴ کتابخانههای Jetpack XR، بهروزرسانیهای مهمی در مورد نحوه ارائه داراییهای محیطی مکانی برای عملکرد بهینه و کیفیت بصری وجود دارد. این تغییرات تأثیر سازگاری دارند و نیاز به بهروزرسانی برنامههای موجود که محیطهای مکانی را تنظیم میکنند، دارند.
برای فراهم کردن محیطهای فضایی، به دو جزء اصلی نیاز دارید:
- یک فایل .glb یا .gltf برای هندسه محیط (برای مثال، صفحه زمین، اشیاء اطراف) و بافت اولیه بصری skybox که کاربران میبینند.
- یک فایل زیپ جداگانه حاوی اطلاعات نورپردازی مبتنی بر تصویر (IBL) که از یک تصویر EXR با محدوده دینامیکی بالا با استفاده از ابزار cmgen تولید شده است. این فایل زیپ برای محاسبات نورپردازی، مانند بازتاب روی اشیاء، استفاده میشود و نه برای خود بافت بصری skybox.
چرا این رویکرد؟
این ساختار دارایی بهروز شده این مزایا را ارائه میدهد:
- حجم فایل کمتر: در مقایسه با روشهای قبلی، مانند استفاده از یک فایل HDR skybox با وضوح بالا برای نمایش بصری و اطلاعات نورپردازی، این رویکرد حجم فایلها را کاهش میدهد.
- بهبود عملکرد: جداسازی بافت بصری skybox (که در glb تعبیه شده است) از دادههای IBL (در فایل ZIP) به شما امکان میدهد هر جزء را بهطور مستقل بهینهسازی کنید. این امر منجر به کاهش پهنای باند خواندن حافظه بافت و کاهش مصرف برق میشود.
- نورپردازی بهینه: استفاده از یک منبع skybox با وضوح پایینتر به طور خاص برای نقشه نورپردازی، بدون تأثیر قابل توجه بر نتایج بصری نورپردازی روی اشیاء، برای عملکرد مفید است.
برای کسب اطلاعات بیشتر در مورد افزودن یک محیط مکانی در برنامه خود، به راهنمای ما در مورد افزودن محیطها به برنامه خود مراجعه کنید.
glb خود را بهینه کنید

glb شما هندسه اطراف کاربر را نشان میدهد و شما بافت بصری skybox خود را نیز در آن قرار میدهید. برای هندسه خود، باید سعی کنید اندازه فایلها را در حد یا کمتر از ۸۰ مگابایت نگه دارید.
برای انجام این کار، فرصتهای زیادی وجود دارد تا محیط خود را با حفظ کیفیت بالا، کارآمدتر کنید. به عنوان مثال، چگالی شبکه شما باید در نزدیکی کاربر بیشترین تراکم را داشته باشد و میتوانید چگالی را برای شبکههایی که از کاربر دورتر هستند، کاهش دهید.
- فاصله دید: فاصله دید برای محیطها در اندروید XR، ۲۰۰ متر از نقطه دید کاربر است و بافت skybox شما باید این محدودیت را رعایت کند. این امر یک تجربه بهینه را فراهم میکند زیرا اختلاف منظر در آن فاصله غیرقابل تشخیص میشود.
قد کاربر: موقعیت جغرافیایی میتواند متفاوت باشد، اما کاربر را روی تپهای با ارتفاع حدود ۱.۵ متر قرار دهید تا از تداخل با عناصر رابط کاربری بزرگتر در برنامهها جلوگیری شود.
تعداد چندضلعیها: به تعداد چندضلعیهای فایلهای glb خود حساس باشید، زیرا تعداد چندضلعیهای بالا میتواند منجر به مصرف غیرضروری برق شود. هر بخش از هندسه نباید از ۱۰۰۰۰ رأس تجاوز کند.
فشردهسازی KTX: با اطمینان از اینکه glb شما از mipmaps و بافتهای ktx2 استفاده میکند، عملکرد GPU فایل glb خود را بهینه کنید.
آنچه برای بهینه سازی IBL خود نیاز دارید
ابزار خط فرمان cmgen را دانلود کنید:
- میتوانید آخرین نسخه را در مخزن Filament پیدا کنید.
- فایل .tgz حاوی نسخه از پیش ساخته شده cmgen برای پلتفرم خود را پیدا کرده و آن را استخراج کنید.
- ابزار از پیش ساخته شده در دایرکتوری /bin فایل .tgz استخراج شده قرار دارد.
فایلهایی که باید برای تولید فایل .zip برای IBL آماده شوند:
- یک EXR با وضوح پایین که با بافت skybox شما مطابقت دارد
- ورودی تکسچر skybox شما باید یک فایل EXR باشد. اگرچه cmgen از فرمتهای دیگر نیز پشتیبانی میکند، اما EXRها توصیه میشوند زیرا اطلاعات محدوده دینامیکی بالایی را ارائه میدهند که برای ارائه IBL با کیفیت بالا بسیار مهم است. استفاده از فرمتهای دیگر مانند PNG منجر به نورپردازی با دقت کمتر میشود.
- تصویر منبع (EXR) باید نسبت ۲:۱ و ابعاد آن توانی از ۲ باشد. از EXR با ابعاد ۱۰۲۴ در ۵۱۲ پیکسل استفاده کنید. توجه: ممکن است به نظر برسد که ۱۰۲۴ در ۵۱۲ وضوح بسیار کمی دارد، اما این برای عملکرد مفید است. برای IBL، نتایج بصری برای کاربر بسیار شبیه به تصاویر با وضوح بسیار بالاتر IBL است.
- یک تصویر png مشکی خالص
- این تصویر همچنین باید نسبت ۲:۱ داشته باشد. از اندازه ۱۰۰ در ۵۰ پیکسل استفاده کنید.
- این به عنوان یک بافت بهینه شده برای همراهی با 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 ..