Rasterization (raster hóa) là quá trình chuyển đổi mô tả vector của các nguyên thủy ba chiều (tam giác, đường thẳng, điểm) thành một tập hợp pixel (mảnh) để hiển thị trên màn hình. Theo Khronos Group, 2025, raster hóa là giai đoạn tự động (không lập trình được) của pipeline đồ họa, nằm giữa Vertex Shader và Fragment Shader. Rasterization xác định pixel màn hình nào thuộc về tam giác nào và tính toán các thuộc tính nội suy cho mỗi mảnh.
Những điểm chính
Rasterization là một giai đoạn của pipeline đồ họa chuyển đổi các nguyên thủy hình học (tam giác, đường thẳng) thành một tập hợp các mảnh để xử lý tiếp theo bởi Fragment Shader. Dữ liệu đầu vào là các đỉnh của tam giác trong tọa độ màn hình và các thuộc tính của chúng (màu sắc, pháp tuyến, UV). Đầu ra là một tập hợp các mảnh với các thuộc tính được nội suy.
Không giống như các shader có thể lập trình (Vertex Shader và Fragment Shader), raster hóa là một giai đoạn cố định (không lập trình được). Nhà phát triển không thể thay đổi thuật toán raster hóa, nhưng có thể kiểm soát các tham số của nó: chế độ culling, độ rộng đường, độ lệch độ sâu (polygon offset) và đa mẫu.
Hầu như tất cả đồ họa thời gian thực hiện đại — game, UI, AR/VR — đều sử dụng raster hóa. Đây là phương pháp rendering hiệu quả nhất, có thể xử lý hàng triệu tam giác mỗi khung hình ở 60 FPS. Các bộ raster hóa GPU được tối ưu hóa để xử lý song song hàng nghìn tam giác cùng lúc thông qua các khối ROP (Render Output Units) chuyên dụng.
Raster hóa tam giác bắt đầu sau khi Vertex Shader đã chuyển đổi các đỉnh thành tọa độ màn hình. GPU lấy ba đỉnh của một tam giác và xác định pixel màn hình nào nằm bên trong tam giác đó.
Quy trình bao gồm ba bước tuần tự: xác định hộp giới hạn (bounding box) của tam giác tính bằng pixel — kiểm tra từng pixel bên trong hộp giới hạn xem có thuộc tam giác không (hàm cạnh) — tính toán các thuộc tính nội suy (tọa độ trọng tâm) cho mỗi pixel được phủ. Hàm cạnh (Edge function) là một phương trình tuyến tính xác định một điểm nằm ở phía nào của cạnh tam giác.
| Giai đoạn | Mô tả | Kết quả |
|---|---|---|
| Clipping | Cắt các tam giác nằm ngoài ranh giới viewport | Các nguyên thủy hiển thị |
| Biến đổi viewport | Chuyển đổi thành tọa độ màn hình | Tọa độ pixel |
| Thiết lập tam giác | Tính toán hàm cạnh và hộp giới hạn | Tham số raster hóa |
| Tạo mảnh | Kiểm tra vùng phủ và nội suy | Các mảnh + thuộc tính |
Rasterization có thể được triển khai bằng nhiều thuật toán khác nhau, mỗi thuật toán có sự đánh đổi riêng giữa hiệu suất và chất lượng. GPU hiện đại sử dụng kết hợp nhiều cách tiếp cận.
Thuật toán raster hóa cổ điển được phát triển cho các GPU đời đầu. Tam giác được xử lý theo từng dòng (scanline): đối với mỗi dòng màn hình, các điểm vào và ra của tam giác được xác định và tất cả pixel giữa chúng được tô đầy. Scanline conversion hiệu quả cho các tam giác lớn nhưng đòi hỏi logic phức tạp cho các tam giác có hình dạng tùy ý.
GPU hiện đại sử dụng phương pháp raster hóa half-space: cho mỗi cạnh của tam giác, một hàm cạnh được tính — một phương trình tuyến tính dương ở một bên và âm ở bên kia. Một pixel thuộc về tam giác nếu cả ba hàm cạnh đều dương. Half-space rasterization dễ dàng song song hóa và rất phù hợp với kiến trúc SIMD của GPU.
GPU di động (Qualcomm Adreno, ARM Mali) sử dụng Tile-Based Rendering (TBR). Màn hình được chia thành các tile nhỏ (16x16 hoặc 32x32 pixel), và raster hóa được thực hiện riêng cho từng tile. Điều này giảm thiểu truy cập bộ nhớ bằng cách lưu trữ framebuffer trong bộ nhớ cục bộ nhanh (bộ nhớ tile). TBR giảm mức tiêu thụ điện năng, điều rất quan trọng đối với các thiết bị di động.
Rasterization và ray tracing là hai cách tiếp cận khác nhau cơ bản để rendering đồ họa 3D. Raster hóa chiếm ưu thế trong các ứng dụng thời gian thực, trong khi ray tracing được sử dụng trong rendering ngoại tuyến và đang dần thâm nhập vào thời gian thực (trên GPU tương thích RTX).
| Tham số | Rasterization | Ray Tracing |
|---|---|---|
| Nguyên lý | Tam giác → mảnh | Tia → giao với cảnh |
| Tốc độ | Rất nhanh (hàng triệu tam giác/khung hình) | Chậm (hàng nghìn tia/khung hình) |
| Chất lượng | Cần kỹ thuật bổ sung (bóng, phản chiếu) | Bóng và phản chiếu chính xác vật lý |
| GPU di động | Phương pháp tiêu chuẩn | Hỗ trợ hạn chế (A17 Pro, Snapdragon Gen 3) |
| Tiêu thụ điện | Thấp | Cao |
Raster hóa gây ra vấn đề aliasing — các cạnh răng cưa (jaggies) tại ranh giới tam giác. Điều này xảy ra vì pixel là rời rạc và không thể bị tam giác che phủ một phần. Để chống aliasing, người ta sử dụng đa mẫu (MSAA).
MSAA (Multisample Anti-Aliasing) thực hiện raster hóa với tốc độ lấy mẫu tăng lên (2x, 4x, 8x). Thay vì một mẫu trên mỗi pixel, nhiều mẫu con được sử dụng, mỗi mẫu được kiểm tra vùng phủ tam giác. MSAA 4x xử lý 4 mẫu con trên mỗi pixel, mang lại sự làm mịn cạnh đáng chú ý mà không tăng hoàn toàn độ phân giải rendering.
Không giống như MSAA, các phương pháp khử răng cưa hậu xử lý (FXAA, SMAA, TAA) hoạt động sau raster hóa bằng cách phân tích hình ảnh cuối cùng. FXAA (Fast Approximate Anti-Aliasing) phát hiện các cạnh hình ảnh và áp dụng làm mờ để làm mịn, hoạt động nhanh hơn đáng kể so với MSAA nhưng chất lượng thấp hơn.
Rasterization trên GPU hiện đại được thực hiện bởi các khối phần cứng chuyên dụng — ROP (Render Output Units). Số lượng ROP ảnh hưởng trực tiếp đến tốc độ fill (fill rate) — số pixel mà GPU có thể xử lý mỗi giây.
Đối với GPU di động (Tile-Based Rendering), các yếu tố quan trọng bao gồm: giảm thiểu overdraw thông qua early-Z rejection, sử dụng back-face culling để loại bỏ các tam giác không nhìn thấy và occlusion culling để loại bỏ các tam giác bị che phủ hoàn toàn bởi các đối tượng khác.
Câu hỏi thường gặp
Raster hóa là quá trình biến các tam giác thành pixel trên màn hình. GPU lấy một tam giác ba chiều, xác định pixel màn hình nào nó che phủ và chuyển chúng đến Fragment Shader để tô màu.
Raster hóa chiếu các tam giác lên màn hình và xác định vùng phủ pixel (rất nhanh). Ray tracing phát ra các tia từ camera và kiểm tra giao điểm với hình học (chính xác về mặt vật lý hơn nhưng chậm hơn đáng kể).
Trong quá trình raster hóa, một pixel hoàn toàn thuộc về một tam giác hoặc không — do đó xuất hiện các cạnh răng cưa (aliasing). MSAA làm mịn các cạnh bằng cách sử dụng nhiều mẫu con trên mỗi pixel, trong khi FXAA áp dụng bộ lọc cho hình ảnh cuối cùng.
Không, raster hóa là một giai đoạn cố định của pipeline đồ họa. Nhà phát triển không thể thay đổi thuật toán, nhưng có thể kiểm soát các cài đặt: culling, polygon offset, chế độ raster hóa (điểm, đường, tam giác) và tham số MSAA.
Tile-Based Rendering (TBR) chia màn hình thành các tile và xử lý chúng trong bộ nhớ cục bộ nhanh thay vì VRAM toàn cục. Điều này giảm triệt để mức tiêu thụ điện năng và băng thông, rất quan trọng đối với các thiết bị di động chạy pin.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm