Draw Call và Overdraw trong Unity: hiểu nhanh, tối ưu đúng
Minh Khoa
Tác giả
Khi game bị tụt FPS, hai thủ phạm thường gặp là quá nhiều Draw Call và Overdraw quá cao. Chúng liên quan đến việc render, nhưng là hai vấn đề khác nhau.
Draw Call là gì?
Draw Call là một lệnh mà CPU gửi cho GPU để yêu cầu vẽ một đối tượng hoặc một nhóm đối tượng.
Ví dụ, màn chơi có 100 cái cây:
- Mỗi cây dùng material khác nhau: có thể phát sinh rất nhiều Draw Call.
- Các cây dùng chung mesh, material và bật GPU Instancing: Unity có thể vẽ nhiều cây bằng ít lệnh hơn.
Draw Call không chỉ phụ thuộc vào số GameObject. Việc đổi material, shader, texture, pass hoặc trạng thái render cũng có thể khiến Unity phải tạo thêm lệnh vẽ.
Draw Call cao gây hại gì?
Mỗi lệnh đều cần CPU chuẩn bị dữ liệu rồi gửi sang GPU. Khi có hàng nghìn lệnh nhỏ:
- CPU mất nhiều thời gian chuẩn bị render.
- FPS giảm dù GPU chưa chạy hết công suất.
- Dễ xuất hiện giật hình trên mobile hoặc máy cấu hình thấp.
Cách giảm Draw Call
- Cho nhiều object dùng chung material.
- Dùng Sprite Atlas cho sprite và UI.
- Bật GPU Instancing cho các object giống nhau.
- Dùng Static Batching với môi trường không di chuyển.
- Bật SRP Batcher nếu dùng URP hoặc HDRP.
- Hạn chế tạo nhiều phiên bản material chỉ khác một giá trị nhỏ.
- Dùng LOD và Occlusion Culling để không vẽ object không cần thiết.
Ví dụ: 200 viên đá dùng chung mesh và material phù hợp với GPU Instancing hơn 200 viên đá có 200 material riêng.
Đừng cố giảm Draw Call bằng cách gộp toàn bộ bản đồ thành một mesh khổng lồ. Việc này có thể làm culling kém hiệu quả và khiến Unity phải vẽ cả vùng lớn chỉ vì một phần nhỏ đang xuất hiện.
Overdraw là gì?
Overdraw xảy ra khi một pixel trên màn hình bị vẽ nhiều lần trong cùng một frame.
Ví dụ, tại cùng một vị trí có:
- Background.
- Một lớp khói trong suốt.
- Hiệu ứng lửa.
- Thanh máu.
- Một panel UI trong suốt.
Pixel đó có thể bị GPU xử lý năm lần, nhưng người chơi chỉ nhìn thấy kết quả cuối cùng.
Overdraw thường cao ở:
- Particle khói, lửa và phép thuật.
- Sprite có nhiều vùng trong suốt.
- UI chồng nhiều panel và image.
- Hiệu ứng toàn màn hình.