[Unity Series 1] Tối ưu hiệu năng Ứng dụng game Unity - Các công cụ tối ưu

Trong Series này, mình sẽ giới thiệu cho các bạn cách tìm ra những nguyên nhân cũng như cách giải quyết các vấn đề về tối ưu hiệu năng ứng dụng Game trong Unity.

7 min read
Bởi Datbq
[Unity Series 1] Tối ưu hiệu năng Ứng dụng game Unity - Các công cụ tối ưu

Tối ưu hóa hiệu năng là rất quan trọng khi nói đến thành công của mục tiêu của bạn. Thông qua tối ưu hóa, bạn có thể tạo ra những ứng dụng và game có dung lượng thấp và chạy mượt mà, nhận được nhiều lượng tải hoặc hoàn thành bất kỳ mục tiêu nào khác của mình.

Trong quá trình làm game và ứng dụng, chắc hẳn tất cả mọi người đã gặp ít nhất một lần nhức đầu với vấn đề dung lượng quá lớn hay FPS quá thấp. Người dùng sẽ càng ít kiên nhẫn khi phải đợi tải một ứng dụng với dung lượng lớn, cũng như vấn đề về dung lượng 3G cần sử dụng để tải ứng dụng của chúng ta. Điều này dẫn đến người dùng cảm thấy ngần ngại trong việc tải ứng dụng. Tương tự với FPS quá thấp, việc giật lag của ứng dụng sẽ gây cảm giác ức chế cho tất cả người dùng. Bạn đừng ngần ngại bỏ ra thêm thời gian để tối ưu dung lượng và ứng dụng cuả mình, nếu bạn không muốn nhận hàng loạt những đánh giá tệ và rating cực thấp cho ứng dụng mà mình đã tốn công sức và tâm huyết để làm. Trong Series bài viết này, mình sẽ giới thiệu cho các bạn cách tìm ra những nguyên nhân cũng như cách giải quyết các vấn đề. Bài viết được tham khảo từ nguồn Performance Optimization Tutorial của Unity.

Trước khi bắt đầu vào tối ưu ứng dụng, việc đầu tiên chúng ta cần làm là xác định nguyên nhân nào gây ra ứng dụng chạy chậm, giật lag. Trong phần 1, mình sẽ giới thiệu cho các bạn các công cụ cực kì hữu ích để kiểm tra hoạt động của ứng dụng. Các công cụ này đã được tích hợp sẵn trong Unity, công việc của các bạn là chỉ cần mở nó và bắt đầu quá trình tối ưu hiệu năng cho ứng dụng cuả mình.

PROFILER WINDOW

Profiler window là công cụ đầu tiên mình sẽ giới thiệu cho các bạn. Công cụ này sẽ cho bạn các thông tin chi tiết ứng dụng của bạn đang được thực hiện như thế nào. Với giao diện đơn giản và chi tiết, các bạn sẽ dễ dàng tìm ra những nguyên nhân làm cho ứng dụng của các bạn chạy chậm.

Để mở Profiler, chọn Window trên thanh menubar > Profiler.

topic2

Hierarchy View
Bên trái cửa sổ Profiler là các mục Profiler như CPU,Rendering, Audio, Physics, UI,… và bên phải từng mục là dòng timeline hoạt động của các Profiler. Bây giờ, bạn hãy chạy ứng dụng và theo dõi hoạt động của Profiler. Theo dõi FPS và dòng hoạt động của ứng dụng, chọn những frame FPS thấp và tìm hiểu phần nào đang chiếm nhiều CPU ở bên dưới (Hierarchy). Làm tương tự với các mục Profiler khác.
topic1-1
Nếu như các bạn không hiểu những tác vụ xảy ra trong mục Hierarchy (trong Profiler CPU Usage), hãy tìm hiểu kĩ đường link bên dưới của Unity:
https://docs.unity3d.com/Manual/ProfilerCPU.html
Timeline View

Để mở Timeline View, chọn CPU Usage -> chọn Hierarchy -> chọn Timeline.

topic3-4
Timeline sẽ cung cấp cho chúng ta 2 thông tin: thứ tự mà các tác vụ CPU được thực hiện và thread nào chịu trách nhiệm thực hiện tác vụ đó.
Trong Unity, Các thread cho phép các tác vụ xảy ra đồng thời (Mutilple threading). Có 3 loại thread được sử dụng trong quá trình rendering bao gồm: main thread, render thread và worker thread. Main thread là nơi thực hiện phần lớn các tác vụ CPU, bao gồm một vài tác vụ rendering. Render thread là một thread đặc biệt có nhiệm vụ gửi các lệnh đến GPU. Worker thread sẽ thực hiện các tác vụ riêng lẻ ví dụ như culling hoặc mesh skinning. Tác vụ nào được thực hiện bởi thread nào phụ thuộc vào phần cài đặt ứng dụng của chúng ta và phần cứng thiết bị mà ứng dụng được chạy.
Profiler trên thiết bị android
Đừng vội mừng khi ứng dụng của bạn đang có FPS cao nhé. Profiler đang record hoạt động của ứng dụng dựa trên phần cứng máy tính. Điều này có thể rất khác biệt khi bạn chạy trên điện thoại. Để có cái nhìn chi tiết về cách hoạt động trên điện thoại, các bạn có thể chạy Profiler trên điện thoại như sau (thiết bị Android):

Tại Build Setting, chọn platform > Development Build > Autoconnect Profiler > Build&Run.
Tại mục Connected Player ở cửa sổ Profiler chọn thiết bị android.

EDITOR LOG

Giữ kích thước ứng dụng ở mức tối thiểu là rất quan trọng. Bước đầu tiên trong việc tối ưu kích thước file là xác định những Asset tốn nhiều bộ nhớ nhất. Điều này có thể dễ dàng theo dõi bằng cửa sổ Editor Log trong Unity (lưu trữ thông tin của lần build gần nhất).

Để mở Editor Log, click chuột phải vào cửa sổ Console và chọn Open Editor Log.

topic4
Thông thường, Texture, Sound và Animation chiếm nhiều bộ nhớ nhất. Xác định những Asset tốn nhiều bộ nhớ, từ đó tìm cách tối ưu những Assets này để giảm kích thước ứng dụng.

RENDERING STATISTIC

Bạn có thể theo dõi các số liệu về Rendering tại cửa sổ này (Chọn Stats trong cửa sổ Game) Nó chứa các thông tin hữu ích về Audio và Graphics. Đặc biệt các thông tin về số Batches, Save by batching hay Setpass calls và Shadow casters, cũng như số lượng Tris và Verts. Các chỉ số này sẽ được nói kĩ tại các phần sau của Series. Bạn cũng có thể xem các thông tin này trong phần Rendering tại Profiler.
topic5
Lưu ý: FPS trong cửa sổ Statistic không phải là FPS thực tế trong ứng dụng của bạn. Nó chỉ hiển thị thời gian để update Frame và render Game view.

FRAME DEBUGGER

Unity còn cho phép bạn theo dõi chi tiết quá trình Rendering của ứng dụng thông qua cửa sổ Frame Debugger. Cửa sổ Frame Debugger cho phép bạn theo dõi từng bước Render đồ hoạ ứng dụng tại Frame hiện tại và từng Draw Call được sử dụng để Render Frame đó.

Để mở cửa sổ Frame Debugger, Tại menu Windows > Frame Debugger.

topic6
List bên trái hiển thị trình tự các DrawCalls được vẽ (và các event khác như framebuffer clear). Bên phải hiển thị thông tin của DrawCall như geometry hay shader.

KẾT LUẬN

Thông qua những công cụ này, chúng ta sẽ tìm hiểu được nguyên nhân do đâu gây ra hiện tượng giật lag và dung lượng lớn của ứng dụng. Trong những phần tiếp theo, mình sẽ đi vào giới thiệu luồng hoạt động, các phương pháp tối ưu hiệu năng từng phần của ứng dụng như tối ưu CPU, GPU hay tập trung sâu hơn như tối ưu Model, UI.

[Unity Series 2] Tối ưu hiệu năng Ứng dụng game Unity - Rendering Pipeline