
Quản lý mức sử dụng GPU cho game PC và console
Trang web này đã được dịch bằng máy để thuận tiện cho bạn. Chúng tôi không thể đảm bảo tính chính xác hoặc độ tin cậy của nội dung được dịch. Nếu bạn có thắc mắc về tính chính xác của nội dung được dịch, vui lòng tham khảo phiên bản tiếng Anh chính thức của trang web.
Đây là bài viết thứ ba trong loạt bài hướng dẫn tối ưu hóa dự án Unity của bạn. Hãy sử dụng chúng như một hướng dẫn để chạy ở tốc độ khung hình cao hơn với ít tài nguyên hơn. Sau khi đã thử áp dụng những phương pháp tốt nhất này, hãy nhớ xem thêm các trang khác trong loạt bài này:
- Cấu hình dự án Unity của bạn để đạt hiệu suất cao hơn
- Tối ưu hóa hiệu năng cho đồ họa cao cấp
- Lập trình nâng cao và kiến trúc mã
- Hiệu năng vật lý được nâng cao mang lại trải nghiệm chơi game mượt mà hơn.
Xem các hướng dẫn tối ưu hóa mới nhất của chúng tôi dành cho nhà phát triển và nghệ sĩ Unity 6:
Tối ưu hóa việc sử dụng GPU trong game PC và console
Hãy hiểu rõ những hạn chế của phần cứng mục tiêu và cách lập hồ sơ GPU để tối ưu hóa việc hiển thị đồ họa. Hãy thử những mẹo và phương pháp tối ưu này để giảm tải cho GPU.
Khi phân tích hiệu năng, việc bắt đầu bằng một bài kiểm tra hiệu năng chuẩn sẽ giúp bạn biết được kết quả phân tích hiệu năng nào bạn nên mong đợi từ các GPU cụ thể.
Hãy xem GFXBench để có danh sách đầy đủ các bài kiểm tra hiệu năng tiêu chuẩn ngành dành cho GPU và card đồ họa. Trang web này cung cấp cái nhìn tổng quan tốt về các GPU hiện có và cách chúng so sánh với nhau.
Xem thống kê hiển thị
Nhấp vào nút Thống kê ở góc trên bên phải của cửa sổ Trận đấu. Cửa sổ này hiển thị thông tin hiển thị theo thời gian thực về ứng dụng của bạn trong chế độ Chơi. Sử dụng dữ liệu này để giúp tối ưu hóa hiệu năng:
- fps : Số khung hình mỗi giây
- CPU Main: Tổng thời gian xử lý một khung hình (và cập nhật Trình chỉnh sửa cho tất cả các cửa sổ)
- Kết xuất bằng CPU: Tổng thời gian để hiển thị một khung hình của Game view
- Lô hàng: Các nhóm yêu cầu vẽ tranh được tập hợp lại với nhau.
- Tam giác (Tris) và Đỉnh (Verts): Hình học lưới
- Các lệnh gọi SetPass: Số lần Unity phải chuyển đổi giữa các shader để hiển thị GameObjects trên màn hình; mỗi lần chuyển đổi có thể gây ra thêm tải cho CPU.
Ghi chú: Tốc độ khung hình (fps) hiển thị trong trình chỉnh sửa không nhất thiết phản ánh hiệu năng của bản dựng. Chúng tôi khuyên bạn nên phân tích cấu hình hệ thống để có kết quả chính xác nhất. Thời gian khung hình tính bằng mili giây là một chỉ số chính xác hơn so với số khung hình mỗi giây khi đánh giá hiệu năng. Tìm hiểu thêm trong sách điện tử Hướng dẫn tối ưu về phân tích hiệu năng trò chơi Unity (phiên bản Unity 6) .

Loại bỏ bất kỳ khuôn mặt nào không nhìn thấy được để tối ưu hóa mô hình của bạn.
Sử dụng phương pháp gộp lệnh vẽ (draw call batching).
Để vẽ một GameObject, Unity sẽ gửi lệnh vẽ đến API đồ họa (ví dụ: OpenGL, Vulkan hoặc Direct3D). Mỗi lệnh vẽ đều tiêu tốn nhiều tài nguyên. Việc thay đổi trạng thái giữa các lệnh vẽ, chẳng hạn như chuyển đổi vật liệu, có thể gây ra sự hao phí hiệu năng ở phía CPU.
Phần cứng PC và máy chơi game có thể tạo ra rất nhiều lệnh vẽ, nhưng chi phí phát sinh của mỗi lệnh vẫn đủ cao để cần phải tìm cách giảm thiểu chúng. Trên các thiết bị di động, tối ưu hóa lệnh vẽ là vô cùng quan trọng. Bạn có thể đạt được điều này bằng cách sử dụng phương pháp gộp lệnh vẽ (draw call batching ).
Gộp lệnh vẽ (draw call batching) giúp giảm thiểu những thay đổi trạng thái này và giảm chi phí CPU khi hiển thị đối tượng. Unity có thể kết hợp nhiều đối tượng thành ít nhóm hơn bằng cách sử dụng một số kỹ thuật:
- Phân lô SRP : Nếu bạn đang sử dụng HDRP hoặc URP, hãy bật SRP Batcher trong Pipeline Asset của bạn ở mục Nâng cao . Khi sử dụng các shader tương thích, SRP Batcher giảm thiểu thời gian thiết lập GPU giữa các lệnh vẽ và giúp dữ liệu vật liệu được lưu trữ lâu dài trong bộ nhớ GPU. Điều này có thể giúp tăng tốc đáng kể thời gian xử lý đồ họa của CPU. Sử dụng ít biến thể Shader hơn với số lượng từ khóa tối thiểu để cải thiện khả năng xử lý theo lô SRP . Hãy tham khảo tài liệu SRP này để xem dự án của bạn có thể tận dụng quy trình kết xuất này như thế nào.
- GPU instancing: Nếu bạn có số lượng lớn các đối tượng giống hệt nhau (ví dụ: các tòa nhà, cây cối, cỏ, v.v. có cùng lưới và chất liệu), hãy sử dụng kỹ thuật instancing trên GPU . Kỹ thuật này nhóm chúng lại bằng cách sử dụng phần cứng đồ họa. Để bật GPU Instancing, hãy chọn vật liệu của bạn trong cửa sổ Project, và trong Inspector, đánh dấu chọn Enable Instancing .
- Xử lý theo lô tĩnh: Đối với hình học không chuyển động, Unity có thể giảm số lệnh vẽ cho bất kỳ lưới nào dùng chung vật liệu. Phương pháp này hiệu quả hơn so với gộp nhóm động, nhưng tốn nhiều bộ nhớ hơn. Hãy đánh dấu tất cả các lưới không bao giờ di chuyển là " Gộp nhóm tĩnh" trong Inspector. Unity kết hợp tất cả các lưới tĩnh thành một lưới lớn duy nhất trong quá trình xây dựng. Tiện ích StaticBatchingUtility cũng cho phép bạn tự tạo các lô tĩnh này trong quá trình chạy (ví dụ: sau khi tạo một cấp độ thủ tục gồm các bộ phận không chuyển động).
- Xử lý theo lô động: Đối với các lưới nhỏ, Unity có thể nhóm và biến đổi các đỉnh trên CPU, sau đó vẽ tất cả chúng cùng một lúc. Ghi chú: Không nên sử dụng chức năng này trừ khi bạn có đủ lưới đa giác thấp (không quá 300 đỉnh mỗi lưới và tổng cộng 900 thuộc tính đỉnh). Ngược lại, việc bật tính năng này sẽ lãng phí thời gian xử lý của CPU khi tìm kiếm các lưới nhỏ để xử lý theo lô.
Bạn có thể tối ưu hóa việc xử lý theo lô bằng một vài quy tắc đơn giản:
- Sử dụng càng ít họa tiết trong một cảnh càng tốt. Số lượng họa tiết ít hơn đồng nghĩa với việc cần ít nguyên liệu riêng biệt hơn, giúp việc sản xuất hàng loạt dễ dàng hơn. Ngoài ra, hãy sử dụng các bản đồ họa tiết (texture atlases) bất cứ khi nào có thể.
- Luôn luôn tạo bản đồ ánh sáng ở kích thước atlas lớn nhất có thể. Số lượng lightmap ít hơn đồng nghĩa với việc cần ít thay đổi trạng thái vật liệu hơn, nhưng hãy chú ý đến dung lượng bộ nhớ tiêu thụ.
- Hãy cẩn thận để không vô tình tạo ra các bản sao của tài liệu. Việc truy cập Renderer.material trong các script sẽ sao chép vật liệu và trả về tham chiếu đến bản sao mới. Thao tác này sẽ làm hỏng bất kỳ lô hàng hiện có nào đã bao gồm nguyên liệu đó. Nếu bạn muốn truy cập vật liệu của đối tượng được nhóm lại, hãy sử dụng Renderer.sharedMaterial thay thế.
- Hãy theo dõi số lượng batch tĩnh và động so với tổng số lệnh vẽ bằng cách sử dụng Profiler hoặc số liệu thống kê hiển thị trong quá trình tối ưu hóa.
Vui lòng tham khảo tài liệu về gộp lệnh vẽ để biết thêm thông tin.

SRP Batcher giúp bạn thực hiện các lệnh vẽ hàng loạt.
Kiểm tra Trình gỡ lỗi khung
Công cụ Frame Debugger cho phép bạn dừng phát lại ở một khung hình duy nhất và xem từng bước cách Unity xây dựng một cảnh để xác định các cơ hội tối ưu hóa. Hãy tìm GameObjects được hiển thị không cần thiết và vô hiệu hóa chúng để giảm số lượng lệnh vẽ mỗi khung hình.
Ghi chú : Trình gỡ lỗi khung hình không hiển thị các lệnh vẽ riêng lẻ hoặc các thay đổi trạng thái. Chỉ có các công cụ phân tích hiệu năng GPU gốc mới cung cấp cho bạn thông tin chi tiết về lệnh vẽ và thời gian thực thi. Tuy nhiên, Frame Debugger vẫn có thể rất hữu ích trong việc gỡ lỗi các sự cố về đường ống xử lý hoặc các vấn đề về xử lý theo lô.
Một ưu điểm của Unity Frame Debugger là bạn có thể liên kết lệnh vẽ với một GameObject cụ thể trong cảnh. Điều này giúp dễ dàng hơn trong việc điều tra một số vấn đề mà các trình gỡ lỗi khung bên ngoài không thể giải quyết được.
Để biết thêm thông tin chi tiết, hãy đọc tài liệu về Frame Debugger và xem phần đó.

Công cụ gỡ lỗi khung hình phân tích từng khung hình được hiển thị.
Tối ưu hóa tốc độ nạp và giảm thiểu tình trạng rút tiền vượt mức.
Tốc độ hiển thị (Fill rate) đề cập đến số lượng pixel mà GPU có thể hiển thị lên màn hình mỗi giây.
Nếu trò chơi của bạn bị giới hạn bởi tốc độ tô màu, điều này có nghĩa là nó đang cố gắng vẽ nhiều pixel hơn trên mỗi khung hình so với khả năng xử lý của GPU.
Việc vẽ nhiều lần lên cùng một điểm ảnh được gọi là vẽ chồng (overdraw). Việc vẽ vượt quá số lượng dữ liệu quy định sẽ làm giảm tốc độ nạp dữ liệu và tiêu tốn thêm băng thông bộ nhớ. Các nguyên nhân phổ biến nhất dẫn đến việc rút tiền vượt quá số dư tài khoản là:
- Hình học mờ hoặc trong suốt chồng lên nhau
- Các shader phức tạp, thường có nhiều bước render.
- Các hạt chưa được tối ưu hóa
- Các phần tử giao diện người dùng chồng chéo
Mặc dù bạn muốn giảm thiểu ảnh hưởng của nó, nhưng không có một giải pháp nào phù hợp cho tất cả các trường hợp khi giải quyết vấn đề rút tiền vượt mức. Hãy bắt đầu bằng cách thử nghiệm với các yếu tố nêu trên để giảm thiểu tác động của chúng.
Giảm số lượng lô
Cũng giống như các nền tảng khác, việc tối ưu hóa trên console thường có nghĩa là giảm số lượng lệnh vẽ trong mỗi nhóm lệnh. Có một vài kỹ thuật có thể hữu ích.
- Sử dụng kỹ thuật Occlusion culling để loại bỏ các đối tượng bị che khuất phía sau các đối tượng ở tiền cảnh và giảm hiện tượng vẽ chồng chéo. Hãy lưu ý rằng điều này yêu cầu xử lý CPU bổ sung, vì vậy hãy sử dụng Profiler để đảm bảo việc chuyển công việc từ GPU sang CPU mang lại hiệu quả tốt hơn.
- Việc sử dụng GPU instancing cũng có thể giảm số lượng batch nếu bạn có nhiều đối tượng dùng chung lưới và vật liệu. Việc giới hạn số lượng mô hình trong cảnh có thể cải thiện hiệu suất. Nếu thực hiện khéo léo, bạn có thể xây dựng một cảnh phức tạp mà không làm cho nó trở nên lặp đi lặp lại.
- SRP Batcher có thể giảm thời gian thiết lập GPU giữa các lệnh DrawCall bằng cách nhóm các lệnh Bind và Draw GPU lại với nhau. Để tận dụng lợi ích của việc xử lý hàng SRP này, hãy sử dụng càng nhiều vật liệu càng tốt, nhưng hãy giới hạn chúng ở một số lượng nhỏ các shader tương thích (ví dụ: shader Lit và Unlit trong URP và HDRP).
Hãy chú ý đến việc loại bỏ những cá thể không đạt tiêu chuẩn.
Tính năng loại bỏ các đối tượng bị che khuất (occlusion culling) sẽ vô hiệu hóa GameObjects bị che khuất hoàn toàn bởi GameObjects khác. Điều này giúp ngăn CPU và GPU lãng phí thời gian vào việc hiển thị các đối tượng mà Camera sẽ không bao giờ nhìn thấy.
Việc loại bỏ nội dung không phù hợp diễn ra theo từng camera. Điều này có thể ảnh hưởng lớn đến hiệu năng, đặc biệt khi nhiều camera được kích hoạt đồng thời. Unity sử dụng hai loại loại bỏ đối tượng không cần thiết (culling): loại bỏ đối tượng nằm ngoài vùng nhìn (frustum culling) và loại bỏ đối tượng bị che khuất (occlusion culling).
Việc loại bỏ các vùng nhìn không xác định được thực hiện tự động trên mọi Camera. Nó ngăn không cho GameObjects nằm ngoài vùng nhìn (View Frustum) hiển thị, giúp tối ưu hóa hiệu năng.
Bạn có thể thiết lập khoảng cách loại bỏ đối tượng theo từng lớp thủ công thông qua Camera.layerCullDistances . Điều này cho phép bạn loại bỏ GameObjects nhỏ ở khoảng cách ngắn hơn farClipPlane mặc định.
Sắp xếp GameObjects thành các lớp. Sử dụng mảng layerCullDistances để gán cho mỗi trong số 32 lớp một giá trị nhỏ hơn farClipPlane (hoặc sử dụng 0 để mặc định là farClipPlane).
Unity ưu tiên lọc theo lớp trước, chỉ giữ lại GameObjects trên các lớp mà Camera sử dụng. Sau đó, thuật toán frustum culling sẽ loại bỏ bất kỳ GameObjects nào nằm ngoài vùng nhìn của camera. Việc loại bỏ các phần tử nằm ngoài vùng nhìn được thực hiện thông qua một loạt các tác vụ để tận dụng tối đa các luồng xử lý có sẵn.
Mỗi lần kiểm tra loại bỏ lớp đều rất nhanh (về cơ bản chỉ là một thao tác mặt nạ bit). Tuy nhiên, chi phí này vẫn có thể tăng lên đáng kể nếu số lượng GameObjects rất lớn. Nếu điều này trở thành vấn đề đối với dự án của bạn, bạn có thể cần triển khai một hệ thống nào đó để chia thế giới của mình thành các "khu vực" và vô hiệu hóa các khu vực nằm ngoài vùng nhìn của Camera nhằm giảm bớt áp lực lên hệ thống loại bỏ lớp/vùng nhìn của Unity.
Tính năng loại bỏ đối tượng bị che khuất (occlusion culling) sẽ loại bỏ bất kỳ GameObjects nào khỏi khung nhìn của trò chơi nếu Camera không thể nhìn thấy chúng. Sử dụng tính năng này để ngăn việc hiển thị các đối tượng bị che khuất bởi các đối tượng khác, vì các đối tượng này vẫn có thể được hiển thị và tiêu tốn tài nguyên. Ví dụ, việc hiển thị thêm một căn phòng khác là không cần thiết nếu cửa đóng và Camera không thể nhìn vào bên trong phòng.
Việc bật tính năng loại bỏ các đối tượng bị che khuất có thể cải thiện hiệu năng đáng kể nhưng cũng có thể yêu cầu nhiều dung lượng ổ đĩa, thời gian xử lý CPU và RAM hơn. Unity ghi dữ liệu che khuất trong quá trình biên dịch và sau đó cần tải dữ liệu đó từ ổ đĩa vào RAM khi tải cảnh.
Trong khi việc loại bỏ các đối tượng nằm ngoài tầm nhìn của camera được thực hiện tự động, thì việc loại bỏ các đối tượng bị che khuất là một quy trình được tính toán trước. Đơn giản chỉ cần đánh dấu các đối tượng của bạn là Static.Occluders hoặc Occludees, sau đó thực hiện quá trình kết xuất thông qua hộp thoại Window > Rendering > Occlusion Culling .
Hãy xem hướng dẫn Làm việc với Occlusion Culling để biết thêm thông tin.

Một ví dụ về kỹ thuật loại bỏ đối tượng bị che khuất.
Tận dụng độ phân giải động
Cho phép độ phân giải động là một thiết lập Camera cho phép bạn tự động điều chỉnh kích thước các mục tiêu kết xuất riêng lẻ để giảm tải cho GPU. Trong trường hợp tốc độ khung hình của ứng dụng giảm, bạn có thể giảm dần độ phân giải để duy trì tốc độ khung hình ổn định.
Unity sẽ kích hoạt tính năng điều chỉnh tỷ lệ này nếu dữ liệu hiệu năng cho thấy tốc độ khung hình sắp giảm do bị giới hạn bởi GPU. Bạn cũng có thể chủ động kích hoạt việc điều chỉnh quy mô này theo cách thủ công bằng tập lệnh. Điều này rất hữu ích nếu bạn sắp xử lý một phần ứng dụng đòi hỏi nhiều tài nguyên GPU. Nếu được điều chỉnh dần dần, độ phân giải động có thể gần như không thể nhận thấy.
Vui lòng tham khảo trang hướng dẫn về độ phân giải động để biết thêm thông tin và danh sách các nền tảng được hỗ trợ.
Kiểm tra nhiều chế độ xem camera
Đôi khi bạn có thể cần hiển thị hình ảnh từ nhiều góc nhìn khác nhau trong trò chơi của mình. Ví dụ, trong các trò chơi FPS , việc vẽ vũ khí của người chơi và môi trường xung quanh một cách riêng biệt với các góc nhìn (FOV) khác nhau là điều khá phổ biến. Điều này giúp các vật thể ở tiền cảnh không bị biến dạng quá nhiều khi nhìn qua góc nhìn rộng của hậu cảnh.
Bạn có thể sử dụng Camera Stacking trong URP để hiển thị nhiều hơn một khung hình camera. Tuy nhiên, vẫn có một lượng lớn công đoạn chọn lọc và xử lý hình ảnh được thực hiện cho mỗi camera. Mỗi camera đều tiêu tốn một số chi phí vận hành, bất kể nó có thực hiện công việc có ý nghĩa hay không. Chỉ sử dụng các thành phần Camera cần thiết cho quá trình hiển thị. Trên các nền tảng di động, mỗi camera đang hoạt động có thể sử dụng tới 1 ms thời gian xử lý CPU, ngay cả khi không hiển thị gì.

Ghép ảnh trong URP: Khẩu súng và phông nền được hiển thị với các thiết lập Camera khác nhau.
Sử dụng tính năng Trình kết xuất đối tượng
Trong URP, thay vì sử dụng nhiều camera, hãy thử sử dụng tính năng Render Objects Renderer tùy chỉnh. Chọn Thêm tính năng trình kết xuất trong tài nguyênDữ liệu trình kết xuất . Chọn Hiển thị đối tượng .
Khi ghi đè lên từng đối tượng Render, bạn có thể:
- Liên kết nó với một Sự kiện và chèn nó vào một thời điểm cụ thể trong vòng lặp hiển thị.
- Lọc theo Hàng đợi kết xuất (Trong suốt hoặc Mờ đục) và Mặt nạ lớp
- Ảnh hưởng đến cài đặt Độ sâu và Khuôn mẫu
- Điều chỉnh cài đặt Camera (Góc nhìn và Độ lệch vị trí)

Tạo một đối tượng Render tùy chỉnh để ghi đè các thiết lập hiển thị.
Sử dụng khối lượng truyền tải tùy chỉnh trong HDRP
Trong HDRP, bạn có thể sử dụng các pass tùy chỉnh để đạt được hiệu quả tương tự. Việc cấu hình một Custom Pass bằng cách sử dụng Custom Pass Volume tương tự như việc sử dụng HDRP Volume .
Thẻ tùy chỉnh cho phép bạn:
- Thay đổi hình thức của vật liệu trong cảnh của bạn
- Thay đổi thứ tự hiển thị GameObjects Unity
- Đọc dữ liệu từ bộ đệm Camera vào shader
Việc sử dụng Custom Pass Volumes trong HDRP có thể giúp bạn tránh sử dụng thêm camera và giảm thiểu chi phí phát sinh liên quan đến chúng. Các pass tùy chỉnh có tính linh hoạt cao hơn trong cách chúng tương tác với shader. Bạn cũng có thể mở rộng lớp Custom Pass bằng C# .

Âm lượng truyền tải tùy chỉnh trong HDRP
Sử dụng mức độ chi tiết
Khi các đối tượng di chuyển ra xa, Mức độ chi tiết (LOD) có thể điều chỉnh hoặc chuyển đổi chúng để sử dụng các lưới có độ phân giải thấp hơn với các vật liệu và hiệu ứng đổ bóng đơn giản hơn. Điều này giúp tăng cường hiệu năng GPU.
Hãy xem khóa học Làm việc với LOD trên Unity Learn để biết thêm chi tiết.

Ví dụ về lưới sử dụng nhóm LOD
Hiệu ứng xử lý hậu kỳ hồ sơ
Hãy lập hồ sơ các hiệu ứng xử lý hậu kỳ để xem chi phí của chúng trên GPU. Một số hiệu ứng toàn màn hình, như hiệu ứng Bloom và độ sâu trường ảnh, có thể tốn kém, nhưng hãy thử nghiệm cho đến khi bạn tìm được sự cân bằng hợp lý giữa chất lượng hình ảnh và hiệu năng.
Quá trình xử lý hậu kỳ thường không biến động nhiều trong thời gian chạy. Sau khi đã xác định các thiết lập ghi đè âm lượng, hãy phân bổ cho các hiệu ứng hậu kỳ một phần cố định trong tổng ngân sách khung hình của bạn.

Hãy giữ cho các hiệu ứng xử lý hậu kỳ càng đơn giản càng tốt.
Tránh sử dụng shader Tessellation.
Phép lát gạch chia các hình dạng thành các phiên bản nhỏ hơn của hình dạng đó. Điều này có thể tăng cường độ chi tiết thông qua việc gia tăng hình học. Mặc dù có những trường hợp mà việc sử dụng phép chia ô vuông (tessellation) có ý nghĩa, ví dụ như để tạo hiệu ứng vỏ cây chân thực, nhưng nhìn chung, nên tránh sử dụng phép chia ô vuông trên các hệ máy chơi game. Chúng có thể tốn nhiều tài nguyên GPU.
Thay thế shader hình học bằng shader tính toán
Giống như các shader tạo lưới, shader hình học và shader đỉnh có thể chạy hai lần mỗi khung hình trên GPU – một lần trong quá trình xử lý độ sâu sơ bộ và một lần nữa trong quá trình xử lý bóng.
Nếu bạn muốn tạo hoặc chỉnh sửa dữ liệu đỉnh trên GPU, thì compute shader thường là lựa chọn tốt hơn so với geometry shader. Việc thực hiện công việc trong compute shader có nghĩa là vertex shader, bộ xử lý đồ họa thực tế, có thể hoạt động nhanh hơn và đơn giản hơn nhiều.
Tìm hiểu thêm về các khái niệm cốt lõi của Shader .
Hãy hướng đến việc chiếm dụng sóng tốt.
Khi bạn gửi lệnh vẽ đến GPU, công việc đó sẽ được chia thành nhiều luồng xử lý (wavefront) mà Unity phân phối khắp các SIMD có sẵn trong GPU.
Mỗi SIMD có số lượng tối đa các sóng có thể hoạt động cùng một lúc. Tỷ lệ chiếm dụng sóng đề cập đến số lượng sóng hiện đang được sử dụng so với số lượng tối đa. Điều này giúp đo lường mức độ bạn đang tận dụng tối đa tiềm năng của GPU. Các công cụ phân tích hiệu năng chuyên dụng cho bảng điều khiển hiển thị chi tiết về mức độ chiếm dụng sóng âm.
Trong ví dụ bên dưới, các sóng ánh sáng của shader đỉnh xuất hiện màu xanh lục. Các sóng đổ bóng pixel xuất hiện màu xanh lam. Trên đồ thị phía dưới, nhiều sóng đổ bóng đỉnh xuất hiện mà không có nhiều hoạt động đổ bóng điểm ảnh. Điều này cho thấy tiềm năng của GPU chưa được tận dụng triệt để.
Nếu bạn thực hiện nhiều thao tác xử lý shader đỉnh mà không tạo ra pixel, điều đó có thể cho thấy sự thiếu hiệu quả. Mặc dù mật độ sóng ánh sáng thấp không nhất thiết là điều xấu, nhưng đó là một chỉ số cần xem xét để bắt đầu tối ưu hóa shader và kiểm tra các điểm nghẽn khác. Ví dụ, nếu bạn gặp tình trạng chậm do bộ nhớ hoặc các thao tác tính toán, việc tăng mức độ chiếm dụng tài nguyên có thể giúp cải thiện hiệu suất. Mặt khác, quá nhiều luồng dữ liệu trong quá trình truyền có thể gây ra hiện tượng tràn bộ nhớ cache và làm giảm hiệu năng.

Sự chiếm dụng sóng tốt so với sóng xấu
Sử dụng tính toán bất đồng bộ
Nếu có những khoảng thời gian bạn không tận dụng hết công suất GPU, Async Compute cho phép bạn di chuyển các tác vụ xử lý shader hữu ích song song vào hàng đợi đồ họa của mình. Điều này giúp tận dụng tốt hơn các tài nguyên GPU.
Ví dụ, trong quá trình tạo bản đồ đổ bóng, GPU chỉ thực hiện kết xuất độ sâu. Rất ít thao tác xử lý pixel shader diễn ra ở giai đoạn này, và nhiều wavefront vẫn chưa được sử dụng.
Nếu bạn có thể đồng bộ hóa một số tác vụ xử lý shader tính toán với quá trình render chỉ dựa trên độ sâu, điều này sẽ giúp tận dụng GPU hiệu quả hơn. Các sóng ánh sáng chưa sử dụng có thể hỗ trợ cho kỹ thuật khử nhiễu môi trường không gian màn hình (Screen Space Ambient Occlusion) hoặc bất kỳ tác vụ nào bổ sung cho công việc hiện tại.
Hãy xem buổi thuyết trình này về Tối ưu hóa hiệu năng cho các máy chơi game cao cấp từ Unite.

Tính toán bất đồng bộ có thể di chuyển công việc xử lý shader song song đến hàng đợi đồ họa.
Hãy thử ngăn kéo thường trú GPU.
GPU Resident Drawer (có sẵn cho cả URP và HDRP ) là một hệ thống kết xuất dựa trên GPU được thiết kế để tối ưu hóa thời gian CPU, mang lại lợi ích hiệu suất đáng kể. Nó hỗ trợ kết xuất đa nền tảng và được thiết kế để hoạt động ngay lập tức với các dự án hiện có.
Hệ thống này có thể được kích hoạt trong HDRP hoặc URP Render Pipeline Asset. Chọn Instanced Drawing để kích hoạt tính năng này. Bạn cũng có thể chọn chỉ kích hoạt tính năng này ở chế độ Play hoặc cả ở chế độ Edit.
Khi bạn bật GPU Resident Drawer, các trò chơi bị giới hạn bởi CPU do số lượng lệnh vẽ cao có thể cải thiện hiệu năng vì số lượng lệnh vẽ được giảm bớt. Những cải tiến bạn sẽ thấy phụ thuộc vào quy mô của các cảnh và số lượng bản sao bạn sử dụng. Bạn càng render nhiều đối tượng có thể tạo bản sao, bạn càng nhận được nhiều lợi ích hơn.
Khi chọn tùy chọn Instanced Drawing, bạn có thể nhận được một thông báo trên giao diện người dùng cảnh báo rằng cài đặt “BatchRenderGroup Variants phải là 'Keep All'”. Việc điều chỉnh tùy chọn này trong cài đặt đồ họa sẽ hoàn tất thiết lập cho GPU Resident Drawer.
Để tìm hiểu thêm, hãy xem chủ đề thảo luận của chúng tôi tại đây .

Chọn "Instanced Drawing" từ menu thả xuống GPU Resident Drawer.
Sử dụng tính năng loại bỏ vật thể khuất bằng GPU.
Tính năng loại bỏ các đối tượng bị che khuất bằng GPU, có sẵn cho cả URP và HDRP , hoạt động song song với GPU Resident Drawer. Nó giúp tăng hiệu suất đáng kể bằng cách giảm lượng vẽ chồng lên nhau cho mỗi khung hình, có nghĩa là trình kết xuất không lãng phí tài nguyên để vẽ những thứ không được hiển thị.
Để kích hoạt tính năng loại bỏ các đối tượng bị che khuất bằng GPU, hãy tìm tài nguyên trong quy trình kết xuất và bật hộp kiểm GPU Occlusion.
Để bật tính năng GPU Occlusion Culling trong Chế độ gỡ lỗi của Unity 6, hãy vào Window > Rendering > Occlusion Culling . Tại đây, bạn có thể hình dung cách các đối tượng bị loại bỏ bằng cách bật/tắt các tùy chọn hiển thị khác nhau.

Tùy chọn GPU Occlusion Culling trong URP Render Pipeline Asset.
Thêm mẹo dành cho Unity 6
Bạn có thể tìm thấy nhiều mẹo và kinh nghiệm thực tiễn tốt nhất dành cho các nhà phát triển và người sáng tạo Unity chuyên nghiệp tại trung tâm kinh nghiệm thực tiễn tốt nhất Unity . Hãy lựa chọn từ hơn 30 hướng dẫn được tạo ra bởi các chuyên gia trong ngành, các kỹ sư và nghệ sĩ kỹ thuật Unity , giúp bạn phát triển hiệu quả với bộ công cụ và hệ thống của Unity.
