Under Construction

Prometheus Lab

Portfolio & Resources

Back to Blog
Unity12 min1 view

Anti alias & Vsync

Author

Minh Khoa

Author

Anti-Aliasing (AA - Khử răng cưa) và VSync (Đồng bộ khung hình dọc).

Với bất kỳ game nào, hình ảnh luôn là yếu tố đập vào mắt người chơi đầu tiên. Không khử răng cưa thì model trông như làm từ "đồ đá", bật sai kỹ thuật thì hao tài nguyên; không kiểm soát VSync thì máy nóng như lò vi sóng hoặc hình xé rách tả tơi. Bài viết này sẽ giúp bạn hiểu rành rọt và bóc rời các cơ chế này ra nhé!


🎨 1. Anti-Aliasing (Khử Răng Cưa)

Tại sao lại sinh ra "Răng cưa" (Aliasing)?

Màn hình của chúng ta được cấu tạo từ các điểm ảnh pixel hình vuông. Khi hiển thị những đường chéo hoặc đường cong, các pixel hình vuông này không thể lấp đầy mượt mà (chỉ có thể đi theo phương ngang - dọc), tạo thành các bậc thang lồi lõm siêu khó chịu. Lỗi hiển thị này gọi là Jaggies (Răng cưa).

Để fix vấn đề này, các thuật toán Anti-Aliasing (AA) ra đời để đánh lừa thị giác bằng cách trộn thêm các pixel màu trung gian vào rìa để nhìn xa trông nó mịn màng hơn.

4 "Đại Ca" Giải Quyết Răng Cưa Trong Unity (Đặc biệt: URP & HDRP)

Khi làm việc, bạn sẽ bắt gặp 4 loại sau, hãy nắm rõ chúng:

🟢 MSAA (Multisample Anti-Aliasing)

  • Cơ chế: Là giải pháp phần cứng. Hiểu đơn giản, nó render các CẠNH của khối 3D ở chất lượng cao hơn rồi tính toán màu chính xác xuống độ phân giải gốc của bạn.
  • Đặc điểm: Hoạt động trơn tru cực kỳ với Forward Rendering (Kiểu render phổ biến trên Mobile). Không áp dụng lên texture, chỉ áp vô các dải mesh nên không làm mờ hình vẽ sẵn trên vật thể.
  • Lời khuyên Senior: Là vũ khí tối thượng cho Game Mobile URP. Bật MSAA 2x hoặc 4x trên config của Universal Render Pipeline Asset là đủ sạch hình mượt mắt. Cấm kỵ bật MSAA khi dùng Deferred Rendering.

🔵 FXAA (Fast Approximate Anti-Aliasing)

  • Cơ chế: Là hiệu ứng Post-processing (Hậu kỳ - Render xong nhét thêm vào). Nó phân tích toàn màn hình đã render xem đâu là cạnh ranh giới, tự động vuốt mờ chúng thay vì tính toán toán học phức tạp cho mesh đồ mệt.
  • Đặc điểm: Tốn ít tài nguyên nhất, cực rẻ. Bù lại: Vuốt cái là nguyên khung cảnh mờ xịt (cả ảnh xịn bên trong model cũng nhòe nhẹ).
  • Lời khuyên Senior: Níu giữ hiệu năng ở cấu hình low-end / Mobile hoặc game 2D Pixelart thích làm mờ màn hình.

🟠 SMAA (Subpixel Morphological Anti-Aliasing)

  • Cơ chế: Nâng cấp siêu to khổng lồ của FXAA (cũng là Post-processing). SMAA phát hiện các cạnh chéo và cạnh cong thông minh hơn nhiều để nhắm chuẩn mục tiêu mà không bóp méo toàn màn hình.
  • Đặc điểm: Nặng hơn FXAA một chút xíu, nhưng ít làm mờ hình, cạnh mịn màng sắc sảo.
  • Lời khuyên Senior: Phù hợp cho PC/Console tầm trung và Game không muốn dính MSAA. (Phổ biến dùng trên URP PC).

🔴 TAA (Temporal Anti-Aliasing)

  • Cơ chế: Thay vì tập trung ở 1 frame ảnh, TAA thu thập dữ liệu màu từ CÁC KHUNG HÌNH TRƯỚC phân tích chênh lệch kết hợp với frame hiện tại để bù đắp các góc khuyết ảnh.
  • Đặc điểm: Khử răng cưa MẠNH MẼ KHỦNG KHIẾP. Fix cực tốt lỗi rung hình (Flickering) của các đường kẻ mỏng như hàng rào, dây cáp, tóc. NHƯNG vì dùng hình cũ đắp qua hình mới, khi nhân vật xoay người vội sẽ để lại "chút hồn" gọi là lỗi Ghosting (Bóng ma).
  • Lời khuyên Senior: Chân ái của HDRP, Game AAA hướng tới tả thực.

💡 Mẹo thực chiến: NẾU THIẾT KẾ ĐƯỢC CHỌN, hãy bật MSAA phần cứng trước tiên! Chỉ rớ vào Post-processing AA khi thực sự bất đắc dĩ! Nhớ KHÔNG bỏ UI Canvas vào lớp Render Post Processing.

image.pnghttps://www.youtube.com/watch?v=-bhRrSBCxVQ

https://www.youtube.com/watch?v=hqi0114mwtY


⚡ 2. VSync (Vertical Synchronization - Đồng Bộ Dọc)

Bản chất của VSync

Màn hình máy tính/điện thoại thường có tần suất quét cố định (ví dụ 60Hz là làm mới 60 lần 1 giây). Khổ nỗi, Graphic Card (GPU) lại sản xuất khung hình theo tốc độ tuỳ hứng (chỗ không có UI chạy 100fps, chỗ cháy nổ rớt lạch bạch 43fps).

Khi GPU tung ảnh mới ra MÀ KHÔNG TRÙNG KHỚP với nhịp chớp của màn hình (Màn hình đang hiển thị nửa tấm ảnh cũ, bị đè nửa trên tấm ảnh mới vào), bạn sẽ thấy hiện tượng Screen Tearing (Xé Hình) khó ưa.

VSync xuất hiện để làm cảnh sát trưởng: Cầm súng chĩa vào GPU bảo "Cứ từ từ, đợi màn hình hiển thị cho xong rồi hẵng quăng cái frame mới ra đây!. Thế là Tốc độ Game (FPS) xịn đến mấy cũng bị cùm lại theo Mức Tần Số Quét Màn Hình.

image.png### Cơ Chế Lợi - Hại

  1. Khi VSync = ON (Bật):
    • Lợi ích ngay lập tức: Đã mắt, hết khuyết điểm hình ảnh xé đôi bị gập. Máy của người chơi cũng rất MÁT VÀ ÊM vì GPU không phải cong lưng render những khung hình thừa thải.
    • Tác dụng phụ: Sinh ra tình trạng Input Lag (Trễ thao tác) nhẹ do quy trình chèn ngang sự chờ đợi. Chí mạng đối với game Esport (FPS bắn súng, LoL cần thao tác tức thời). Hơn nữa, nếu máy cùi không chạy nổi 60FPS... nó sẽ ép FPS bạn rớt thẳng đôi xuống mốc 30 FPS.
  2. Khi VSync = OFF (Tắt):
    • Lợi ích: Trải nghiệm phản hồi di chuột - bấm nút cực nhạy, phù hợp với game Try-hard. Ngưỡng khung hình vượt vách (120 - 240 FPS tuỳ sức mạnh máy).
    • Tác dụng phụ: Máy chạy Full Load 100% tài nguyên CPU/GPU dù chỉ để render... giao diện Setting của Game! (Thiếu tối ưu hệ thống).

Thực Chiến Coding Trong Unity

Bạn có thể chỉnh VSync thông qua C# qua Script nào đó gắn tại Initialization của Core Game:

// Đóng cửa VSync
QualitySettings.vSyncCount = 0;

// Khoá FPS theo Vsync (Số 1 nghĩa là 1 sync mỗi vblank)
// Ví dụ màn 60 Hz -> FPS bị khoá 60 FPS
QualitySettings.vSyncCount = 1;

// Vô cùng quan trọng: Nếu TẮT Vsync, PHẢI set Target Frame Rate để khóa trần GPU lại !
Application.targetFrameRate = 60;

💡 Luật Bất Thành Văn Của "Senior Vua Dev":

  • Làm đồ Mobile: Bắt buộc TẮT VSync (QualitySettings.vSyncCount = 0) và TỰ TAY khóa tần số khung hình qua Application.targetFrameRate = 30 (hoặc 60/120 tuỳ cấu hình device). Lý giải: Unity quản lý VSync trên điện thoại cực chuối; OS cài sẵn giới hạn thiết bị của Android/iOS xịn hơn nhiều. Tắt VSync giúp app ít nóng pin nhất có thể.
  • Làm trên PC/Console: Luôn luôn cung cấp Checkbox VSync ở mục Options của Game. KHÔNG BAO GIỜ ghim cứng thứ này trong code! Mặc định có thể là ON cho game Single Player ngắm cảnh thả hồn, và mặc định OFF với các game Fast-paced bắn súng.

🎯 Tổng Kết Dành Cho Bạn Tự Ôn Tập

  1. Răng cưa làm game phèn, hãy dọn nó bằng MSAA. Khi nào máy khóc vì nặng thì tuột qua táng FXAA/SMAA. Khi làm game Console/PC Siêu đẹp mới rớ vào TAA.
  2. VSync là cách hãm lại ngựa chứng GPU. Chơi game xé hình mà bạn đi tìm bug render thì dở ẹc, vô Options bật Vsync lên. Muốn game mobile sống khoẻ pin dai, nhớ VSync=0 & TargetFrameRate=60!