Hiệu suất kết xuất VR
Điều chỉnh và Tối ưu hóa
Giới thiệu
Đạt được trải nghiệm VR tối ưu trên phần cứng có nguồn lực hạn chế là chìa khóa để mang lại trải nghiệm người dùng mượt mà và thoải mái. Nếu tốc độ khung hình của nội dung kết xuất giảm hoặc không ổn định dưới tốc độ làm mới của thiết bị, điều này sẽ dẫn đến hiện tượng giật và khựng khung hình, say tàu xe, v.v., cuối cùng sẽ ảnh hưởng tiêu cực đến trải nghiệm của người dùng. Do đó, việc tối ưu hóa hiệu suất nội dung là rất quan trọng để đảm bảo trải nghiệm thú vị.
Trước khi bắt đầu điều chỉnh hiệu suất, điều quan trọng là phải hiểu điểm nghẽn hiệu suất nằm ở đâu để tránh điều chỉnh không hiệu quả. Tài liệu này được thiết kế để giúp các nhà phát triển xác định điểm nghẽn hiệu suất và đưa ra giải pháp để giải quyết các vấn đề về hiệu suất kết xuất.
Tài liệu được tổ chức thành các phần sau:
- Chương 2: Xác định điểm nghẽn – Phần này hỗ trợ các nhà phát triển xác định điểm nghẽn.
- Chương 3 và 4: Cài đặt VIVE Wave và VIVE OpenXR – Các phần này phác thảo các cài đặt cụ thể có thể ảnh hưởng đến hiệu suất CPU/GPU cho các ứng dụng VIVE Wave và OpenXR. Các nhà phát triển có thể thử nghiệm bật hoặc tắt các tính năng này dựa trên các điểm nghẽn hiệu suất gặp phải để xác định xem có cải thiện nào không.
- Chương 5: Tối ưu hóa phổ biến – Phần này chia sẻ một số kinh nghiệm và phương pháp tối ưu hóa phổ biến.
Xác định nút thắt cổ chai
Khi HMD đang di chuyển, nếu ứng dụng VR/MR có hiện tượng giật khung hình hoặc viền đen, v.v., thì thường là do vấn đề hiệu suất kết xuất kém. Thông thường, các vấn đề về hiệu suất kết xuất có thể được phân loại thành 2 loại: liên kết CPU hoặc liên kết GPU. Hiểu được loại liên kết nào cho ứng dụng của bạn là rất quan trọng khi bắt đầu để tránh điều chỉnh không hiệu quả.
Trong chương này, chúng tôi cung cấp các bước đơn giản giúp bạn nhanh chóng xác định vấn đề về hiệu suất.
2.1 Kiểm tra FPS kết xuất nội dung
Đầu tiên, chúng ta bắt đầu bằng cách kiểm tra FPS nội dung, tức là số khung hình mà trình xử lý nội dung hiển thị mỗi giây. Nó phải được duy trì ở tốc độ khung hình hiển thị và giữ ổn định. Nếu không, nó có thể gây ra hiện tượng giật khung hình.
Nếu SDK ứng dụng của bạn đang sử dụng VIVE WAVE SDK 6.0.0 trở lên, bạn có thể sử dụng lệnh adb sau để kiểm tra FPS. DK 6.0.0
$adb Logcat -s VRMetric
Bạn sẽ thấy dữ liệu nhật ký sau.
VRMetric:FPS=89.8/89.8,CPU-27/1,GPU=72/3,GpuBd=0,LrCnt=1,2Stag=1,Pstat=2,AQ=1,FOVED=0/0, FSE=1,TWS-2,PT=0(0), RndrBK=0,GLTA=2D,EB=1720×1720
“FPS=89.8/89.8” Số đầu tiên biểu thị FPS của nội dung, trong khi số thứ hai biểu thị tốc độ khung hình hiển thị.
Nếu phiên bản Wave SDK của bạn thấp hơn 6.0.0, bạn nên nâng cấp lên phiên bản mới nhất để nâng cao hiệu suất kết xuất và tối ưu hóa các tính năng khác.
Nếu ứng dụng SDK của bạn được xây dựng bằng VIVE OpenXR. Bạn có thể sử dụng lệnh adb sau để kiểm tra FPS.
$adb Logcat -s RENDER_ATW
Bạn sẽ thấy dữ liệu nhật ký sau
RENDER_ATW: [FPS] kết cấu mới: 90.00
RENDER_ATW: [FPS] R hiện tại:90.00 bỏ qua:0 317, -0.0155 0.805527, 0.006788)
RENDER_ATW: [FPS] L hiện tại:90.00 bỏ qua:0 (0.592301, -0.015502, 0.805539, 0.006773)
Số theo sau “new texture” biểu thị FPS nội dung hiện tại. Số theo sau “R present” và “L present” biểu thị tốc độ khung hình hiển thị.
Đôi khi, FPS của nội dung và tốc độ khung hình hiển thị có thể có sự khác biệt nhỏ.
Ví dụampTrong trường hợp trên, 89.8 FPS có thể được coi là 90 FPS.
Nếu FPS nội dung của ứng dụng luôn thấp hơn tốc độ khung hình hiển thị hoặc vẫn không ổn định, điều đó cho thấy có vấn đề về hiệu suất kết xuất. Do đó, bước tiếp theo là xác định xem tình trạng tắc nghẽn đến từ CPU hay GPU.
2.2 Kiểm tra mức sử dụng CPU và GPU
Nếu SDK ứng dụng của bạn đang sử dụng VIVE WAVE SDK 6.0.0 trở lên, bạn có thể sử dụng lệnh adb sau để kiểm tra FPS.
$adb logcat -s VRMetric
Bạn sẽ thấy dữ liệu nhật ký sau.
VRMetric:FPS=89.8/89.8,CPU=27/1,GPU=72/3,GpuBd=0,LrCnt=1,2Stag=1,Pstat=2,AQ=1,FOVED=0 /0, FSE=1,TWS=2,PT=0(0),RndrBK=0,GLTA=2D,EB=1720×1720
Như bạn có thể thấy trong kết quả nhật ký ở trên, mức sử dụng CPU là 27% và mức sử dụng GPU là 72%. Nếu phiên bản Wave SDK của bạn thấp hơn 6.0.0, bạn nên nâng cấp lên phiên bản mới nhất để tăng cường hiệu suất kết xuất và tối ưu hóa các tính năng khác.
Đối với ứng dụng VIVE OpenXR, bạn có thể sử dụng lệnh sau để kiểm tra mức sử dụng CPU và GPU.
# trên linux/ubuntu
$ adb logcat | grep CPU_SỬ DỤNG
# trên powershell
$ adb logcat | Chọn-Chuỗi -Mẫu CPU_USAGE
Bạn sẽ thấy nhật ký sau
CPU Trung bình CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 GPU CPU_USAGE [LOAD] 25.67% 32.22% 25.29% 30.77% 29.35% 21.35% 22.09% 18.39% 24.14% 73 %
Nếu bạn thấy FPS không thể duy trì tốc độ khung hình hiển thị và mức sử dụng GPU cũng rất cao, thường vượt quá 85%, bạn có thể thử điều chỉnh Độ phân giải Eyebuffer (phần 3.1.2, phần 4.1.2) để xem liệu nó có cải thiện FPS hay không. Nếu điều chỉnh này dẫn đến
hiệu suất, chúng ta có thể kết luận rằng vấn đề nằm ở GPU và tập trung nỗ lực tối ưu hóa cho phù hợp.
Mặt khác, nếu việc điều chỉnh Độ phân giải Eyebuffer không mang lại cải thiện đáng kể về hiệu suất thì có khả năng nút thắt cổ chai nằm ở CPU và chúng ta nên tập trung vào việc tối ưu hóa hiệu suất CPU.
Cũng có khả năng ứng dụng bị ràng buộc bởi cả CPU và GPU cùng một lúc. Trong những trường hợp như vậy, cần áp dụng các nỗ lực tối ưu hóa cho cả CPU và GPU để đạt được sự cải thiện hiệu suất cân bằng.
2.3 Liên kết với GPU
Khi ứng dụng VR bị ràng buộc bởi GPU, điều đó có nghĩa là GPU là nút thắt chính và không thể theo kịp nhu cầu kết xuất của ứng dụng. Để giảm thiểu các vấn đề bị ràng buộc bởi GPU, hãy cân nhắc các khuyến nghị sau:
Đầu tiên, hãy sử dụng các công cụ tạo hồ sơ như RenderDoc hoặc Game Engine profiler (Unity Profiler, Unreal Insights) để phân tích GPU dành phần lớn thời gian ở đâu. Xác định các hoạt động tốn kém nhất và tập trung vào việc tối ưu hóa chúng.
Đối với Native Developer, bạn có thể sử dụng RenderDoc để xác định lệnh vẽ nào đang gây ra tình trạng tải GPU quá mức.
Đối với Unity Developer, bạn có thể làm theo tài liệu này của Unity hoặc sử dụng RenderDoc để phân tích vấn đề về hiệu suất kết xuất và làm theo tài liệu tối ưu hóa đồ họa của Unity để được hướng dẫn tối ưu hóa ứng dụng của bạn.
Đối với Unreal Developer, bạn có thể sử dụng GPU Visualizer hoặc RenderDoc để phân tích vấn đề hiệu suất kết xuất và làm theo Nguyên tắc hiệu suất của Unreal để được hướng dẫn tối ưu hóa ứng dụng của bạn.
Thứ hai, bạn cũng có thể thử điều chỉnh một số tính năng hoặc cài đặt của Wave để giảm tải cho GPU.
- Đặt Tốc độ làm mới màn hình chậm hơn (phần 3.1.1, phần 4.1.1)
- Điều chỉnh Độ phân giải Eyebuffer (phần 3.1.2, phần 4.1.2), 14.1.1)
- Hãy thử bật Foveation (phần 3.1.4, phần 4.1.4).
Nếu ứng dụng của bạn cũng là ứng dụng MR, bạn cũng có thể điều chỉnh cài đặt Passthrough.
- Điều chỉnh chất lượng hình ảnh Passthrough thấp hơn. (phần 3.2.1)
- Điều chỉnh tốc độ khung hình truyền qua chậm hơn. (phần 3.2.2).
Để biết thêm các thiết lập khác về hiệu suất GPU, bạn có thể tham khảo Chương 2.6.
2.4 Liên kết CPU
Khi ứng dụng VR bị giới hạn bởi CPU, điều đó có nghĩa là CPU là nút thắt chính, hãy cân nhắc các khuyến nghị sau:
Đầu tiên, hãy sử dụng các công cụ lập hồ sơ như Systrace hoặc Game Engine profiler (Unity Profiler, Unreal Insights) để phân tích và xác định phần nào trong mã của bạn đang tiêu tốn nhiều tài nguyên CPU nhất. Tập trung vào việc tối ưu hóa các khu vực này và cấu trúc lại các thuật toán sử dụng nhiều tài nguyên tính toán để giảm tải CPU.
- Đối với Nhà phát triển bản địa, bạn có thể sử dụng Systrace để chuyên nghiệpfiler dự án của bạn.
- Đối với Unity Developer, bạn có thể sử dụng CPU Usage ProfileMô-đun r để tìm vấn đề về hiệu suất CPU.
- Đối với Unreal Developer, bạn có thể sử dụng Unreal's Insights để tìm vấn đề về hiệu suất CPU.
Thứ hai, bạn cũng có thể thử điều chỉnh một số tính năng hoặc cài đặt của Wave để giảm tải cho GPU.
- Đặt Tốc độ làm mới màn hình chậm hơn (phần 3.1.1, phần 4.1.1)
- Sử dụng Multi-View Kết xuất (phần 3.1.4, phần 4.1.4)
Nếu ứng dụng của bạn cũng là ứng dụng MR, bạn cũng có thể điều chỉnh cài đặt Passthrough.
- Điều chỉnh tốc độ khung hình truyền qua chậm hơn (phần 3.2.2).
Để biết thêm các thiết lập khác về hiệu suất CPU, bạn có thể tham khảo Chương 2.6.
2.5 Tóm tắt
Cuối cùng, chúng tôi đã sắp xếp quy trình kiểm tra hiệu suất ở trên thành Hình 2-5-1. Bắt đầu bằng cách kiểm tra FPS của nội dung. Nếu FPS thấp hơn tốc độ khung hình hiển thị hoặc vẫn không ổn định, hãy phân tích mức sử dụng GPU/CPU để xác định xem nó bị ràng buộc bởi GPU hay CPU. Cuối cùng, hãy sử dụng một chuyên giafiler để xác định các vấn đề tiềm ẩn về hiệu suất hoặc điều chỉnh các tính năng hoặc cài đặt Wave nhằm tối ưu hóa hiệu suất CPU.

2.6 Tham khảo nhanh Cài đặt nào có thể cải thiện khả năng tải của CPU/GPU
Liệt kê các thiết lập của SDK liên quan đến việc tải CPU/GPU như bên dưới. Bạn có thể dựa vào điểm nghẽn của ứng dụng để kiểm tra các thiết lập tối ưu hóa có liên quan.
Liên quan đến CPU:
- Cài đặt VIVE Wave SDK
o Nội dung VR
▪ 3.1.1 Tốc độ làm mới màn hình
▪ 3.1.4 ĐaView Kết xuất
▪ 3.1.6 Chất lượng thích ứng
▪ 3.1.7 Bộ tổng hợp chuyển động thích ứng
o Nội dung MR
▪ 3.2.2 Điều chỉnh tốc độ khung hình truyền qua - Cài đặt VIVE OpenXR SDK
o Nội dung VR
▪ 4.1.1 Tốc độ làm mới màn hình
▪ 4.1.4 ĐaView Kết xuất - Tối ưu hóa chung
o 5.5 CPU tăng đột biến
Liên quan đến GPU:
- Cài đặt VIVE Wave SDK
o Nội dung VR
▪ 3.1.1 Tốc độ làm mới màn hình
▪ 3.1.2 Độ phân giải đệm mắt
▪ 3.1.3 ĐaView Kết xuất
▪ 3.1.4 Điểm hội tụ
▪ 3.1.5 Tăng cường độ sắc nét của khung hình (FSE)
▪ 3.1.6 Chất lượng thích ứng
▪ 3.1.7 Bộ tổng hợp chuyển động thích ứng
▪ 3.1.8 Render Mask [Không hỗ trợ Unreal] o Nội dung MR
▪ 3.2.1 Điều chỉnh chất lượng truyền qua
▪ 3.2.2 Điều chỉnh tốc độ khung hình truyền qua - Cài đặt VIVE OpenXR SDK
o Nội dung VR
▪ 4.1.1 Tốc độ làm mới màn hình
▪ 4.1.2 Độ phân giải đệm mắt
▪ 4.1.3 ĐaView Kết xuất
▪ 4.1.4 Foveation [Không hỗ trợ Unreal] ▪ 4.1.5 Render Mask [Không hỗ trợ Unreal] - Tối ưu hóa chung
o 5.1 Tắt Chế độ hiệu suất cao
o 5.2 Đaamplinh
o 5.3 Tải/Lưu trữ GMEM
o 5.4 Lớp thành phần (Nhiều lớp)
Cài đặt VIVE Wave
VIVE Wave là một nền tảng và bộ công cụ mở cho phép bạn dễ dàng phát triển nội dung VR và cung cấp khả năng tối ưu hóa thiết bị hiệu suất cao cho các đối tác bên thứ ba. VIVE Wave hỗ trợ các công cụ trò chơi Unity và Unreal.
Chúng tôi liên tục tối ưu hóa và giải quyết nhiều lỗi khác nhau, vì vậy chúng tôi khuyên bạn nên cập nhật SDK thường xuyên.
Hiện tại, VIVE Wave chỉ hỗ trợ OpenGL ES. Sau đây là danh sách các tính năng được sắp xếp theo mức độ ảnh hưởng đến hiệu suất GPU. Chúng tôi sẽ chia thành hai phần: Nội dung VR và Nội dung MR.
3.1 Nội dung VR
3.1.1 Tốc độ làm mới màn hình
Higher refresh rates offer smoother visuals, but come at the cost of increased system load. Conversely, lower refresh rates reduce system load, but result in less smooth visuals. If App has CPU/GPU bound issue, you can try decreasing the display refresh rate to alleviate the issue.
- Đối với nhà phát triển gốc, hãy tham khảo WVR_SetFrameRate.
- Đối với nhà phát triển Unity, hãy tham khảo hướng dẫn này.
- Đối với nhà phát triển Unreal, hãy tham khảo hướng dẫn này.
3.1.2 Độ phân giải đệm mắt
Độ phân giải Eyebuffer là kích thước kết cấu mà nội dung ứng dụng cần được hiển thị, kết cấu đã hiển thị sẽ được gửi đến thời gian chạy để thực hiện quy trình đăng và hiển thị trên màn hình HMD.
Mặc dù kích thước bộ đệm mắt lớn hơn có thể mang lại hình ảnh rõ nét và chi tiết hơn, nhưng nó cũng tạo ra tải đáng kể cho GPU. Do đó, việc tìm ra sự cân bằng phù hợp giữa chất lượng hình ảnh và hiệu suất là điều cần thiết.
If App has GPU bound issue, you can try decreasing the eyebuffer size by multiply a scale factor. Howerver, we recommend not reducing the scale factor below 0.7, as this may result in unacceptable visual quality.
- Đối với nhà phát triển gốc, hãy tham khảo WVR_ObtainTextureQueue. Khi điều chỉnh kích thước, bạn nên nhân chiều rộng và chiều cao với một tỷ lệ.
- Đối với nhà phát triển Unity, hãy tham khảo WaveXRSettings.
Ngoài ra, bạn có thể thực hiện thay đổi thông qua mã như belwoe.
XRSettings.eyeTextureResolutionScale = ResolutionScaleValue; // C# - Đối với nhà phát triển Unreal, hãy tham khảo SetPixelDensity.
3.1.3 ĐaView Kết xuất
Trong quá trình dựng hình truyền thống, chúng ta vẽ mắt trái và mắt phải riêng biệt, điều này đòi hỏi hai lệnh vẽ cho cùng một cảnh. NhiềuView Rendering giải quyết vấn đề này bằng cách chỉ thực hiện một lệnh vẽ.
This feature reduces CPU load by decreasing the number of draw calls. The GPU also has some benefits, vertex shader’s workload is also reduced as it doesn’t need to run an additional shader for the other eye, but the fragment shader’s workload remains unchanged since it still needs to evaluate each pixel for both eyes. We recommand enabling this feature.
- Đối với nhà phát triển bản địa, bạn có thể tham khảo wvr_native_hellovr samplà.
- Đối với nhà phát triển Unity, hãy tham khảo Chế độ kết xuất, một lần chạy là nhiều lầnview tính năng.
- Đối với nhà phát triển Unreal, hãy tham khảo hướng dẫn này.
3.1.4 Điểm hội tụ
Kết xuất foveated chủ yếu được thiết kế để giảm tải GPU. Nó làm giảm chi tiết khung hình ở vùng ngoại vi của màn hình và duy trì chi tiết độ phân giải cao ở trung tâm của trường view. Nếu ứng dụng có vấn đề liên quan đến GPU, bạn có thể thử bật tính năng kết xuất Foveation.

Có một số điều cần lưu ý khi sử dụng foveation:
➢ Người dùng thường không nhận thấy chi tiết giảm ở các vùng ngoại vi khi áp dụng chế độ foveation mặc định. Nhưng nếu chất lượng foveation ngoại vi được đặt quá thấp, người dùng có thể nhận thấy điều này.
➢ Hiệu ứng foveation có thể dễ nhận thấy hơn với một số vật liệu hoặc kết cấu nhất định, có thể thu hút sự chú ý của người dùng. Các nhà phát triển nên nhận thức được điều này và đánh giá nó cho phù hợp.
➢ Bật tính năng dựng hình foveated sẽ phát sinh chi phí hiệu suất GPU cố định, có thể thay đổi từ 1% đến 6% tùy thuộc vào kích thước của bộ đệm mắt. Khi sử dụng shader đơn giản trong cảnh, mức tăng hiệu suất từ việc tiết kiệm tài nguyên có thể thấp hơn chi phí hiệu suất GPU cố định, dẫn đến giảm hiệu suất.
- Đối với nhà phát triển bản địa, hãy tham khảo hướng dẫn này.
- Đối với nhà phát triển Unity, hãy tham khảo hướng dẫn này. Đáng chú ý là khi bạn bật hậu xử lý hoặc HDR, foveation không thể được sử dụng đầy đủ. Bởi vì Unity sẽ kết xuất các đối tượng trên kết cấu kết xuất do chính nó tạo ra, thay vì kết cấu kết xuất hiện tại được tạo trong thời gian chạy hỗ trợ foveation.
- Đối với nhà phát triển Unreal, hãy tham khảo hướng dẫn này. Đáng chú ý là foveation không thể được sử dụng đầy đủ trên Multi-View Kết xuất, vì Unreal không thể trực tiếp kết xuất các đối tượng lên kết cấu kết xuất được tạo trong thời gian chạy hỗ trợ foveation.
3.1.5 Tăng cường độ sắc nét của khung hình (FSE)
FSE cung cấp kết quả render sắc nét thông qua việc giới thiệu bộ lọc sắc nét, nó có thể làm cho nội dung rõ ràng hơn và khá hữu ích để cải thiện độ rõ nét của văn bản trong cảnh. Nếu Ứng dụng có vấn đề liên kết GPU, bạn có thể cân nhắc tắt FSE nếu không cần thiết.

- Đối với nhà phát triển bản địa, hãy tham khảo hướng dẫn này.
- Đối với nhà phát triển Unity, hãy tham khảo hướng dẫn này.
- Đối với nhà phát triển Unreal, hãy tham khảo hướng dẫn này.
3.1.6 Chất lượng thích ứng
Để tiết kiệm pin và duy trì hiệu suất kết xuất của thiết bị, tính năng này tự động điều chỉnh mức hiệu suất của xung nhịp CPU/GPU dựa trên mức sử dụng của chúng. Ngoài ra, có thể triển khai các chiến lược khác để tăng cường hiệu suất, chẳng hạn như tự động bật/tắt Foveation hoặc nội dung có thể tự điều chỉnh nếu nhận được các sự kiện tải cao/thấp.
- Đối với nhà phát triển bản địa, hãy tham khảo hướng dẫn này.
- Đối với nhà phát triển Unity, hãy tham khảo hướng dẫn này. Trong plugin Unity của chúng tôi, kích thước bộ đệm mắt có thể được tự động điều chỉnh dựa trên hiệu suất hiện tại; Kích thước văn bản sẽ lọc ra các giá trị tỷ lệ quá nhỏ trong danh sách Độ phân giải. Chúng tôi khuyên bạn nên sử dụng văn bản có kích thước ít nhất là 20 dmm hoặc lớn hơn.
- Đối với nhà phát triển Unreal, hãy tham khảo hướng dẫn này.
3.1.7 Bộ tổng hợp chuyển động thích ứng
Tính năng này là tính năng thử nghiệm bao gồm UMC và PMC. UMC sẽ giảm một nửa Tốc độ khung hình và ngoại suy khung hình mới theo thời gian thực để duy trì độ mượt mà về mặt hình ảnh. Tuy nhiên, nó đi kèm với một số độ trễ, hiện tượng lạ và tải GPU.
PMC chủ yếu sử dụng Depth Buffer để cho phép ATW tính đến chuyển dịch HMD, mở rộng đến bù trừ 6-dof. Tính năng này có thể giảm độ trễ chuyển dịch 1~2 khung hình, nhưng tăng tải GPU.
- Đối với nhà phát triển bản địa, hãy tham khảo hướng dẫn này.
- Đối với nhà phát triển Unity, hãy tham khảo hướng dẫn này.
- Đối với nhà phát triển Unreal, hãy tham khảo hướng dẫn này.
3.1.8 Render Mask [Không hỗ trợ Unreal]
Các điểm ảnh ở các cạnh trở nên gần như vô hình sau khi bị biến dạng, mặt nạ kết xuất sẽ sửa đổi các giá trị bộ đệm độ sâu của các điểm ảnh vô hình này. Nếu bạn bật thử nghiệm độ sâu, do early-z, các điểm ảnh vô hình này sẽ không được kết xuất, do đó giảm tải GPU. Tính năng này hữu ích nếu có các đối tượng kết xuất tải nặng trong các vùng vô hình này; nếu không, nếu không có đối tượng kết xuất nào trong các vùng này, nên tắt tính năng này vì nó sẽ tiêu tốn một lượng GPU nhỏ.
- Đối với nhà phát triển Native, hãy tham khảo hướng dẫn này. Bạn phải liên kết bộ đệm độ sâu trước khi gọi RenderMask; nếu không, nó sẽ không có hiệu quả.
- Đối với nhà phát triển Unity, hãy tham khảo hướng dẫn này.
- Đối với nhà phát triển Unreal, hiện tại không hỗ trợ tính năng Render Mask.
3.2 Nội dung MR
3.2.1 Điều chỉnh chất lượng truyền qua
Có 3 mức chất lượng hình ảnh truyền qua:
➢ WVR_PassthroughImageQuality_DefaultMode – phù hợp với nội dung MR mà không có nhu cầu cụ thể.
➢ WVR_PassthroughImageQuality_PerformanceMode – phù hợp với nội dung MR cần nhiều tài nguyên GPU hơn để kết xuất cảnh ảo.
➢ WVR_PassthroughImageQuality_QualityMode – phù hợp với nội dung MR cho phép người dùng nhìn rõ môi trường xung quanh, nhưng bối cảnh nội dung ảo phải được tinh chỉnh tốt hơn để có hiệu suất cao.
Bạn có thể điều chỉnh chất lượng Passthrough thành PerformanceMode để giảm mức sử dụng GPU.
- Đối với nhà phát triển Native, Uunity hoặc Unreal, hãy tham khảo hướng dẫn này.
3.2.2 Điều chỉnh tốc độ khung hình truyền qua
Giống như tốc độ làm mới màn hình, tốc độ khung hình Passthrough cao hơn mang lại hình ảnh mượt mà hơn, nhưng phải trả giá bằng việc tăng tải hệ thống. Ngược lại, tốc độ làm mới thấp hơn làm giảm tải hệ thống, nhưng dẫn đến hình ảnh kém mượt mà hơn. Có 2 chế độ tốc độ khung hình Passthrough: Boost và Normal.
- Đối với nhà phát triển gốc, có thể điều chỉnh chất lượng truyền qua bằng cách sử dụng WVR_SetPassthroughImageRate.
- Đối với nhà phát triển Unity, có thể thay đổi thông qua mã, ví dụ:ampCác thiết lập như sau // C#
Interop.WVR_SetPassthroughImageQuality(WVR_PassthroughImageQuality.PerformanceMode); - Đối với nhà phát triển Unreal, phương pháp thiết lập hãy xem nút bản thiết kế trong Hình 3-2-2.

Cài đặt VIVE OpenXR
OpenXR là tiêu chuẩn mở cung cấp một bộ API chung để phát triển các ứng dụng XR chạy trên nhiều loại thiết bị VR, được phát triển bởi Khronos Group. VIVE Focus 3 và VIVE XR Elite cũng hỗ trợ OpenXR, VIVE OpenXR SDK cung cấp hỗ trợ toàn diện cho các thiết bị HTC VR, cho phép các nhà phát triển xây dựng Allin-One và nội dung với Unity và Unreal engine trên các thiết bị HTC VR. Chúng tôi liên tục tối ưu hóa và giải quyết nhiều lỗi khác nhau, vì vậy chúng tôi khuyến nghị các nhà phát triển cập nhật phiên bản FOTA của thiết bị để luôn cập nhật. Hiện tại, VIVE OpenXR SDK hỗ trợ OpenGL ES và Vulkan.
4.1 Nội dung VR
4.1.1 Tốc độ làm mới màn hình
Khái niệm ở đây tương tự như 3.1.1 Tốc độ làm mới màn hình.
- Đối với nhà phát triển gốc, hãy tham khảo XrEventDataDisplayRefreshRateChangedFB.
- Đối với nhà phát triển Unity, hãy tham khảo hướng dẫn này.
- Đối với nhà phát triển Unreal, hãy tham khảo hướng dẫn này.
4.1.2 Độ phân giải đệm mắt
Khái niệm ở đây tương tự như 3.1.2 Độ phân giải đệm mắt. Chúng tôi khuyên bạn không nên giảm hệ số tỷ lệ xuống dưới 0.7 vì điều này có thể dẫn đến chất lượng hình ảnh không thể chấp nhận được.
- Đối với nhà phát triển gốc, hãy tham khảo xrCreateSwapchain. Khi điều chỉnh kích thước, bạn nên nhân chiều rộng và chiều cao theo tỷ lệ.
- Đối với nhà phát triển Unity, hãy tham khảo ví dụ sauample // C#
XRSettings.eyeTextureResolutionScale = 0.7f; //khuyến nghị 1.0f~0.7f - Để biết cài đặt Unreal, hãy tham khảo hướng dẫn này.
4.1.3 ĐaView Kết xuất
Khái niệm ở đây tương tự như 3.1.3 ĐaView Rendering. Tính năng này làm giảm tải cho CPU, GPU cũng có một số lợi ích. Chúng tôi khuyên bạn nên bật tính năng này.
- Đối với nhà phát triển bản địa, KhronosGroup cung cấp OpenXR Multi-View example, hãy tham khảo hướng dẫn này.
- Đối với nhà phát triển Unity, hãy tham khảo Chế độ kết xuất, một lần chạy là nhiều lầnview tính năng.
- Đối với nhà phát triển Unreal, cũng như với cài đặt VIVE Wave, hãy tham khảo hướng dẫn này.
4.1.4 Foveation [Không hỗ trợ Unreal]
Khái niệm ở đây tương tự như 3.1.4 Foveation. Kết xuất Foveated chủ yếu được thiết kế để giảm tải GPU nhưng việc kích hoạt nó sẽ phải chịu chi phí hiệu suất GPU cố định và nếu foveation được đặt quá thấp và một số vật liệu hoặc kết cấu nhất định được sử dụng, nó có thể trở nên rất
người dùng có thể nhận thấy. Do đó, bạn nên bật hoặc tắt tính năng này dựa trên các yêu cầu cụ thể và cân nhắc về hiệu suất của mình. Hiện tại, chức năng Foveated chỉ được hỗ trợ trong OpenGL ES trên VIVE OpenXR SDK.
- Đối với nhà phát triển bản địa, tính năng này khả dụng, nhưng hiện tại, không có exampcác tập tin được cung cấp.
- Đối với nhà phát triển Unity, hãy tham khảo hướng dẫn này.
- Đối với nhà phát triển Unreal, hiện tại chưa hỗ trợ tính năng này.
4.1.5 Render Mask [Không hỗ trợ Unreal]
Khái niệm ở đây tương tự như Render Mask 3.1.8.
- Đối với nhà phát triển Native, hãy sử dụng XrVisibilityMaskKHR để lấy Mesh. Trước khi render cảnh, hãy sử dụng Mesh này để điền giá trị bộ đệm độ sâu trước khi render cảnh.
- Đối với nhà phát triển Unity, tính năng Render Mask được bật theo mặc định cho OpenGL ES và có thể tắt bằng mã sau; Vulkan hiện không hỗ trợ tính năng này. //C# UnityEngine.XR.XRSettings.occlusionMaskScale = 0.0f;
- Đối với nhà phát triển Unreal, hiện tại không hỗ trợ tính năng Render Mask.
4.2 Nội dung MR
OpenXR hiện không hỗ trợ cài đặt Chất lượng truyền qua và Tốc độ khung hình. Chúng tôi sẽ tiếp tục tối ưu hóa và sửa lỗi tính năng Truyền qua, do đó khuyến nghị các nhà phát triển cập nhật phiên bản FOTA của thiết bị để luôn cập nhật.
Tối ưu hóa chung
5.1 Tắt chế độ hiệu suất cao
Tắt “Chế độ hiệu suất cao” có thể làm giảm kích thước màn hình của thiết bị, do đó làm giảm mức sử dụng GPU. Nhược điểm là độ phân giải màn hình giảm. Bạn có thể cân bằng chất lượng và hiệu suất để quyết định có bật chế độ này hay không.
Vị trí cài đặt cho VIVE Focus 3 được hiển thị trong Hình 5-1-1:

Vị trí cài đặt cho VIVE XR Elite được hiển thị trong Hình 5-1-2:

5.2 điểmampling Anti-Aliasing
Đa bộiampling is an anti-aliasing technique used to smooth out jagged edges, usually is accelerated through hardware, which incurs GPU performance cost. We recommend not setting MSAA higher than 2x because more hight value will consume more gpu usage.
- Đối với nhà phát triển bản địa, MSAA OpenGL ES exsampbạn có thể tham khảo điều này; MSAA Vulkan cũampBạn có thể tham khảo thêm ở đây.
GPU Adreno cung cấp tiện ích mở rộng giúp tối ưu hóa MSAA. - Đối với nhà phát triển Unity, hãy tham khảo nhóm này.
- For Unreal developer, refer to this guild. Unreal also has provide post processing anti-aliasing, refer to this guild.
5.3 Tải/Lưu trữ GMEM
Trong kiến trúc GPU Adreno, có một tính năng mà khi liên kết một Render Target, nếu Render Target không xóa hoặc vô hiệu hóa, mỗi lần render xảy ra, các giá trị trong Render Target được tải vào Bộ nhớ đồ họa, được gọi là Tải GMEM. Nếu các giá trị trước đó không cần thiết, hãy xóa hoặc vô hiệu hóa Render Target trước khi render, có thể tránh tình huống này để cải thiện hiệu suất GPU.
Bạn có thể tránh GMEM Load bằng các phương pháp sau. Trong OpenGL ES, sau khi liên kết FBO, bạn có thể gọi glClear và glClearDepth để xóa bộ đệm Color, Depth và Stencil hoặc gọi glInvalidateFramebuffer để vô hiệu hóa Render Target đã chỉ định. Trong Vulkan, không cần hướng dẫn bổ sung; bạn có thể thiết lập rõ ràng xem có xóa tệp đính kèm trước khi sử dụng trong VkAttachmentDescription.loadOp hay không.
Tương tự như vậy, việc lưu trữ kết quả của Tile Render trở lại Bộ nhớ chính từ Bộ nhớ đồ họa được gọi là GMEM Store; thao tác này cũng tốn kém cho GPU. Để tránh điều này, chúng tôi khuyên bạn chỉ nên liên kết các Render Target cần thiết để ngăn chặn các thao tác Store không cần thiết.
5.4 Lớp thành phần (Nhiều lớp)
Kết cấu hiển thị bằng Multi-Layer có chất lượng hình ảnh tốt hơn. Tuy nhiên, tính năng này làm tăng đáng kể hiệu suất GPU với số lượng lớp và kích thước của kết cấu. Chúng tôi khuyên bạn không nên sử dụng quá ba lớp.
- Đối với nhà phát triển bản địa,
o VIVE Wave SDK sử dụng WVR_SubmitFrameLayers để truyền dữ liệu cho từng lớp.
o VIVE OpenXR SDK đưa dữ liệu lớp vào XrFrameEndInfo và gửi dữ liệu này qua xrEndFrame. - Đối với nhà phát triển Unity,
o Cài đặt VIVE Wave SDK, hãy tham khảo hướng dẫn này,
o Cài đặt VIVE OpenXR, hãy tham khảo hướng dẫn này. - Đối với nhà phát triển Unreal,
o Cài đặt VIVE Wave SDK, hãy tham khảo hướng dẫn này.
o Cài đặt VIVE OpenXR, hãy tham khảo hướng dẫn này.
5.5 CPU tăng đột biến
Khi CPU tải nặng hơn, một số luồng xử lý nền có mức độ ưu tiên cao có thể làm gián đoạn quá trình thực thi gốc. Chúng tôi không thể đảm bảo rằng Ứng dụng Nội dung sẽ không bị gián đoạn bởi luồng khác.
If such issues arise, you can try increasing the thread priority to see if it resolves the problem. But if you change the thread configuration to optimize for devices, you need to check if this has any negative impact.
- Đối với Unity Developer, hãy tham khảo tính năng cấu hình luồng Android. Nếu bạn đang sử dụng VIVE Wave SDK, chúng tôi có một tính năng trong WaveXRSettings cho phép bạn điều chỉnh mức độ ưu tiên, như thể hiện trong Hình 5-5-2. Giá trị nhỏ hơn biểu thị mức độ ưu tiên cao hơn.

- Unreal không có phương pháp nào để thay đổi luồng trò chơi, luồng kết xuất và mức độ ưu tiên của luồng RHI thông qua các thiết lập bên ngoài trừ khi bạn sửa đổi mã công cụ.
Bản quyền © 2024 HTC Corporation. Mọi quyền được bảo lưu
Tài liệu / Tài nguyên
![]() |
Hiệu suất kết xuất VIVE VR [tập tin pdf] Hướng dẫn sử dụng Hiệu suất kết xuất VR, Hiệu suất kết xuất, Hiệu suất |
