Tối ưu hoá thành phần môi trường

Các thiết bị XR áp dụng
Hướng dẫn này giúp bạn tạo trải nghiệm cho các loại thiết bị XR này.
Kính XR
Kính XR có dây

Bắt đầu từ bản phát hành alpha04 của các thư viện Jetpack XR, có những điểm cập nhật quan trọng về cách bạn nên cung cấp các thành phần môi trường không gian để có hiệu suất và chất lượng hình ảnh tối ưu. Những thay đổi này ảnh hưởng đến khả năng tương thích và yêu cầu bạn cập nhật các ứng dụng hiện có có thiết lập môi trường không gian.

Để cung cấp môi trường không gian, bạn cần có 2 thành phần chính:

  • Tệp .glb hoặc .gltf cho hình học của môi trường (ví dụ: mặt phẳng trên mặt đất, các vật thể ở gần) và kết cấu skybox trực quan chính mà người dùng nhìn thấy.
  • Một tệp ZIP riêng biệt chứa thông tin về tính năng Chiếu sáng dựa trên hình ảnh (IBL) được tạo từ một hình ảnh EXR có dải tương phản động cao bằng công cụ cmgen. Tệp ZIP được dùng để tính toán ánh sáng, chẳng hạn như ảnh phản chiếu trên các đối tượng, chứ không phải cho chính kết cấu hộp bầu trời trực quan.

Tại sao nên dùng phương pháp này?

Cấu trúc thành phần được cập nhật này mang lại những lợi ích sau:

  • Kích thước tệp nhỏ hơn: So với các phương pháp trước đây, chẳng hạn như sử dụng một tệp skybox HDR có độ phân giải cao duy nhất cho cả thông tin hiển thị trực quan và thông tin chiếu sáng, phương pháp này giúp giảm kích thước tệp.
  • Cải thiện hiệu suất: Việc tách kết cấu skybox trực quan (được tích hợp vào glb) khỏi dữ liệu IBL (trong tệp ZIP) cho phép bạn tối ưu hoá từng thành phần một cách độc lập. Điều này dẫn đến băng thông đọc bộ nhớ kết cấu thấp hơn và mức tiêu thụ điện năng thấp hơn.
  • Ánh sáng được tối ưu hoá: Việc sử dụng tài nguyên skybox có độ phân giải thấp hơn, đặc biệt là cho bản đồ ánh sáng, sẽ có lợi cho hiệu suất mà không ảnh hưởng đáng kể đến kết quả hình ảnh của ánh sáng trên các đối tượng.

Để tìm hiểu thêm về cách thêm một Môi trường không gian vào ứng dụng, hãy xem hướng dẫn của chúng tôi về cách thêm môi trường vào ứng dụng.

Tối ưu hoá tệp glb

glb của bạn thể hiện hình học xung quanh người dùng và bạn đưa vào kết cấu hình ảnh của hộp bầu trời. Đối với hình học, bạn nên cố gắng duy trì kích thước tệp từ 80 MB trở xuống.

Để làm được điều này, bạn có thể tận dụng một số cơ hội để tăng hiệu quả cho môi trường của mình mà vẫn duy trì chất lượng cao. Ví dụ: mật độ của lưới phải dày đặc nhất gần người dùng và bạn có thể giảm mật độ cho các lưới ở xa người dùng hơn.

  • Khoảng cách xem: Khoảng cách xem cho các môi trường trong Android XR là 200 m từ vị trí của người dùng và kết cấu skybox của bạn phải tuân thủ quy tắc ràng buộc này. Điều này mang lại trải nghiệm tối ưu vì hiệu ứng thị sai sẽ không thể phân biệt được ở khoảng cách đó.
  • Chiều cao người dùng: Địa lý có thể thay đổi, nhưng hãy đặt người dùng trên một gò đất có chiều cao khoảng 1,5 mét để tránh bị cắt bớt các phần tử giao diện người dùng lớn hơn trong ứng dụng.

  • Số lượng đa giác: Hãy chú ý đến số lượng đa giác trong tệp glb, vì số lượng đa giác cao có thể dẫn đến mức tiêu thụ điện năng không cần thiết. Mỗi mảng hình học không được vượt quá 10.000 đỉnh.

  • Nén KTX: Tối ưu hoá hiệu suất GPU của tệp glb bằng cách đảm bảo rằng tệp glb sử dụng mipmap và kết cấu ktx2.

Những việc bạn cần làm để tối ưu hoá IBL

Tải tiện ích dòng lệnh cmgen xuống:

  • Bạn có thể tìm thấy bản phát hành mới nhất trong kho lưu trữ Filament.
  • Tìm tệp .tgz chứa phiên bản dựng sẵn của cmgen cho nền tảng của bạn rồi trích xuất tệp đó.
  • Công cụ dựng sẵn nằm trong thư mục /bin của tệp .tgz đã giải nén.

Nội dung cần chuẩn bị để tạo tệp .zip cho IBL:

  • Một tệp EXR có độ phân giải thấp khớp với kết cấu skybox của bạn
    • Đầu vào kết cấu skybox phải là tệp EXR. Mặc dù cmgen hỗ trợ các định dạng khác, nhưng bạn nên dùng EXR vì định dạng này cung cấp thông tin về dải tương phản động cao, rất quan trọng để cung cấp IBL chất lượng cao. Việc sử dụng các định dạng khác như PNG sẽ cho ra ánh sáng kém chính xác hơn.
    • Hình ảnh nguồn (EXR) cần có tỷ lệ 2:1 và kích thước là luỹ thừa của 2. Sử dụng tệp EXR có kích thước 1024 x 512 pixel. Lưu ý: Có thể bạn thấy độ phân giải 1024 x 512 là quá thấp, nhưng độ phân giải này có lợi cho hiệu suất. Đối với IBL, kết quả trực quan mà người dùng thấy rất giống với các thành phần có độ phân giải IBL cao hơn nhiều.
  • Một tệp png màu đen tuyền
    • Thành phần này cũng phải có tỷ lệ 2:1. Sử dụng kích thước 100 x 50 pixel.
    • Đây là một hoạ tiết được tối ưu hoá để đi kèm với IBL. Người dùng sẽ không xem xét điều này, vì vậy chúng tôi tập trung vào việc tối ưu hoá thành phần để đạt hiệu suất.

Sau đây là ví dụ về cách sử dụng cmgen để tạo tệp .zip cho IBL. Trong ví dụ này, chúng ta sẽ sử dụng các tệp đầu vào có tên là my_360_skybox_1024_x_512.exr và black_skybox.png, đồng thời tạo một tệp .zip có tên là 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 ..