Mengoptimalkan aset lingkungan

Mulai dari rilis alpha04 library Jetpack XR, ada update penting tentang cara Anda harus menyediakan aset lingkungan spasial untuk performa dan kualitas visual yang optimal. Perubahan ini adalah dampak kompatibilitas dan memerlukan update aplikasi yang ada yang menetapkan lingkungan spasial.

Untuk menyediakan lingkungan spasial, Anda memerlukan dua komponen utama:

  • File .glb atau .gltf untuk geometri lingkungan (misalnya, bidang tanah, objek di sekitar) dan tekstur skybox visual utama yang dilihat pengguna.
  • File ZIP terpisah yang berisi informasi Image Based Lighting (IBL) yang dihasilkan dari gambar EXR rentang dinamis tinggi menggunakan alat cmgen. File ZIP digunakan untuk penghitungan pencahayaan, seperti pantulan pada objek, dan bukan untuk tekstur skybox visual itu sendiri.

Mengapa pendekatan ini?

Struktur aset yang diperbarui ini memberikan keuntungan berikut:

  • Ukuran file yang lebih kecil: Dibandingkan dengan metode sebelumnya, seperti menggunakan satu file skybox HDR beresolusi tinggi untuk informasi tampilan visual dan pencahayaan, pendekatan ini akan mengurangi ukuran file.
  • Performa yang lebih baik: Memisahkan tekstur skybox visual (di-build ke dalam glb) dari data IBL (dalam file ZIP) memungkinkan Anda mengoptimalkan setiap komponen secara independen. Hal ini menghasilkan bandwidth baca memori tekstur yang lebih rendah dan konsumsi daya yang lebih rendah.
  • Pencahayaan yang dioptimalkan: Menggunakan resource skybox resolusi lebih rendah khusus untuk peta pencahayaan bermanfaat bagi performa tanpa memengaruhi hasil visual pencahayaan pada objek secara signifikan.

Untuk mempelajari lebih lanjut cara menambahkan Lingkungan spasial di aplikasi Anda, lihat panduan kami tentang menambahkan lingkungan ke aplikasi Anda.

Mengoptimalkan glb

glb Anda mewakili geometri di sekitar pengguna, dan Anda menyertakan tekstur visual skybox. Untuk geometri, Anda harus mencoba mempertahankan ukuran file sebesar atau lebih kecil dari 80 MB.

Untuk melakukannya, ada sejumlah peluang untuk membuat lingkungan Anda lebih efisien sekaligus mempertahankan kualitas tinggi. Misalnya, kepadatan mesh Anda harus paling padat di dekat pengguna, dan Anda dapat mengurangi kepadatan untuk mesh yang lebih jauh dari pengguna.

  • Jarak pandang: Jarak pandang untuk lingkungan di Android XR adalah 200 m dari titik pengguna, dan tekstur skybox Anda harus mematuhi batasan ini. Hal ini memberikan pengalaman yang optimal karena paralaks menjadi tidak terlihat pada jarak tersebut.
  • Tinggi pengguna: Geografi dapat bervariasi, tetapi posisikan pengguna di gundukan setinggi sekitar 1,5 meter untuk menghindari pemotongan dengan elemen UI yang lebih besar di aplikasi.

  • Polycount: Perhatikan polycount dalam file glb Anda, karena polycount yang tinggi dapat menyebabkan konsumsi daya yang tidak perlu. Setiap patch geometri tidak boleh melebihi 10.000 vertex.

  • Kompresi KTX: Optimalkan performa GPU file glb dengan memastikan glb Anda menggunakan mipmap dan tekstur ktx2.

Yang diperlukan untuk mengoptimalkan IBL

Download utilitas command line cmgen:

  • Anda dapat menemukan rilis terbaru di repositori Filament.
  • Temukan .tgz yang berisi cmgen versi bawaan untuk platform Anda, lalu ekstrak.
  • Alat bawaan berada di direktori /bin dari file .tgz yang diekstrak.

Aset yang harus disiapkan untuk membuat file .zip untuk IBL:

  • EXR resolusi rendah yang cocok dengan tekstur skybox Anda
    • Input tekstur skybox Anda harus berupa file EXR. Meskipun cmgen mendukung format lain, EXR direkomendasikan karena menyediakan informasi rentang dinamis tinggi yang penting untuk memberikan IBL berkualitas tinggi. Penggunaan format lain seperti PNG akan menghasilkan pencahayaan yang kurang presisi.
    • Gambar sumber (EXR) harus memiliki rasio 2:1 dan dimensi yang merupakan kelipatan 2. Gunakan EXR yang berukuran 1024x512 piksel. Catatan: Resolusi 1024x512 mungkin tampak terlalu rendah, tetapi hal ini bermanfaat untuk performa. Untuk IBL, hasil visual untuk pengguna sangat mirip dengan aset resolusi IBL yang jauh lebih tinggi.
  • PNG hitam solid
    • Aset ini juga harus memiliki rasio 2:1. Gunakan ukuran 100x50 piksel.
    • Ini berfungsi sebagai tekstur yang dioptimalkan untuk menyertai IBL. Pengguna tidak akan melihatnya, jadi kami memfokuskan aset pada pengoptimalan performa.

Berikut adalah contoh penggunaan cmgen untuk membuat file .zip untuk IBL. Dalam contoh ini, kita menggunakan file input bernama my_360_skybox_1024_x_512.exr dan black_skybox.png, dan kita membuat file .zip bernama 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 ..