Làm theo các phương pháp hay nhất sau đây để tối ưu hoá giao diện và hiệu suất của hoạ tiết trò chơi trên Android.
Hoạ tiết là yếu tố cốt lõi đối với đồ hoạ 3D. Trò chơi 3D chạy tốt trên nhiều thiết bị nhất chính là trò chơi có đồ hoạ 3D được thiết kế để khai thác tối đa trình xử lý đồ hoạ. Hướng dẫn này nêu bật cách tối ưu hoá và các phương pháp hay nhất về hoạ tiết trên thiết bị di động để giúp trò chơi hoạt động hiệu quả hơn, đồng thời giảm thiểu mức tiêu thụ điện năng trong khi vẫn duy trì chất lượng hình ảnh cao.
Các phần của bài viết này dựa trên nội dung do Arm Limited giữ bản quyền và đóng góp.
Tạo tập bản đồ hoạ tiết
Tập bản đồ hoạ tiết là một hoạ tiết được thiết kế để chứa dữ liệu hình ảnh của nhiều đối tượng đồ hoạ, chẳng hạn như lưới 3D hay sprite 2D. Thay vì mỗi đối tượng có một hoạ tiết riêng, hoạ tiết tập bản đồ được dùng để kết hợp hình ảnh từ từng đối tượng.

Việc giảm thiểu số hàm gọi vẽ của khung trò chơi là yếu tố quan trọng để đạt được hiệu suất kết xuất tối ưu. Việc sử dụng cùng một hoạ tiết cho các đối tượng khác nhau là yếu tố để kết hợp các đối tượng đó vào một hàm gọi vẽ duy nhất. Việc giảm số hàm gọi vẽ đặc biệt quan trọng đối với trò chơi bị giới hạn bởi CPU, vì mỗi hàm gọi vẽ sẽ gây ra mức hao tổn CPU khi được trình điều khiển đồ hoạ xử lý. Tập bản đồ hoạ tiết cũng làm giảm số lượng tệp tài sản hoạ tiết trong dữ liệu thời gian chạy của trò chơi. Hàng trăm hoặc thậm chí hàng nghìn hoạ tiết có thể được hợp nhất thành lượng tập bản đồ hoạ tiết nhỏ hơn nhiều.
Bạn nên lên kế hoạch cho bố cục tập bản đồ hoạ tiết khi tạo lưới 3D. Nếu tập bản đồ được biên soạn trước khi tạo tài sản lưới, thì thành phần lưới phải là UV được khám phá theo tập bản đồ hoạ tiết. Nếu tập bản đồ được tạo sau khi biên soạn bằng cách sử dụng công cụ tạo tập bản đồ hay hợp nhất trong phần mềm hội hoạ, thì cần phải sắp xếp lại đảo UV theo hoạ tiết.
Tạo lô hàm gọi vẽ theo công cụ
Công cụ phát triển trò chơi Unity có tính năng tạo lô hàm gọi vẽ có thể tự động kết hợp các đối tượng. Để đủ điều kiện tạo lô tự động, các đối tượng phải dùng chung một vật liệu, bao gồm cả hoạ tiết, và được đánh dấu là tĩnh.
Unreal Engine 4 đòi hỏi thiết lập thủ công để tạo lô. Bạn có thể hợp nhất các đối tượng trong phần mềm 3D trước khi nhập vào Unreal. Unreal cũng bao gồm công cụ UE4 Actor Merging có thể kết hợp các lưới và tạo tệp tập bản đồ hoạ tiết.
Tạo mipmap
Mipmap là các phiên bản có độ phân giải thấp hơn của hoạ tiết. Một tập hợp mipmap cho một hoạ tiết nhất định được gọi là một chuỗi mipmap. Mỗi cấp mipmap phía sau trong chuỗi có độ phân giải thấp hơn cấp trước đó. Mipmap được dùng để triển khai LOD (mức độ chi tiết) của hoạ tiết trong khi kết xuất. Khi một hoạ tiết được tạo mipmap liên kết với một cấp độ hoạ tiết, phần cứng đồ hoạ sẽ sử dụng không gian hoạ tiết do một mảnh chiếm giữ để chọn một cấp trong chuỗi mipmap. Khi kết xuất cảnh 3D, đối tượng ở xa máy ảnh sẽ sử dụng mipmap có độ phân giải thấp hơn so với cùng đối tượng đó khi ở gần máy ảnh hơn.
Chất liệu được tạo mipmap sẽ sử dụng nhiều bộ nhớ hơn so với hoạ tiết không được tạo mipmap. Các cấp mipmap bổ sung sẽ tăng 33% mức sử dụng bộ nhớ của hoạ tiết. Nếu một hoạ tiết được vẽ ở một khoảng cách cố định so với máy ảnh, thì việc tạo mipmap sẽ gây lãng phí bộ nhớ.

Việc sử dụng đúng mipmap sẽ cải thiện hiệu suất GPU. Việc cung cấp các cấp mipmap có độ phân giải thấp hơn giúp giảm mức sử dụng băng thông của bộ nhớ và cải thiện khả năng lưu trữ của bộ nhớ đệm hoạ tiết.
Việc tạo mipmap cũng giúp cải thiện chất lượng hình ảnh bằng cách giảm tình trạng răng cưa của hoạ tiết. Bạn có thể nhận thấy tình trạng răng cưa của hoạ tiết qua hiệu ứng chập chờn ở các khu vực cách xa máy ảnh.

Thông tin chi tiết về mipmap theo công cụ
Unreal Engine 4 đòi hỏi kích thước hoạ tiết là luỹ thừa của 2 (ví dụ: 512x1024, 128x128) để có thể tạo mipmap. Không thể tạo chuỗi mipmap nếu một hoặc cả hai chiều kích thước của hoạ tiết không phải là luỹ thừa của 2.
Công cụ Unity sẽ tự động chuyển tỷ lệ các hoạ tiết có kích thước không phải là luỹ thừa của 2 để tạo mipmap. Đảm bảo tệp hoạ tiết nguồn có kích thước là luỹ thừa của 2 để tránh bị chuyển tỷ lệ.
Chọn chế độ lọc hoạ tiết thích hợp
Lọc hoạ tiết là một tính năng kết xuất phần cứng ảnh hưởng đến hình ảnh trực quan của hình tam giác được kết xuất. Việc sử dụng tính năng lọc hoạ tiết đúng cách có thể cải thiện chất lượng hình ảnh của cảnh. Có nhiều chế độ lọc hoạ tiết, mỗi chế độ có sự cân bằng khác nhau giữa mức cải thiện kết xuất hình ảnh và chi phí. Chi phí bao gồm cả thời gian tính toán và băng thông bộ nhớ. Ba chế độ lọc hoạ tiết thường thấy là: gần nhất (hoặc điểm), song tuyến tính và tam tuyến tính. Không đẳng hướng là một phương thức lọc hoạ tiết bổ sung có thể kết hợp với bộ lọc song tuyến tính hoặc tam tuyến tính.
Gần nhất
Gần nhất là chế độ lọc hoạ tiết đơn giản và ít tốn kém nhất. Bộ lọc gần nhất lấy mẫu một texel duy nhất bằng cách sử dụng các toạ độ được chỉ định trong hoạ tiết nguồn. Hình tam giác kết xuất bằng bộ lọc gần nhất sẽ bị bết khối hoặc vỡ ảnh, nhất là khi kết xuất gần máy ảnh.
Song tuyến tính
Bộ lọc song tuyến tính lấy mẫu bốn texel xung quanh các toạ độ được chỉ định trong hoạ tiết nguồn. Bốn texel này được tính trung bình để xác định màu hoạ tiết của mảnh. Bộ lọc song tuyến tính sẽ giúp các pixel chuyển màu mượt mà hơn, tránh hình ảnh bị bết khối như khi dùng bộ lọc gần nhất. Hình tam giác kết xuất gần máy ảnh sẽ bị mờ thay vì bị vỡ ảnh. Chi phí của bộ lọc song tuyến tính lớn hơn bộ lọc gần nhất do phải lấy mẫu texel bổ sung và tính trung bình.

Tam tuyến tính
Khi kết xuất lưới trong điều kiện khoảng cách từ các đỉnh đến máy ảnh thay đổi, bạn có thể chọn nhiều cấp mipmap trong quá trình kết xuất. Những thay đổi giữa hai cấp mipmap có thể dẫn đến sự sụt giảm đáng kể tại điểm chuyển đổi. Bộ lọc tam tuyến tính sẽ làm mềm sự chuyển đổi này bằng cách thực hiện lọc song tuyến tính trên hai cấp mipmap khác nhau rồi nội suy kết quả. Việc sử dụng nhiều cấp mipmap và nội suy khiến bộ lọc tam tuyến tính có chi phí tính toán lớn hơn so với bộ lọc song tuyến tính.

Không đẳng hướng
Bộ lọc không đẳng hướng làm tăng chất lượng hình ảnh của lưới có hoạ tiết được kết xuất ở một góc cực hạn so với máy ảnh. Mặt đáy là một ví dụ phổ biến về loại lưới này. Để sử dụng bộ lọc không đẳng hướng, phải tạo mipmap cho hoạ tiết. Bạn có thể thiết lập tỷ lệ hoặc mức lọc không đẳng hướng được áp dụng khi kết xuất. Chi phí của bộ lọc không đẳng hướng sẽ tăng khi mức lọc tăng.

Chiến lược lựa chọn chế độ
Bộ lọc song tuyến tính thường là sự cân bằng tốt nhất giữa hiệu suất và chất lượng hình ảnh. Bộ lọc tam tuyến tính đòi hỏi băng thông bộ nhớ lớn hơn đáng kể và nên được sử dụng có chọn lọc. Trong nhiều trường hợp, bộ lọc song tuyến tính kết hợp với bộ lọc không đẳng hướng mức 2x sẽ hiển thị và hoạt động hiệu quả hơn bộ lọc song tuyến tính kết hợp với bộ lọc không đẳng hướng mức 1x. Việc tăng mức lọc không đẳng hướng quá 2x là cực kỳ tốn kém và nên được sử dụng rất chọn lọc cho các tài sản trò chơi quan trọng.
Vì bộ lọc hoạ tiết có thể chiếm tới một nửa tổng mức tiêu thụ điện năng của GPU nên việc chọn bộ lọc hoạ tiết đơn giản hơn nếu có thể sẽ là cách hiệu quả để giảm nhu cầu năng lượng của trò chơi.
Tối ưu hoá kích thước hoạ tiết
Hãy đảm bảo kích thước hoạ tiết nhỏ nhất có thể trong khi vẫn đạt được chất lượng hình ảnh mong muốn. Xem lại tài sản hoạ tiết để kiểm tra xem có hoạ tiết lớn một cách bất hợp lý không. Nguyên tắc này áp dụng cho cả hoạ tiết rời và hoạ tiết tập bản đồ. Nếu trò chơi hỗ trợ nhiều thiết bị, bao gồm nhiều loại độ phân giải và hiệu suất, bạn hãy cân nhắc tạo phiên bản tài sản hoạ tiết có độ phân giải thấp và cao cho loại thiết bị thích hợp.
Khi kết xuất lưới có sử dụng nhiều hoạ tiết trong vật liệu, hãy cân nhắc giảm độ phân giải của một số hoạ tiết. Ví dụ: khi sử dụng hoạ tiết khuếch tán 1024x1024, việc giảm hoạ tiết bản đồ kim loại hay độ nhám xuống 512x512 có thể chỉ ảnh hưởng rất nhỏ đến chất lượng hình ảnh. Hãy xác minh tác động của tất cả thử nghiệm đổi kích thước đó để đảm bảo không ảnh hưởng đến mức chất lượng mong muốn.
Sử dụng hệ màu phù hợp
Nhiều gói phần mềm dùng để biên soạn hoạ tiết hoạt động và xuất dữ liệu bằng hệ màu sRGB. Hoạ tiết khuếch tán (được xử lý dưới dạng màu) có thể sử dụng hệ màu sRGB. Bạn không nên xuất hoạ tiết không được xử lý dưới dạng màu, chẳng hạn như bản đồ độ nhám, kim loại, hoặc bản đồ pháp tuyến, trong hệ màu sRGB.
Chế độ cài đặt hoạ tiết trong công cụ phát triển trò chơi bao gồm một thông số cho biết hoạ tiết có sử dụng hệ màu sRGB hay không.

Vì dữ liệu pixel của hoạ tiết đó không được dùng làm dữ liệu màu, nên việc sử dụng hệ màu sRGB sẽ tạo ra hình ảnh không chính xác.

Sử dụng nén hoạ tiết
Nén hoạ tiết là một thuật toán nén hình ảnh được áp dụng cho dữ liệu pixel không nén, nhờ đó phần cứng đồ hoạ có thể giải nén hoạ tiết nhanh chóng trong khi kết xuất. Việc sử dụng nén hoạ tiết hiệu quả có thể làm giảm mức sử dụng bộ nhớ và tăng hiệu suất nhưng chỉ tác động tối thiểu đến chất lượng hình ảnh. Ba thuật toán nén hoạ tiết phổ biến nhất trên Android: ETC1, ETC2 và ASTC. Đối với các trò chơi hiện đại, ASTC thường là lựa chọn chính tốt nhất, trong đó ETC2 là một lựa chọn dự phòng nếu trò chơi nhắm đến các thiết bị không hỗ trợ ASTC.
ETC1
ETC1 được tất cả thiết bị Android hỗ trợ. ETC1 chỉ hỗ trợ chế độ dữ liệu màu RGB 4 bit cho mỗi pixel. ETC1 không hỗ trợ kênh alpha. Nhiều công cụ phát triển trò chơi hỗ trợ ETC1 cho phép chỉ định một hoạ tiết ETC1 thứ hai để biểu thị dữ liệu kênh alpha.
ETC2
ETC2 được hơn 90% thiết bị Android đang hoạt động hỗ trợ. Các thiết bị rất cũ không hỗ trợ API OpenGL ES 3.0 không thể sử dụng ETC2. So với ETC1, ETC2 bổ sung thêm:
- Hỗ trợ kênh alpha, cả 8 bit và 1 bit "punchthrough"
- Các phiên bản sRGB của hoạ tiết RGB và RGBA
- Hoạ tiết kênh đơn R11 và kênh kép RG11
ASTC
ASTC được hơn 75% thiết bị Android đang hoạt động hỗ trợ. ASTC có kích thước khối nén có thể định cấu hình, cho phép bạn kiểm soát chi tiết để cân bằng tỷ lệ nén với chất lượng hình ảnh cho một hoạ tiết cụ thể. ASTC thường có thể đạt được chất lượng vượt trội ở cùng dung lượng bộ nhớ với ETC2 hoặc đạt số lượng tương đương ở dung lượng bộ nhớ nhỏ hơn ETC2.

Tốc độ nén hoạ tiết
Việc nén hoạ tiết có thể mất nhiều thời gian nếu trò chơi có nhiều hoạ tiết. Cả ETC và ASTC đều có các tuỳ chọn cài đặt về chất lượng nén cho người dùng lựa chọn. Chế độ cài đặt chất lượng cao hơn sẽ cần nhiều thời gian nén hơn. Trong quá trình phát triển, bạn nên giảm mức chất lượng để giảm thời gian nén và tăng mức chất lượng trước khi tạo bản dựng quan trọng.
Nén hoạ tiết trong công cụ phát triển trò chơi
Nếu đang sử dụng công cụ phát triển trò chơi, bạn có thể phải chọn định dạng nén hoạ tiết (ETC hoặc ASTC) ở cấp dự án. Để hỗ trợ nhiều định dạng nén nhằm đạt được khả năng tương thích tối đa, bạn có thể phải thực hiện thêm một số thao tác. Tính năng Nhắm mục tiêu định dạng nén hoạ tiết của Google Play Asset Delivery có thể hỗ trợ đưa nhiều định dạng vào trò chơi và chỉ cung cấp định dạng tối ưu nhất cho một thiết bị riêng lẻ tại thời điểm cài đặt.
Trải phẳng UV
Hãy giữ đảo UV càng thẳng càng tốt. Việc này hỗ trợ hoạ tiết theo các cách sau:
- Đóng gói đảo UV dễ dàng hơn, nhờ đó bớt lãng phí không gian.
- UV thẳng làm giảm "hiệu ứng cầu thang" trên hoạ tiết.
- Việc đóng gói tốt UV đảm bảo hoạ tiết có độ phân giải tối ưu.
- Tạo hoạ tiết chất lượng tốt hơn, ngay cả khi UV bị méo một chút do làm thẳng.

Đường phân giới hoạ tiết xuất hiện trên mô hình trông không đẹp. Hãy cố gắng đặt đường phân giới UV ở vị trí ít nhìn thấy hơn. Để giúp lập bản đồ pháp tuyến tốt hơn, hãy tách đảo UV tại các cạnh sắc nét và chừa ra một số khoảng trống xung quanh đảo.
Tránh chi tiết không thể thấy được
Khi thiết kế hình ảnh, bạn không nên thêm chi tiết không thấy được, nhất là trên các trò chơi được thiết kế cho những thiết bị có màn hình nhỏ. Đối với một mô hình ghế nhỏ hầu như không thấy được ở góc phòng, việc tạo một hoạ tiết có kích thước 4096x4096 với chi tiết phức tạp là lãng phí. Trong một số trường hợp, bạn có thể cần phóng đại các cạnh (thêm điểm nổi bật bổ sung) và tô bóng để cải thiện khả năng nhận biết hình dạng.

Tích hợp chi tiết
Thiết bị di động có màn hình nhỏ hơn và phần cứng đồ hoạ yếu hơn máy tính cá nhân hoặc máy chơi trò chơi. Thay vì tính toán các hiệu ứng như đổ bóng không gian hoặc vùng sáng phản chiếu trong thời gian chạy, bạn hãy cân nhắc việc "tích hợp" chúng vào hoạ tiết khuếch tán khi có thể. Điều này giúp cải thiện hiệu suất và đảm bảo khả năng hiển thị chi tiết.

Sử dụng tính năng phủ màu
Nếu bạn có thể tạo chương trình đổ bóng tuỳ chỉnh và sở hữu lưới có bảng phối màu tương tự hoặc đồng nhất, hãy cân nhắc sử dụng tính năng phủ màu cho lưới hiện có. Với tính năng phủ màu, hoạ tiết thang màu xám được sử dụng, giúp chiếm ít bộ nhớ hơn so với hoạ tiết RGB. Chương trình đổ bóng áp dụng dữ liệu màu trên mỗi đỉnh để tô màu lưới. Một phương pháp phủ màu thay thế là sử dụng mặt nạ RGB và áp dụng hoạ tiết dựa trên dải màu của mặt nạ.

Đóng gói kênh hoạ tiết
Khi kết xuất vật liệu có nhiều hoạ tiết, hãy tìm cơ hội kết hợp các hoạ tiết chỉ sử dụng một kênh màu duy nhất thành một hoạ tiết duy nhất sử dụng cả ba kênh màu. Điều này làm giảm mức sử dụng bộ nhớ và giảm số lượng thao tác lấy mẫu hoạ tiết của chương trình đổ bóng theo mảnh.

Khi đóng gói, hãy chỉ định dữ liệu chi tiết nhất cho kênh màu xanh lục. Vì mắt người nhạy cảm với màu xanh lục hơn nên phần cứng đồ hoạ thường gán nhiều bit cho kênh màu xanh lục hơn. Ví dụ: bản đồ độ nhám/độ mượt thường có nhiều chi tiết hơn bản đồ kim loại và là lựa chọn phù hợp hơn để gán kênh màu xanh lục.
Đối với vật liệu sử dụng kênh alpha, nếu bạn chỉ đang sử dụng hai kênh trong hoạ tiết dạng đóng gói, hãy xem xét đặt dữ liệu kênh alpha vào hoạ tiết dạng đóng gói thay vì hoạ tiết khuếch tán. Tuỳ thuộc vào định dạng của hoạ tiết khuếch tán, bạn có thể giảm kích thước hoặc tăng chất lượng hình ảnh bằng cách loại bỏ dữ liệu kênh alpha.

Hãy đảm bảo rằng hoạ tiết dạng đóng gói được đặt thành hệ màu RGB tuyến tính chứ không phải sRGB.
Lập bản đồ pháp tuyến
Lập bản đồ pháp tuyến là một kỹ thuật giúp mô hình 3D xuất hiện chi tiết mà không cần sử dụng thêm hình dạng. Các đặc điểm như nếp nhăn hoặc bu lông đòi hỏi nhiều hình tam giác để mô hình hoá có thể được mô phỏng bằng cách sử dụng bản đồ pháp tuyến. Việc lập bản đồ pháp tuyến có thể phù hợp hoặc không phù hợp, tuỳ thuộc vào phong cách đồ hoạ và định hướng của trò chơi.

Bản đồ pháp tuyến sẽ làm phát sinh một số chi phí hiệu suất, nên cần được sử dụng một cách hạn chế trên các thiết bị yếu hơn. Bản đồ pháp tuyến đòi hỏi thêm hoạ tiết, dẫn đến việc lấy mẫu hoạ tiết bổ sung và tính toán trong chương trình đổ bóng theo mảnh.
Các phương pháp hay nhất về bản đồ pháp tuyến
Dưới đây là một số phương pháp hay nhất để lập bản đồ pháp tuyến:
Sử dụng lồng
Lồng là phiên bản mở rộng hoặc phiên bản phát hành của mô hình đa giác thấp. Lồng cần bao gồm mô hình đa giác cao để hoạt động tốt trong quá trình tích hợp bản đồ pháp tuyến. Lồng dùng để hạn chế khoảng cách truyền tia trong quá trình tích hợp bản đồ pháp tuyến và giúp tránh sự cố với việc phân tách đường phân giới pháp tuyến trên bản đồ pháp tuyến.


Tích hợp trùng khớp theo tên lưới
Nếu phần mềm tích hợp của bạn hỗ trợ, hãy tích hợp trùng khớp theo tên lưới. Tính năng này giúp làm giảm vấn đề chiếu sai bản đồ pháp tuyến. Khi ở khoảng cách quá gần nhau, các đối tượng có thể bất ngờ chiếu bản đồ pháp tuyến lên sai mặt. Khớp theo tên lưới đảm bảo việc tích hợp chỉ được thực hiện trên đúng bề mặt. Để biết thêm thông tin về tính năng này trong Substance Painter, hãy xem trang này. Để biết thêm thông tin về tính năng này trong Marmoset Toolbag, hãy xem trang này.
Nổ lưới
Nếu bạn không thể khớp theo tên lưới khi tích hợp, hãy cân nhắc việc nổ lưới. Việc nổ lưới sẽ di chuyển các phần ra xa nhau để bản đồ pháp tuyến không chiếu lên sai bề mặt. Nếu đang tích hợp để đổ bóng không gian, bạn có thể phải thực hiện việc tích hợp riêng biệt bằng một lưới không bị nổ.

Thu nhỏ đường phân giới
UV liền mạch trên các cạnh cứng sẽ gây ra các đường phân đoạn hiển thị, bạn hãy phân tách UV trên các cạnh cứng để giảm thiểu tác động này. Theo quy tắc chung, khi thiết lập các nhóm làm mượt, hãy giữ cho góc nhỏ hơn 90 độ. Đường phân giới UV cần có nhóm làm mượt khác trên các tam giác.