Com2uS sử dụng Vulkan để cải thiện đồ hoạ

Ảnh chụp màn hình biểu trưng trò chơi trong Com2uS Chronicles.

Summoners War: Chronicles US(WW)KR của Com2uS sử dụng độc quyền Vulkan để kết xuất hình ảnh trên Android, giúp cải thiện hiệu suất lên đến 30%.

Vulkan là một API đồ hoạ 3D hiện đại, đa nền tảng, được thiết kế để giảm thiểu sự trừu tượng giữa phần cứng đồ hoạ của thiết bị và trò chơi của bạn. Vulkan có mức hao tổn CPU thấp hơn so với OpenGL ES và cung cấp nhiều tính năng hơn.

Hình 1. Ảnh chụp màn hình trong trò chơi.
Hình 2. Video trong trò chơi.

Các tính năng kết xuất

Com2uS đã phát triển các tính năng kết xuất nâng cao cho Summoners War: Chronicles, bao gồm:

  • Hệ thống kết xuất muộn tuỳ chỉnh với tính năng loại bỏ ánh sáng trước khi kết xuất và tối đa 16 nguồn sáng đang hoạt động trong phương diện xem cùng một lúc
  • Phương thức tạo bản sao kết xuất gián tiếp (gọi là Clay) để vẽ nhiều lưới, chất liệu và hoạ tiết cùng một lúc
  • Sử dụng rộng rãi chương trình đổ bóng điện toán cho các tác vụ kết xuất trước
  • Khả năng tự động điều chỉnh hiệu ứng kết xuất bóng và hiệu ứng xử lý hậu kỳ đang hoạt động dựa trên chuyển động của máy ảnh, các tuỳ chọn đồ hoạ và hiệu suất thời gian chạy

Điều chỉnh cho phù hợp với phần cứng trên thiết bị di động

Summoners War: Chronicles sử dụng cùng một trình kết xuất cho các thiết bị Android, máy tính cá nhân và máy chơi trò chơi chuyên dụng. Để đạt được hiệu suất tối ưu trên phần cứng di động, Com2uS đã điều chỉnh các chế độ cài đặt kết xuất, bao gồm cả độ sâu và mật độ vẽ. Để phù hợp với một số thiết bị chạy Android 11 (API cấp 30) trở xuống, Com2uS đã tạo các phiên bản thay thế của một số chương trình đổ bóng và sử dụng số lượng thực thể giảm. Summoners War: Chronicles cũng sử dụng các tính năng hiệu suất thích ứng trên Android để tự động điều chỉnh các tuỳ chọn đồ hoạ theo điều kiện nhiệt của thiết bị.

Lý do chỉ sử dụng Vulkan

Com2uS chỉ sử dụng Vulkan cho Summoners War: Chronicles vì một số lý do:

  • Yêu cầu tối thiểu về thiết bị loại trừ các thiết bị cũ, kém mạnh mẽ và không có tính năng hỗ trợ Vulkan
  • Các tính năng bắt buộc của Quy trình kết xuất tích hợp (BiRP) của công cụ Unity chỉ có trong phần phụ trợ Vulkan của trò chơi
  • Bạn có thể triển khai các tính năng kết xuất bằng cách sử dụng đầu ra chương trình đổ bóng điện toán và đối tượng vùng đệm lưu trữ chương trình đổ bóng (SSBO) trên Vulkan nhưng không thể triển khai trên OpenGL ES

Tính toán khối lượng công việc

Summoners War: Chronicles thực hiện công việc quan trọng của chương trình đổ bóng điện toán để tạo dữ liệu cho quá trình kết xuất. Chương trình đổ bóng điện toán được dùng để:

  • Loại bỏ đối tượng
  • Kiểm tra va chạm
  • Tác vụ ảnh động
  • Tạo dữ liệu kết xuất gián tiếp

Dữ liệu điện toán thu được sẽ được ghi vào các đối tượng RWBuffer của công cụ Unity. Để đạt được hiệu suất tối ưu, Summoners War: Chronicles chạy tất cả các công việc điện toán bằng một lệnh điều phối duy nhất, yêu cầu sử dụng nhiều RWBuffers đồng thời. Bạn chỉ có thể sử dụng phương pháp này bằng Vulkan, vì phần phụ trợ OpenGL ES của Unity BiRP chỉ hỗ trợ việc sử dụng một RWBuffer duy nhất mỗi lần.

Các tập dữ liệu được tạo để kết xuất thường lớn hơn giới hạn kích thước thiết bị đối với đối tượng vùng đệm đồng nhất (UBOs). Thay vào đó, Summoners War: Chronicles sử dụng các đối tượng vùng đệm bộ nhớ chương trình đổ bóng (SSBO) có giới hạn dung lượng lớn hơn. Tuy nhiên, việc liên kết SSBO với các thao tác trên đỉnh cần có tính năng hỗ trợ SSBO chỉ có thể đọc. OpenGL ES chỉ hỗ trợ SSBO đọc-ghi, trong khi Vulkan có thể đánh dấu SSBO là chỉ có thể đọc.

Kết xuất phiên bản gián tiếp bằng Clay

Đối với Summoners War: Chronicles, Com2uS đã phát triển một phương thức để kết hợp nhiều chất liệu, lưới và hoạ tiết vào một lệnh gọi vẽ. Com2uS gọi hệ thống này là Clay. Clay giúp cải thiện hiệu suất trò chơi thêm 30% nhờ giảm đáng kể số lệnh gọi vẽ.

Clay bắt đầu trong giai đoạn loại bỏ và va chạm bằng cách tạo danh sách các đối tượng hiển thị có thể kết xuất tương thích. Sau đó, Clay sẽ tạo thông tin kết xuất cho từng đối tượng đã xác định thành SSBO. Quá trình này được thực hiện bằng chương trình đổ bóng tính toán, cho phép sử dụng tính năng kết xuất thực thể gián tiếp bằng hàm trình kết xuất Unity DrawMeshInstancedIndirect. Với tính năng kết xuất gián tiếp, thông tin thực thể và các tham số số lượng thực thể được tạo trực tiếp trên GPU. Khi vẽ các đối tượng, thay vì liên kết lưới đối tượng truyền thống, Clay liên kết lưới hình nón như hình minh hoạ:

Hình 3. Lưới hình nón.

Sau đó, Clay sẽ biến đổi lưới hình nón trong chương trình đổ bóng đỉnh bằng cách sử dụng SSBO liên kết của dữ liệu biến đổi đỉnh do chương trình đổ bóng điện toán tạo ra. Bạn cần sử dụng Vulkan để liên kết SSBO với giai đoạn đỉnh. Clay có thể sử dụng nhiều hình nón đã biến đổi để kết xuất một đối tượng. Mức độ phức tạp của đối tượng xác định số lượng hình nón.

Hình 4. Cách lưới hình nón được chuyển đổi thành cây.

Dữ liệu chất liệu cho các đối tượng được phân lô trong một vùng đệm khác do chương trình đổ bóng điện toán tạo ra. Vùng đệm được liên kết với chương trình đổ bóng mảnh. Kết cấu cho các đối tượng đang được vẽ được định cấu hình trong một mảng kết cấu. Chỉ mục mảng cho hoạ tiết của đối tượng được đưa vào dữ liệu chất liệu của đối tượng. Trong điều kiện lý tưởng, Clay có thể kết xuất với tối đa 7 lệnh gọi vẽ:

  • Đối tượng tĩnh
  • Đối tượng ảnh động
  • Bóng (bốn lần lặp lại)
  • Suy ngẫm

Unity cộng với Vulkan

Summoners War: Chronicles minh hoạ rằng sự kết hợp mạnh mẽ giữa công cụ phát triển trò chơi Unity và API đồ hoạ Vulkan cho phép nhà phát triển mang đồ hoạ chất lượng cao của máy chơi trò chơi đến với các thiết bị Android.