[CODEWELL] TỐI ƯU HÓA ỨNG DỤNG VR

12/12/2018 420
Untitled 2
CODEWELL

Bằng cách tạo ra môi trường ảo tách biệt với môi trường thật, ứng dụng VR đang dần thay đổi trải nghiệm và tương tác của người dùng. Và để cải thiện hơn nữa những trải nghiệm trên, thì Tối ưu hóa là một bước cực kỳ thiết yếu, cần được thực hiện từ đầu và thường xuyên lặp lại. Vậy có những cách thức nào để có thể thực hiện được công đoạn Tối ưu này? Cùng xem ngay bộ bí kíp ngắn gọn trong số CODEWELL kỳ này nha!

Trước hết thì VR là gì?

VR – Virtual Reality, hay Thực tế ảo, là một công nghệ có khả năng đưa bạn vào một thế giới ảo, nơi bạn tách biệt hoàn toàn với môi trường thật và trải nghiệm không gian được tạo ra bởi máy tính.
Bạn có thể thấy được những hình ảnh, không gian ảo này nhờ vào việc sử dụng các thiết bị chuyên dụng như Oculus Rift, HTC Vive, Sony PlayStation VR…

Câu hỏi đặt ra là Tại sao phải Tối ưu hóa ứng dụng VR?

Hầu hết những hình ảnh chúng ta thấy trong môi trường VR sẽ không có được chất lượng đẹp như khi nhìn trên máy tính. Lý do là tại sao?

Các thiết bị VR yêu cầu một cấu hình máy khá cao, vậy nên máy tính phải đảm nhiệm hai công việc cùng lúc: vừa phải chạy ứng dụng, lại vừa phải dành phần lớn phần cứng cho việc hiển thị hình ảnh lên kính VR.
Chính vì vậy, nhằm “giảm tải” cho máy tính, có một số nguyên tắc/kỹ thuật mà bạn có thể áp dụng.

 

Một số nguyên tắc chính trong tối ưu hóa ứng dụng VR:

Geometry
LOD (Level Of Detail)
Light-mapping
Occlusion Culling
Asynchronous Loading
Quality Settings

1. GEOMETRY

Geometry là loại bỏ những bề mặt không cần nhìn thấy của model 3D; và người lập trình cũng không cần phải render (kết xuất) các bề mặt đó.

VD: Bộ giường hoặc tủ nếu được đặt sát tường thì không cần vẽ mặt sau.

2. LOD (Level of Detail) 

Khi vật thể nằm càng xa tầm nhìn thì chúng ta có thể giảm mức độ tỉ mỉ khi vẽ vật đó bằng cách đưa model về dạng ít lưới (low poly). Bằng cách này, LOD sẽ giảm tải cho phần cứng và cải thiện hiệu suất render.

Ví dụ: Thay vì vẽ một đường cong, ta có thể sử dụng nhiều nét thẳng.

3. LIGHT-MAPPING

Light-mapping là quá trình tính toán trước độ sáng của các bề mặt, và tạo ra một “bản đồ” (map) về ánh sáng và bóng đổ.
Bạn nên hạn chế ánh sáng và bóng đổ thời gian thực (real time) để giảm tải cho máy. Thay vào đó, có thể đặt nguồn sáng cố định và “nướng” (bake) ánh sáng nhằm tạo ra phần bóng cố định.

Ví dụ: Thay vì chiếu đèn vào căn phòng (ảnh trái), ta xác định vị trí bóng và tô cố định phần bóng đó (ảnh phải).

4. OCCLUSION CULLING

Occlusion Culling sẽ tắt hiển thị những gì đang không nhìn thấy trực tiếp trên VR.
Ví dụ, người lập trình sẽ không phải render căn phòng bên cạnh nếu cánh cửa hiện tại vẫn đóng và không thể nhìn thấy phòng đó.

Ví dụ: Không cần hiển thị khối vuông vì bức tường đã che tầm nhìn.

5. ASYNCHRONOUS LOADING

Có thể bạn sẽ muốn chia nhỏ project để có thể tăng hiệu suất. Chính vì vậy, bước chuyển sang cảnh khác sẽ được tải ngầm để triển khai một cách mượt mà khi có yêu cầu từ người tương tác
Nguyên tắc này thường đi kèm với các thông báo như “Loading” “Moving” “Going back” “Exitting”…

6. QUALITY SETTINGS

Tùy theo cấu hình mỗi máy mà cài đặt chất lượng hiển thị hình ảnh cho ứng dụng VR khác nhau để có được trải nghiệm tốt nhất.
Nên thiết lập cấu hình sao cho ứng dụng VR chạy được ở mức tối thiểu là 30 fps (fps: số khung hình trên giây), và 60fps ở mức recommend.

TỔNG KẾT

Còn rất nhiều nguyên tắc cũng như kỹ thuật hữu ích khác có thể sử dụng khi bạn muốn cải thiện hiệu suất của ứng dụng VR.
Tổng kết lại, những gì bạn thấy trên VR có thể sẽ không đẹp như những gì bạn tưởng tượng.
Chính vì vậy, để trở thành một lập trình viên VR xử lí tốt tối ưu hóa, bạn cần thêm cả những kĩ năng của một designer.

Tham khảo bài viết trên fanpage TẠI ĐÂY và rất nhiều thông tin hữu ích liên quan đến các mảng ngôn ngữ lập trình khác tại Fanpage CO-WELL Asia nhé!

Tags: ,