Tin tức về sản phẩm

Tối ưu hoá hiệu suất cho Android XR bằng Unity

6 phút đọc
Xem hồ sơ của Luke Hopkins
Luke Hopkins Kỹ sư quan hệ nhà phát triển, Android

Samsung Galaxy XR đã ra mắt, chạy trên nền tảng Android XR! Bài đăng này trên blog nằm trong chuỗi nội dung của Tuần lễ tiêu điểm về Android XR, nơi chúng tôi cung cấp các tài nguyên (bài đăng trên blog, video, mã mẫu và nhiều nội dung khác) được thiết kế để giúp bạn tìm hiểu, xây dựng và chuẩn bị ứng dụng cho Android XR.  

Tuần này, Samsung đã ra mắt Galaxy XR, được phát triển thông qua sự hợp tác với Google và Qualcomm. Đây là thời điểm thú vị cho các nhà phát triển và chúng tôi muốn giúp bạn đạt được hiệu suất tốt nhất có thể từ ứng dụng XR của mình.

Mặc dù hiệu suất kém trong trò chơi và ứng dụng trên các thiết bị không phải XR có thể gây khó chịu cho người dùng, nhưng trong thế giới XR, hiệu suất không chỉ là yếu tố không bắt buộc mà còn là yếu tố cơ bản giúp ứng dụng của bạn thành công. Nếu bạn không đạt được mục tiêu về tốc độ khung hình trong XR, thì điều này có thể gây ra các vấn đề nghiêm trọng hơn nhiều, chẳng hạn như say tàu xe. 

Trong hướng dẫn này, chúng tôi sẽ hướng dẫn bạn các phương pháp tối ưu hoá hiệu suất thiết yếu mà bạn cần nắm được khi phát triển Android XR. Bạn sẽ tìm hiểu những tính năng nào mang lại hiệu suất cao nhất, thời điểm sử dụng và cách các tính năng này phối hợp với nhau để giúp bạn đạt được mục tiêu về tốc độ khung hình.

Sau đây là những mục tiêu chúng tôi hướng đến: 

  • Tối thiểu: 72 khung hình/giây (một phần trong nguyên tắc về chất lượng chơi)
  • Không bắt buộc: 90 khung hình/giây với ngân sách 11 mili giây cho mỗi khung hình

Để biết thêm thông tin về lý do cần duy trì tốc độ khung hình cao như vậy, hãy xem nguyên tắc về hiệu suất của chúng tôi.   

Các tính năng hiệu suất dành riêng cho XR

Chúng ta sẽ bắt đầu bằng cách tìm hiểu hai tính năng hiệu suất dành riêng cho XR: Kết xuất theo tiêu điểm và Lấy mẫu phụ Vulkan. 

Kết xuất theo tiêu điểm

Kết xuất tập trung là một tính năng tối ưu hoá có hai chế độ. Đầu tiên là chế độ tĩnh, chế độ này hiển thị tâm màn hình ở độ phân giải cao hơn và giảm dần độ phân giải khi bạn nhìn ra xa hơn.

Thứ hai là chế độ theo dõi ánh mắt, chế độ này hiển thị chi tiết khu vực bạn đang nhìn, đồng thời giảm chất lượng hiển thị ở vùng ngoại vi. Về cơ bản, công nghệ này mô phỏng cách hoạt động của thị giác con người, tức là chúng ta chỉ nhìn thấy chi tiết rõ nét ở khu vực cụ thể mà chúng ta đang tập trung vào.

Tính năng kết xuất theo tiêu điểm giúp giảm đáng kể khối lượng công việc của GPU mà không làm giảm chất lượng hình ảnh mà người dùng cảm nhận được. Điểm hay của tính năng kết xuất theo tiêu điểm là người dùng sẽ không nhận thấy chất lượng giảm trong tầm nhìn ngoại vi, nhưng GPU của bạn chắc chắn sẽ nhận thấy hiệu suất được cải thiện.

Hãy tưởng tượng bạn đang xây dựng một trải nghiệm bảo tàng với các hiện vật 3D phức tạp. Nếu không có tính năng kết xuất theo tiêu điểm, bạn sẽ gặp khó khăn trong việc duy trì tốc độ 90 khung hình/giây khi cố gắng kết xuất mọi thứ trong "trường nhìn". Với tính năng kết xuất theo tiêu điểm, bạn có thể giữ lại những chi tiết có nhiều đa giác ở nơi người dùng đang nhìn, nhưng môi trường nền sẽ kết xuất ở chất lượng thấp hơn. Người dùng sẽ không nhận thấy sự khác biệt, nhưng bạn sẽ có không gian để thêm nhiều chi tiết hơn vào cảnh của mình.

Lấy mẫu phụ Vulkan

Lấy mẫu phụ Vulkan là trợ thủ đắc lực của tính năng kết xuất theo tiêu điểm. Trong khi tính năng kết xuất foveated quyết định nội dung cần kết xuất ở các mức chất lượng khác nhau, thì Vulkan Subsampling xử lý cách kết xuất hiệu quả các mức chất lượng khác nhau bằng cách sử dụng Bản đồ mật độ mảnh.

Khi kết hợp với tính năng kết xuất hình ảnh theo tiêu điểm, tính năng Lấy mẫu phụ Vulkan giúp bạn tăng thêm 0,5 mili giây hiệu suất. Tính năng này cũng giúp làm mượt các cạnh lởm chởm trong tầm nhìn ngoại vi của bạn, giúp hình ảnh tổng thể trông rõ ràng hơn.

Ví dụ: trong một trò chơi mô phỏng chuyến bay, nơi người dùng tập trung vào các thiết bị và điều khiển, việc kết hợp kết xuất theo tiêu điểm với Lấy mẫu phụ Vulkan có nghĩa là các điều khiển chi tiết sẽ hiển thị sắc nét, nhưng cấu trúc buồng lái ngoại vi sử dụng ít tài nguyên hơn. 0,5 mili giây tăng thêm nghe có vẻ không nhiều, nhưng đó là sự khác biệt giữa việc có chỗ cho một thành phần tương tác bổ sung hoặc bỏ qua khung hình trong những khoảnh khắc căng thẳng.

Các tính năng của GPU cho cảnh phức tạp

Bên cạnh tính năng Kết xuất theo tiêu điểm và Lấy mẫu phụ Vulkan, còn có một số tính năng GPU giúp giảm bớt gánh nặng không cần thiết thông qua việc tạo thực thể và loại bỏ thông minh. Những kỹ thuật này đặc biệt hiệu quả đối với các cảnh phức tạp có hình học lặp lại hoặc có sự che khuất đáng kể.

Trình vẽ thường trú trên GPU

GPU Resident Drawer tự động sử dụng tính năng tạo thực thể GPU để giảm số lượng hàm gọi vẽ và giải phóng thời gian xử lý của CPU. Vì vậy, thay vì CPU thông báo cho GPU về từng đối tượng riêng lẻ, GPU sẽ gộp các đối tượng tương tự lại với nhau.

Tính năng này hiệu quả nhất đối với các cảnh lớn có lưới lặp lại, chẳng hạn như cây trong rừng, đồ nội thất trong toà nhà văn phòng hoặc đạo cụ rải rác trong môi trường.

Hãy tưởng tượng một cảnh rừng có 200 cây sử dụng cùng một lưới cơ sở. Nếu không có GPU Resident Drawer, bạn sẽ có 200 hàm gọi vẽ tiêu tốn GPU, do đó giải phóng CPU. Khi bạn bật tính năng này, GPU sẽ tạo thực thể cho những cây đó một cách thông minh, giúp giảm số lượng hàm gọi vẽ xuống chỉ còn 5-10. Đó là một khoản tiết kiệm GPU khổng lồ mà bạn có thể đầu tư vào logic lối chơi hoặc tính toán vật lý.

Loại bỏ vật thể khuất bằng GPU

GPU Occlusion Culling (Loại bỏ vật khuất bằng GPU) sử dụng GPU thay vì CPU để xác định và bỏ qua việc kết xuất các đối tượng bị ẩn. Tính năng này tự động phát hiện những gì bị che khuất (ẩn) sau các đối tượng khác, nhờ đó bạn không lãng phí GPU cho những thứ mà người dùng không thể nhìn thấy.

Tính năng này đặc biệt hiệu quả trong không gian nội thất có nhiều phòng, môi trường dày đặc hoặc cảnh kiến trúc nơi tường, sàn và vật thể che khuất tầm nhìn một cách tự nhiên.

Ví dụ: giả sử bạn đang xây dựng một trải nghiệm nhà nhiều phòng. Khi người dùng đang ở trong phòng khách, tại sao lại lãng phí chu kỳ GPU để kết xuất nhà bếp đầy đủ chi tiết bị ẩn hoàn toàn sau bức tường? Tính năng Loại bỏ vật thể khuất bằng GPU sẽ tự động bỏ qua việc kết xuất các đối tượng bị ẩn đó, giúp bạn có thêm ngân sách hiệu suất cho những đối tượng thực sự hiển thị.

Theo dõi hiệu suất

Chỉ sử dụng các tính năng này thôi là chưa đủ. Bạn cũng cần đo lường các điểm tối ưu hoá để có thể định lượng tác động của chúng và xác minh rằng các thay đổi của bạn thực sự có hiệu quả.

Performance Metrics API

Performance Metrics API giúp giám sát theo thời gian thực mức sử dụng bộ nhớ, hiệu suất CPU và hiệu suất GPU của ứng dụng. Công cụ này cung cấp cho bạn dữ liệu toàn diện từ các lớp trình kết hợp và thời gian chạy, nhờ đó bạn có thể biết chính xác những gì đang diễn ra trong ứng dụng của mình.

Thiết lập một đường cơ sở trước khi thực hiện các thay đổi, áp dụng một biện pháp tối ưu hoá, đo lường tác động và lặp lại. Phương pháp dựa trên dữ liệu này giúp bạn biết rằng bạn đang thực sự cải thiện hiệu suất thay vì phỏng đoán.

Trước khi bật tính năng kết xuất theo tiêu điểm, thời gian kết xuất khung hình của GPU có thể là 13 mili giây, tức là vượt quá ngân sách 11 mili giây. Bật tính năng kết xuất foveated, đo lường lại và hy vọng bạn sẽ thấy thời gian giảm xuống còn 9 mili giây. Bạn đã có thêm 4 mili giây để thêm chi tiết vào cảnh, cải thiện chất lượng hình ảnh ở những nơi khác hoặc đơn giản là đảm bảo hiệu suất mượt mà hơn trên nhiều nội dung hơn.

Nếu không có các chỉ số này, bạn sẽ không biết cách tối ưu hoá. Performance Metrics API cho bạn biết chính xác những gì thực sự giúp ích cho trường hợp sử dụng cụ thể của bạn.

Trình gỡ lỗi khung hình

Frame Debugger (Trình gỡ lỗi khung hình) là công cụ tích hợp sẵn của Unity giúp bạn hiểu chính xác cách cảnh của bạn được kết xuất theo từng khung hình. Công cụ này cho bạn thấy trình tự của các hàm gọi vẽ và cho phép bạn thực hiện từng bước để xác minh rằng các hoạt động tối ưu hoá của bạn đang hoạt động đúng cách.

Bạn muốn xác nhận rằng SRP Batcher đang hoạt động? Tìm các mục "RenderLoopNewBatcher" trong Trình gỡ lỗi khung. Kiểm tra xem Trình vẽ thường trú trên GPU có đang phân lô đúng cách không? Tìm các mục "Nhóm lô kết hợp". Những thông tin xác nhận trực quan này giúp bạn biết liệu chế độ cài đặt tối ưu hoá của bạn có thực sự có hiệu lực hay không.

Xem từng bước trong 50 hàm gọi vẽ đầu tiên của cảnh. Nếu bạn thấy các đối tượng tương tự được vẽ riêng lẻ thay vì theo lô, thì tức là tính năng tạo thực thể hoặc tạo lô của bạn không hoạt động đúng cách. Trình gỡ lỗi khung giúp bạn thấy ngay các vấn đề này để có thể giải quyết.

Các tính năng tối ưu hoá khác

Ngoài các phương pháp tối ưu hoá mà chúng tôi đã đề cập ở trên, hướng dẫn đầy đủ về hiệu suất của chúng tôi cũng đề cập đến một số phương pháp tối ưu hoá bổ sung khác. Sau đây là thông tin tóm tắt:

  • Cài đặt URP: Tắt HDR và Xử lý hậu kỳ cho XR trên thiết bị di động. Các tính năng này có tác động tối thiểu đến hình ảnh so với chi phí hiệu suất trên phần cứng di động, vì vậy, bạn sẽ nhận được mức tăng hiệu suất có thể đo lường được với sự khác biệt về hình ảnh hầu như không thể nhận thấy.
  • SRP Batcher: Giảm mức hao tổn CPU cho các cảnh có nhiều chất liệu sử dụng cùng một biến thể chương trình đổ bóng. Bằng cách giảm thiểu các thay đổi về trạng thái kết xuất giữa các hàm gọi vẽ, bạn có thể giảm đáng kể Thời gian của CPU dành cho việc kết xuất.
  • Tốc độ làm mới màn hình: Tự động điều chỉnh trong khoảng từ 72 khung hình/giây đến 90 khung hình/giây dựa trên độ phức tạp của cảnh. Giảm tốc độ khung hình trong các cảnh phức tạp để duy trì độ ổn định, sau đó tăng tốc độ khung hình trong các cảnh đơn giản hơn để mang lại trải nghiệm tương tác cực kỳ mượt mà.
  • Kết cấu chiều sâu/độ mờ: Tắt các kết cấu này trừ phi cần thiết cho hiệu ứng đổ bóng. Chúng gây ra các thao tác sao chép GPU không cần thiết, làm lãng phí hiệu suất mà không mang lại lợi ích cho hầu hết ứng dụng.
  • Tỷ lệ kết xuất URP: Chế độ cài đặt này cho phép bạn kết xuất ở độ phân giải thấp hơn để tăng hiệu suất hoặc tăng tỷ lệ kết xuất để nâng cao chất lượng hình ảnh.

Để biết hướng dẫn từng bước về những cách tối ưu hoá này và các cách khác, hãy xem Hướng dẫn đầy đủ về hiệu suất Unity cho Android XR.

Kết luận

Hiệu suất của ứng dụng XR không chỉ là một tiêu chí kỹ thuật. Đây là điểm khác biệt giữa trải nghiệm thoải mái, hấp dẫn và trải nghiệm khiến người dùng cảm thấy khó chịu hoặc không thoải mái. Các phương pháp tối ưu hoá mà chúng tôi đã đề cập là bộ công cụ giúp bạn đạt được các mục tiêu quan trọng về tốc độ khung hình trên các thiết bị XR mới nhất.

Sau đây là lộ trình của bạn:

  1. Bắt đầu với tính năng Kết xuất theo tiêu điểm và Lấy mẫu phụ Vulkan. Các tính năng dành riêng cho XR này giúp tiết kiệm GPU ngay lập tức và đáng kể.
  2. Thêm GPU Resident Drawer và Occlusion Culling nếu bạn có cảnh phức tạp với hình học lặp lại hoặc không gian nội thất.
  3. Theo dõi mọi thứ bằng Performance Metrics API để đảm bảo các thay đổi của bạn thực sự hữu ích
  4. Khám phá các tính năng tối ưu hoá URP khác để tăng thêm hiệu suất

Điều quan trọng là bạn phải liên tục đo lường và lặp lại. Không phải mọi hoạt động tối ưu hoá đều mang lại lợi ích như nhau cho mọi dự án, vì vậy, hãy sử dụng Performance Metrics API để biết rõ điều gì thực sự giúp ích cho trường hợp sử dụng cụ thể của bạn.

Bước tiếp theo: mở rộng kỹ năng

Bạn muốn đi sâu hơn nữa? Hãy tham khảo các nguồn thông tin sau:

  • Hướng dẫn về hiệu suất Unity cho Android XR – Hướng dẫn triển khai từng bước đầy đủ cho tất cả các tính năng được đề cập tại đây.
  • Làm quen với Unity và Android XR – Thiết lập môi trường phát triển và bắt đầu xây dựng.
  • Tài liệu dành cho nhà phát triển Android XR – Hướng dẫn toàn diện về mọi tính năng của Android XR
Tác giả:
Tiếp tục đọc