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

Kể từ bản phát hành alpha04 của thư viện Jetpack XR, có một số nội dung cập nhật quan trọng về cách bạn nên cung cấp tài sản môi trường không gian để đạt đượ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 cập nhật các ứng dụng hiện có đặt môi trường không gian.

Để cung cấp môi trường không gian, bạn cần có hai 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 đất, các đối tượng lân cận) và kết cấu hộp ảo hình ảnh chính mà người dùng nhìn thấy.
  • Một tệp ZIP riêng chứa thông tin về Ánh sáng dựa trên hình ảnh (IBL) được tạo từ hình ảnh EXR có dải độ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ư phản chiếu trên các đối tượng, chứ không phải cho chính hoạ tiết hộp trăng.

Tại sao lại sử dụng phương pháp này?

Cấu trúc thành phần mới 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 hộp ảo HDR có độ phân giải cao cho cả thông tin hiển thị hình ảnh 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 riêng hoạ tiết hộp ảo (đượ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 làm giảm băng thông đọc bộ nhớ kết cấu và giảm mức tiêu thụ điện năng.
  • Ánh sáng được tối ưu hoá: Việc sử dụng tài nguyên hộp trăng có độ phân giải thấp hơn dành riêng 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ôi trường không gian trong ứ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á 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 trời. Đối với hình học, bạn nên cố gắng duy trì kích thước tệp ở mức 80 MB trở xuống.

Để làm được điều này, có một số cơ hội để giúp môi trường của bạn hoạt động hiệu quả hơn trong khi vẫn duy trì chất lượng cao. Ví dụ: mật độ của lưới phải dày 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 môi trường trong Android XR là 200m từ điểm của người dùng và hoạ tiết hộp trời 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 trở nên không thể phân biệt được ở khoảng cách đó.
  • Chiều cao của người dùng: Vị trí địa lý có thể khác nhau, 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 thành phần giao diện người dùng lớn hơn trong ứng dụng.

  • Số đa giác: Hãy chú ý đến số đa giác trong tệp glb, vì số đ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 bản vá 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 glb sử dụng mipmap và hoạ tiết 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 cmgen tạo sẵn cho nền tảng của bạn rồi giải nén tệp đó.
  • Công cụ tạo sẵn nằm trong thư mục /bin của tệp .tgz đã giải nén.

Các thành phần cần chuẩn bị để tạo tệp .zip cho IBL:

  • Tệp EXR có độ phân giải thấp khớp với hoạ tiết hộp trời của bạn
    • Đầu vào kết cấu hộp ảo của bạn 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 sử dụng EXR vì chúng cung cấp thông tin về dải độ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ẽ dẫn đến độ 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à số mũ của 2. Sử dụng tệp EXR có kích thước 1024 x 512 pixel. Lưu ý: Có vẻ như độ phân giải 1024 x 512 là quá thấp, nhưng điều này lại có lợi cho hiệu suất. Đối với IBL, kết quả hình ảnh cho người dùng rất giống với các thành phần có độ phân giải IBL cao hơn nhiều.
  • Tệp png màu đen đồng nhất
    • 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 thành phần này, vì vậy, chúng ta tập trung vào việc tối ưu hoá thành phần này để đạt hiệu suất cao.

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ử dụng các tệp đầu vào có tên my_360_skybox_1024_x_512.exr và black_skybox.png, đồng thời tạo một tệp .zip có tên 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 ..