Kỹ thuật khử răng cưa của card màn hình

Khử răng cưa là kỹ thuật xử lý đồ họa rất nổi tiếng của NVIDIA và AMD. Nhưng bạn có bao giờ tự hỏi khử răng cưa là như thế nào, có bao nhiêu loại và tác dụng của chúng như thế nào không. Cardmanhinh.com sẽ cung cấp cho bạn cái nhìn khái quát về kỹ thuật khử răng cưa của card màn hình.

Tags: card màn hình NVIDIA AMD

Khử răng cưa bên phải

Khử răng cưa bên phải

Khử răng cưa là gì ?

Cụm từ khử răng cưa có lẽ đã khá rõ ràng. Khử răng cưa là việc áp dụng các kỹ thuật xử lý hình ảnh để giảm bớt các răng cưa trên bề mặt đó, giúp đem lại hình ảnh mịn màng và đẹp hơn. Trong bài viết này chúng ta chỉ nói đến khử răng cưa đối với các game 3D (Three Dimensional - đồ họa 3 chiều, không phải Stereoscopic 3D tức hiệu ứng hình ảnh nổi). Nguyên lý làm việc của khử răng cưa rất đơn giản, nhưng quá trình xử lý thì không đơn giản như vậy. Các phần cứng máy tính ngày nay (cụ thể là card đồ họa) cung cấp nhiều phương pháp xử lý răng cưa, cùng với nhiều kết quả khác nhau. Thiết lập nào là phù hợp, ưu điểm và khuyết điểm của từng loại, bạn nên chọn phương pháp nào phù hợp với sức mạnh của Card đồ họa của bạn? Bài viết này sẽ gồm 4 phần, phần đầu tiên này sẽ giới thiệu về nguyên lý làm việc cơ bản của kỹ thuật khử răng cưa.

Nguyên lý cơ bản của khử răng cưa

Khử răng cưa đã tồn tại từ rất lâu, từ những ngày đầu tiên của công nghệ hình ảnh 3D. Chúng ta sẽ không đi vào lịch sử của công nghệ này, mà sẽ nói về cách thức mà AA làm việc. Như các bạn đã biết, mọi hình ảnh ta nhìn thấy trên màn hình được cấu thành từ các pixel có hình vuông, là đơn vị cơ bản nhất của hình ảnh và có màu sắc cố định. Tập hợp nhiều các pixel sẽ tạo nên hình ảnh lớn. Do đó khi thể hiện các đối tượng đồ họa như đường chéo, hình tròn, ta sẽ gặp hiện tượng “răng cưa”, hình thành bởi cạnh vuông của các pixel cơ bản đó. Ta theo dõi ví dụ sau:

Hình nguyên gốc và hình đã được xử lý khử răng cưa
Hình nguyên gốc và hình đã được xử lý khử răng cưa

Khi ta vẽ một hình nào đó (đường thẳng hoặc hình tròn), card đồ họa sẽ hiểu là một hình vector có tọa độ, nhưng khi hiển thị lên màn hình thì nó sẽ hiển thị ở dạng raster, tức là hình ảnh được cấu tạo từ các pixel độc lập. Và khi phóng to hình ảnh raster đó ta sẽ thấy rất rõ các pixel. Răng cưa ở đây chính là các cạnh vuông của pixel hình thành, có hình dạng như các bậc thang. Việc khử răng cưa về cơ bản, chính là việc làm giảm đi sự khác biệt rõ ràng giữa các pixel trắng và đen, có thể do việc lấy các mẫu pixel có sắc xám đặt bên cạnh, để làm giảm đi cảm giác răng cưa của hình ảnh.

Tương tự như vậy, khi ta chơi một game 3D nào đó, hình ảnh sẽ có dạng như sau:

Sự khác biệt giữ có và không khử răng cưa

Sự khác biệt giữ có và không khử răng cưa

Các cạnh của đối tượng đồ họa ở ví dụ này như hàng rào, mỏm đá… nếu không áp dụng khử răng cưa sẽ có hình dạng rất gồ ghề, khó nhìn, nhưng khi đã được áp dụng kỹ thuật khử răng cưa, hình ảnh trở nên mịn màn và đẹp mắt. Rất tuyệt đúng không. Lưu ý rằng hiện tượng răng cưa sẽ càng rõ hơn nếu độ phân giải càng thấp, đơn giản vì ở độ phân giải thấp sẽ có ít pixel để hiển thị đối tượng đồ họa đó hơn ở độ phân giải cao.

----------------------------------------------------

Chế độ khử răng cưa khác nhau

Chế độ khử răng cưa khác nhau

Tiếp theo là bạn sẽ tìm hiểu khử răng cưa sẽ phải làm cụ thể những gì để đem lại hình ảnh mịn màng hơn? Hãy cùng tìm hiểu 2 kỹ thuật khử răng cưa lâu đời nhất: SSAA (Super Sampling AntiAliasing – Khử răng cưa siêu mẫu) và MSAA (Multi Sampling AntiAliasing – Khử răng cưa đa mẫu), cùng với cách người ta áp dụng nó vào đồ họa trong các trò chơi điện tử trên máy tính.

Supersampling Anti Aliasing (SSAA, tên khác là FSAA – Full Scene AA):

SSAA là phương pháp khử răng cưa ra đời đầu tiên. SSAA sử dụng sức mạnh phần cứng thuần túy của card đồ họa để xử lý chứ không áp dụng nhiều thuật toán phức tạp như các kỹ thuật về sau. Nguyên tắc rất đơn giản: ví dụ bạn chọn thiết lập 4x SSAA trong game tại độ phân giải 1366 x 768 pixel, máy tính sẽ dựng một khung hình gấp 4 lần độ phân giải gốc của game, là 2732 x 1536, sau đó thu nhỏ khung hình này xuống độ còn phân giải gốc là 1366 x 768. Kết quả đạt được là hình ảnh trở nên mịn màng, trơn tru, bao gồm tất cả các đối tượng trong game như: các cạnh, các vân bề mặt… Rất đơn giản nhưng hiệu quả, tuy nhiên để đạt được chất lượng hình tối ưu như vậy máy tính bạn phải gồng gánh một khối lượng công việc gấp 4 lần bình thường, một cái giá quá đắt để đổi lại kết quả này.

Card đồ họa sẽ dựng khung hình gấp 4 lần kích thước gốc - Sau đó resize lại kích thước như cũ để tạo hiệu ứng khử răng cưa

Card đồ họa sẽ dựng khung hình gấp 4 lần kích thước gốc
Sau đó resize lại kích thước như cũ để tạo hiệu ứng khử răng cưa

Thực tế đến tại thời điểm này, SSAA vẫn là phương pháp khử răng cưa cho chất lượng hình ảnh đẹp nhất, nhưng để có chất lượng tốt như vậy, mọi thành phần của máy bạn phải chạy với công suất gấp nhiều lần khối lượng công việc gốc phải làm. Kết quả là khung hình của game sẽ sụt giảm nghiêm trọng tương ứng với số mẫu khử răng cưa SSAA. Do đó, các nhà phát triển đã phát triển nhiều giải pháp hiệu quả hơn nhằm cân bằng chất lượng hình ảnh và hiệu năng.

Multisampling (MSAA):

Kỹ thuật khử răng cưa MSAA được phát triển nhằm thay thế cho SSAA vốn không hiệu quả về tốc độ khung hình. MSAA sẽ cố gắng cân bằng giữa hiệu năng và chất lượng hình ảnh, bằng cách chọn lọc những khử răng cưa những chỗ cần thiết và bỏ qua những chỗ không cần thiết, giúp giảm tối đa lượng răng cưa trong khả năng cho phép mà vẫn đảm bảo hiệu năng ổn định.

Nguyên tắc thực hiện là MSAA chỉ tìm các cạnh của vật thể và tiến hành khử răng cưa cho nó. Để làm việc này, card đồ họa sẽ sử dụng một thuật toán riêng gọi là “Z-test” để nhận biết các cạnh của vật thể, tiến hành lấy mẫu về màu sắc của các pixel trên cạnh này và thay thế các pixel bên cạnh bằng các pixel có màu sắc trung gian tùy vào vị trí và số mẫu được lấy của nó.

Sau đây là ví dụ minh họa cách thức làm việc của MSAA. Ở đây ta có 4 pixel cạnh nhau để thể hiện 1 đường chéo. Nếu không áp dụng các thuật toán khử răng cưa, ta có kết quả của hình bên cạnh , vì đơn giản card đồ họa sẽ lấy màu sắc ngay tại trung tâm pixel đó để thể hiện lên màn hình, bất kể tại pixel đó có bao nhiêu đối tượng.

Mỗi pixel sẽ lấy mẫu tại trung tâm của pixel đó, cho ra hình ảnh bên phải

Mỗi pixel sẽ lấy mẫu tại trung tâm của pixel đó, cho ra hình ảnh bên phải

Nếu MSAA được áp dụng (mức 4X) thì card đồ họa sẽ tiến hành lấy 4 mẫu tại mỗi pixel, các mẫu này sẽ được card đồ họa xử lý các giá trị màu sắc trung bình để cho ra pixel có màu trung gian. Theo hình bên dưới ta thấy pixel phía trên bên trái có 2 mẫu có màu xanh dương và 2 mẫu có màu xanh lục, card đồ họa sẽ xử lý pixel này có màu gồm 50% xanh dương và 50% xanh lục. Tương tự, pixel bên phải phía dưới sẽ có 25% màu xanh dương và 75% màu xanh lục. Riêng pixel góc trong cùng thì phép thử “Z-test” xác định không phải là cạnh nên MSAA sẽ không lấy mẫu, giúp giảm tải cho hệ thống.

Mỗi pixel lấy 4 mẫu thử, sau đó màu cho pixel đó sẽ trộn kết quả mà 4 mẫu đem lại

Mỗi pixel lấy 4 mẫu thử, sau đó màu cho pixel đó sẽ trộn kết quả mà 4 mẫu đem lại

Theo đó ta có thể thấy với số mẫu càng tăng lên thì độ chính xác của việc pha màu sẽ càng cao hơn, làm giảm hiệu ứng răng cưa đi, tuy nhiên card đồ họa cũng phải chịu gánh nặng nhiều hơn và khung hình sẽ giảm nhiều hơn bình thường. Việc áp dụng thuật toán “Z-test” cũng giúp MSAA tránh việc phải lấy mẫu pixel của đối tượng khác nằm bên dưới đối tượng cần lấy mẫu.

MSAA rõ ràng đem lại hiệu quả cao hơn hẳn SSAA, cân bằng được hiệu năng và chất lượng hình ảnh. Tuy nhiên MSAA chỉ phát huy hiệu quả với cạnh biên của các đối tượng, trong khi lớp vân bề mặt (texture) của đối tượng thì không được xử lý, SSAA thì ngược lại sẽ xử lý khử răng cưa với tất cả đối tượng trên màn hình. Do đó với các đối tượng có lớp vân bề mặt trong suốt sẽ vẫn còn nguyên răng cưa nếu sử dụng MSAA.

Ví dụ dưới đây sẽ chỉ ra rõ nhược điểm của MSAA, hãy để ý kỹ các hàng rào lưới. Do lớp hàng rào này nằm trên một lớp vân bề mặt trong suốt (để nhìn thấy các đối tượng phía sau) nên không nằm trong diện xử lý của MSAA, kết quả là răng cưa khắp nơi trên hàng rào, rất xấu xí. Trong khi đó SSAA không cần phân biệt gì đều xử lý hết nên hình ảnh rất mịn màng.

Nhược điểm của MSAA

Nhược điểm của MSAA

Do MSAA còn những hạn chế như vậy nên cả nVIDIA và AMD đều phát triển các kỹ thuật khử răng cưa riêng của mình. Cả hai hãng đều ra sức quảng bá cho công nghệ riêng của mình và cho rằng nó ưu việt hơn công nghệ của đối thủ. Thực hư của việc này ra sao thì phần 3 của bài viết sẽ trình bày rõ hơn. Nhưng trước hết ta hãy nhìn lại hiệu quả của 2 công nghệ cổ điển này dưới sự xử lý của 2 dòng card nổi tiếng nhất là nVIDIA GeForce và AMD Radeon ra sao nhé.

So sánh chất lượng hình ảnh xử lý bởi card màn hình NVIDIA và AMD:

Trước tiên về kỹ thuật SSAA, nVIDIA đã gỡ bỏ tính năng này trong các driver mới do hiệu năng quá kém. Tương tự AMD cũng không hỗ trợ SSAA cho DirectX 10 và 11, chỉ hỗ trợ tập lệnh DirectX 9 mà thôi. Do đó chúng ta sẽ sử dụng Source Engine của Valve với chế độ DirectX 9 để kiểm tra hiệu quả xử lý mà 2 dòng card này đem lại.

Hình trên phóng to lên 4 lần
Hình trên phóng to lên 4 lần

Qua hình trên ta thấy hiệu quả xử lý MSAA của cả 2 dòng card đồ họa đều cho kết quả rất giống nhau. Và cũng cho thấy khi tăng số mẫu lên nhiều lần nhưng hiệu quả xử lý hình ảnh thu được lại không tương xứng, có nghĩa tăng từ 2x lên 4x thì hình ảnh rất đẹp, nhưng 4x lên 8x thì không khác nhau nhiều lắm và 8x thì kết quả giống hệt 16x mà thôi.

----------------------------------------------------

Adaptive AA của AMD
Adaptive AA của AMD

Như đã nói ở phần trên, MSAA là giải pháp khử răng cưa khá tốt, nó đem lại chất lượng hình ảnh đẹp cùng với hiệu năng xử lý tốt, nhưng MSAA có một nhược điểm quan trọng, đó là nó không thể xử lý răng cưa cho các đối tượng có vân bề mặt trong suốt (transparency texture). Vì vậy các nhà phát triển phải làm gì để loại bỏ được lượng răng cưa này? Mời các bạn theo dõi tiếp phần 3 của loại bài viết “Tìm hiểu kĩ thuật khử răng cưa trong đồ họa vi tính” ngay sau đây:

Trước tiên ta sẽ cùng tìm hiểu về vân trong suốt

Các game ngày nay chứa rất nhiều các đối tượng 3 chiều phức tạp, mỗi đối tượng gồm nhiều đa giác hợp thành (polygon), mỗi đa giác lại chứa nhiều thông tin như vân của đối tượng đó, ánh sáng, đổ bóng… Do đó các nhà phát triển phải “vẽ” sẵn các mô hình có độ chi tiết từ cao đến thấp tùy theo khoảng cách của đối tượng đến người chơi nhằm giảm tải cho hệ thống. Công nghệ Tessellation trong thư viện DirectX 11 như trong bài viết phần 1 đã giải quyết được bài toán này.

Tuy nhiên khi có quá nhiều đối tượng phức tạp nhưng nhỏ cùng xuất hiện trong một khung cảnh thì sao (ví dụ rất nhiều chiếc lá trong rừng, hoặc 1 bãi cỏ, hoặc các mắt lưới trên một khung lưới…). Nếu mỗi mắt lưới được dựng riêng rẽ thì không một máy tính nào có thể kham nổi số lượng đối tượng khổng lồ như vậy, kể cả các máy chơi game mạnh nhất hiện nay. Vân trong suốt là giải pháp cho vấn đề này.

Hình ảnh trong game cũng rõ ràng hơn

Hình ảnh trong game cũng rõ ràng hơn

Vân trong suốt sẽ mô phỏng các đối tượng riêng rẽ phức tạp đó bằng các hình 2D thông thường. Hãy lấy ví dụ cụ thể là một hàng rào lưới B40 trong game. Thay vì dựng từng mắt lưới riêng rẽ, ta chỉ việc “vẽ” một mảng lưới dạng 2D hoàn toàn, đồng thời làm trong suốt các mắt lưới ở giữa, như vậy ta đã có một lớp hàng rào lưới rất đẹp mà không hề làm nặng nề máy.

Hình ảnh sau sẽ cho bạn hình dung vân trong suốt là như thế nào, các đối tượng hình học thể hiện như thế nào và cảnh cuối cùng trong game ra sao:

Lớp vân của hàng rào (hình nền có các ô bàn cờ là lớp trong suốt)

Lớp vân của hàng rào (hình nền có các ô bàn cờ là lớp trong suốt)

Mô hình khung của các đối tượng 3D ở phía sau lớp lưới
Mô hình khung của các đối tượng 3D ở phía sau lớp lưới

Hình ảnh được dựng nên sau khi kết hợp 2 lớp trên
Hình ảnh được dựng nên sau khi kết hợp 2 lớp trên

Như bạn thấy, vân trong suốt đã giải quyết được vấn đề thể hiện chi tiết của lớp lưới này mà không làm tăng tải của hệ thống. Tuy nhiên vấn đề chính ở lớp vân trong suốt này, vì MSAA, như đã nói ở trên, không thể khử được răng cưa đối với vân trong suốt, do đó lớp lưới này vẫn còn nguyên răng cưa cho dù bạn có bật 16X MSAA chăng nữa. SSAA thì xử lý răng cưa cho lớp lưới này rất tốt, nhưng tốc độ thì lại lê lết thảm hại. Do đó đã phát sinh yêu cầu phải có một kỹ thuật mới để xử lý được lớp vân trong suốt này.

nVIDIA đã có công nghệ riêng của mình để làm việc này. Với sự công bố dòng card đồ họa GeForce 7 series (ra mắt tháng 6/2005 – sản phẩm mạnh nhất lúc này là GeForce 7950), họ đã giới thiệu một kỹ thuật khử răng cưa cho vân trong suốt, gọi tắt là TAAA. TAAA có 2 cách tiếp cận, một sử dụng kỹ thuật MSAA (gọi là TrMSAA – Transparency MSAA ) và một sử dụng SSAA (gọi là TrSSAA – Transparency SSAA).

Ở phần trên ta đã có nói đến nguyên lý của MSAA là xử lý các pixel nằm ở cạnh đối tượng. Với TAAA, các pixel nằm trong đối tượng có vân trong suốt cũng sẽ được lấy mẫu, không chỉ các pixel ở cạnh. Hai kỹ thuật của TAAA khác nhau ở chỗ: TrMSAA sẽ lấy mẫu pixel các vân trong suốt cùng số mẫu MSAA, trong khi TrSSAA sẽ lấy mẫu riêng cho vân trong suốt theo 2, 4 hoặc 8 mẫu, riêng biệt với các pixel ở cạnh. Mọi việc có vẻ được giải quyết hoàn toàn.

TrMSAA và TrSSAA của nVIDIA
TrMSAA và TrSSAA của nVIDIA

Tuy nhiên không hẳn vậy. Theo lý thuyết như trên thì mọi pixel đều được xử lý. Nhưng TrSSAA không chơi với DirectX 9, còn TrMSAA chỉ hoạt động với DirectX 9, nhưng không ổn định.

Bên phía AMD cũng phát triển một kỹ thuật tương tự với TAAA của Nvidia, gọi là AdAA (Adaptive AA - khử răng cưa thích ứng), cùng với dòng card Radeon X1000 (lúc bấy giờ là ATi). Nguyên lý hoạt động tương tự như TAAA, chỉ khác biệt ở chỗ ATi chỉ giới hạn kỹ thuật xử lý vân trong suốt bằng MSAA, tức hoàn toàn giống với TrMSAA, kể cả việc chỉ hoạt động với DirectX 9. ATi cho biết kỹ thuật AdAA này của họ vẫn có thể dùng với các game DirectX 10 và 11, nếu các nhà phát triển áp dụng kỹ thuật này vào game của họ. Hiện tại có một số game đã ứng dụng AdAA, ví dụ S.T.A.L.K.E.R: Clear Sky, S.T.A.L.K.E.R: Call of Pripyat và Metro 2033 đã ứng dụng hiệu quả kỹ thuật này.

So sánh về hiệu quả xử lý của 2 dòng card GeForce và Radeon

So sánh về hiệu quả xử lý của 2 dòng card GeForce và Radeon

Nhìn hình trên bạn có thể thấy, kỹ thuật xử lý răng cưa cho vân bề mặt đem lại chất lượng hình ảnh vượt trội. Lớp lưới đã trở nên mịn màng và trơn tru, khác hẳn với kết quả tệ hại mà MSAA truyền thống mang lại.

Tuy nhiên, với các game DirectX 10 và 11 thì sao? Trong thư viện DirectX 10 và 11 đã có một công nghệ gọi là alpha-to-coverage, sử dụng sức mạnh của GPU để xử lý răng cưa cho vân bề mặt. Các game mới ra trong năm 2012 này đã ứng dụng các kỹ thuật dựng hình hàng rào và cây cối tốt và ít răng cưa hơn nhiều các game thế hệ DirectX 9. Bài tiếp theo sẽ giải thích các kỹ thuật khử răng cưa mới trong DirectX 10 và 11.

----------------------------------------------------

8x AA thường so với 32x CSAA của nVIDIA
8x AA thường so với 32x CSAA của nVIDIA

Chế độ khử răng cưa lấy mẫu bao phủ với công nghệ CSAA của nVIDIA và EQAA của AMD:

Với sự ra mắt của dòng card GeForce 8, nVIDIA đã giới thiệu một kỹ thuật mới trong việc xử lý răng cưa là khử răng cưa lấy mẫu bao phủ (CSAA - Coverage sampling anti-aliasing). Về cơ bản CSAA chính là MSAA có lấy thêm các mẫu bao phủ bênh cạnh. Mẫu bao phủ sẽ thực hiện việc kiểm tra xem có bất kỳ đa giác nào nằm tại vị trí của nó hay không, sau đó sẽ thực hiện việc tính toán để xác định màu cuối cùng cho pixel.

NVIDIA giới thiệu nguyên lý CSAA cho dòng card GF100 - Fermi

NVIDIA giới thiệu nguyên lý CSAA cho dòng card GF100 - Fermi

Các mẫu bao phủ tương đối dễ thu thập, và nó có thể giúp tăng cường chất lượng hình ảnh nhưng chỉ mất một ít hiệu năng khi so sánh với MSAA. Nói đơn giản CSAA 4x tương đương với MSAA 2x, CSAA 8x chỉ nặng bằng MSAA 4x và tương tự. Chúng ta có thể theo dõi hình minh họa sau, ô vuông màu tím là pixel, màu đỏ là vị trí lấy mẫu MSAA, màu vàng là vị trí lấy mẫu bao phủ. Tại chế độ 2x MSAA, ta có thêm 2 mẫu bao phủ tương đương 4 vị trí lấy mẫu của CSAA, kết quả chất lượng hình ảnh cao hơn so với 2x MSAA truyền thống.

Nguyên lý lấy mẫu bao phủ của EQAA, tương tự CSAA của nVIDIA

Nguyên lý lấy mẫu bao phủ của EQAA, tương tự CSAA của nVIDIA

AMD cũng giới thiệu công nghệ xử lý răng cưa tương tự với CSAA của nVIDIA, gọi là chế độ khử răng cưa tăng cường chất lượng (enhanced quality anti-aliasing - EQAA), trong dòng card Radeon HD 6900. Tuy nhiên các dòng card đồ họa còn lại của AMD (kể cả Radeon HD 6800) cũng không thể gánh nổi EQAA, do đó đa phần người dùng AMD không thể sử dụng EQAA được. Trái lại, các card của NVIDIA hỗ trợ CSAA rất rộng rãi, từ GeForce 8000; 9000 cho đến 200; 300; 400; 500 và hiện tại là 600.

Cách đặt tên dễ gây nhầm lẫn:

NVIDIA gây rắc rối và hiểu nhầm với cách đặt tên phương pháp khử răng cưa của mình. Đôi khi con số x thể hiện số mẫu MSAA, đôi khi x lại là kết hợp số mẫu MSAA và cả số mẫu bao phủ. Ví dụ ta gặp trường hợp 8xQ, thì hậu tố Q thể hiện số mẫu MSAA truyền thống, nhưng 16xQ thì lại bao gồm 8x MSAA và 8 mẫu bao phủ. Do đó dẫn đến một số trường hợp game và driver Forceware không hiểu nhau, thiết lập 8x trong game thì driver lại hiểu là 4x MSAA + 4 mẫu bao phủ.

Các thiết lập CSAA của nVIDIA, khá rắc rối và khó hiểu

Các thiết lập CSAA của nVIDIA, khá rắc rối và khó hiểu

Cách đặt tên của AMD thì đơn giản và dễ hiểu hơn nhiều, các cấp x của AMD chính là số mẫu MSAA, trong khi tiền tố EQ là số mẫu bao phủ thêm vào. Ví dụ 8x của AMD là 8 mẫu MSAA, trong khi 8XEQ là 8 mẫu MSAA thêm 8 mẫu bao phủ.

Bảng so sánh độ tương đương giữa các cấp khử răng cưa của GeForce và Radeon

Bảng so sánh độ tương đương giữa các cấp khử răng cưa của GeForce và Radeon

So sánh hình ảnh về chế độ khử răng cưa lấy mẫu bao phủ

Việc lấy mẫu bao phủ nhìn chung chỉ cải thiện một ít chất lượng hình ảnh trên cả card GeForce và Radeon. Rất rõ là càng nhiều mẫu MSAA chất lượng hình ảnh sẽ càng được cải thiện, nhưng càng nhiều mẫu bao phủ thì có thể dẫn đến không cải thiện chất lượng chút nào. Và do cách thức đặt tên của nVIDIA, chất lượng hình ảnh 16x mang lại không bằng 8xEQ của AMD, có lẽ hãng tập trung vào số lượng nhằm đem lại tính quảng cáo tốt hơn.

----------------------------------------------------

Kỹ thuật xử lý răng cưa MLAA của AMD

Kỹ thuật xử lý răng cưa MLAA của AMD

Qua 4 bài viết trước, chúng ta đã cùng tìm hiểu về công nghệ khử răng cưa tiên tiến trong đồ họa vi tính, và 2 hãng nổi tiếng là nVIDIA và AMD đều có những công nghệ khá tương tự nhau, chỉ khác cách gọi mà thôi, đó là TAAA so với Adaptive AA, đó là CSAA và EQAA. Tuy nhiên ngoài những công nghệ tương tự nhau, các hãng cũng đã phát triển những kỹ thuật của riêng mình như một cách tăng lợi thế cạnh tranh. Phần cuối cùng của loạt bài “Tìm hiểu kĩ thuật khử răng cưa trong đồ họa vi tính” sẽ giới thiệu các công nghệ riêng của AMD/ATi và nVIDIA ngay sau đây.

Khử răng cưa tạm thời (Temporal AA – TAA) - AMD

Cùng với sự ra mắt của dòng Radeon X800. ATI (thời điểm này) đã giới thiệu một kỹ thuật khử răng cưa mới, gọi là khử răng cưa tạm thời (TAA). Về bản chất TAA vẫn dựa trên MSAA, nhưng sử dụng một thủ thuật nhỏ để gấp đôi số mẫu MSAA bằng cách sử dụng 2 mẫu MSAA của cùng 1 pixel nhưng khác khung hình. Điều này dựa vào đặc điểm của mắt người: một khi số khung hình trên mỗi giây (frame per second, hay gọi tắt là FPS) vượt quá 60, mắt người sẽ không đủ khả năng để phân biệt được sự khác nhau giữa 2 khung hình liên tiếp nhau, do đó, ATI đã dựa vào đặc điểm này để tiến hành nhân đôi số mẫu MSAA.

Theo dõi ví dụ trên, ta có khung hình 1 (frame 1) và khung hình 2 (frame 2) kế tiếp nhau, card đồ họa sẽ tiến hành lấy 2 mẫu của khung hình 1 (màu xanh lá) và 2 mẫu của khung hình 2 (màu xanh dương) và áp dụng 4 mẫu thử này cho 1 khung hình chung. Kết quả ta có 4x MSAA mà card đồ họa chỉ phải gánh công việc bằng 2xMSAA bình thường. Tương tự 4xMSAA bình thường đạt chất lượng 8xMSAA sử dụng TAA. Tuy nhiên TAA cũng không phải là không có nhược điểm. Trước tiên, V-sync* phải được bật và sau đó, máy phải đủ mạnh để duy trì số khung hình trên 60, nếu mức khung hình sụt xuống dưới 60, TAA sẽ bị vô hiệu hóa. Nguyên lý này khá đơn giản và hiệu quả, tuy nhiên nhược điểm cũng không hề dễ chịu. Do vậy TAA đã bị ATI loại bỏ trong các bản driver Catalyst một thời gian sau đó.

*V-sync (Đồng bộ tốc độ khung hình với tần số làm tươi của màn hình): đây là một tính năng giới hạn FPS tối đa bằng với tần số làm tươi của màn hình, ví dụ màn hình của bạn có Refresh Rate là 60Hz thì khi bật V-sync, FPS tối đa sẽ là 60.

Khử răng cưa tùy chỉnh (Custom Filter Anti-Aliasing – CFAA hay còn có tên khác là EDAA) - AMD

Được ra mắt cùng với ATi Radeon HD 2900XT, CFAA là một kỹ thuật khử răng cưa mà không chỉ lấy các mẫu bên trong pixel mà còn lấy các mẫu ở bên ngoài pixel đó. Điều đó có nghĩa các mẫu thử này có thể được lấy trong một bán kính nhất định mà pixel gốc là trung tâm. Khi được giới thiệu, ATI cung cấp 3 bộ lọc (filter) CFAA đó là Narrow, Wide và Edge-Detect. Narrow và Wide ở đây chính là bán kính thu mẫu so với pixel, còn bộ lọc Edge-Detect lại áp dụng thuật toán để nhận diện cạnh của 1 đối tượng đồ họa và tập trung việc khử răng cưa ở các khu vực đó.

Dễ thấy Edge-Detect là cách thức CFAA đạt hiệu quả cao nhất, vì nó có thể nhận diện được các cạnh và xử lý các cạnh này, vốn là các đối tượng chứa nhiều răng cưa nhất, nhưng nó cũng nặng nề nhất vì yêu cầu việc xử lý thuật toán phức tạp hơn. Các bộ lọc theo bán kính thì chỉ đem lại hiệu quả không đáng kể so với MSAA truyền thống, do đó AMD đã bỏ 2 bộ lọc này kể từ dòng Radeon HD 6000 series.

Cũng khung hình trên sau khi phóng to lên 4 lần

Cũng khung hình trên sau khi phóng to lên 4 lần

Như đã nói ở bài trước, kỹ thuật EQAA chỉ dành riêng cho dòng Radeon HD 6900 cao cấp, do đó kỹ thuật CFAA sát cạnh sẽ khá phù hợp với dòng Radeon HD 6800 trở xuống, khi nó cung cấp chất lượng hình ảnh khá hơn so với MSAA truyền thống, nhưng lại không quá nặng nề so với EQAA.

Khử răng cưa hình thái học (Morphological Anti-Aliasing – MLAA) - AMD

Khử răng cưa hình thái học (MLAA) là kỹ thuật khử răng cưa mới hoàn toàn, được giới thiệu cùng với Radeon HD 6800. Nó có cách tiếp cận khác hoàn toàn với các kỹ thuật trước đó, MLAA là kỹ thuật hậu xử lý (post-processing). Nó không tiến hành xử lý màu sắc các pixel rồi mới xuất ra màn hình như các kỹ thuật trước, mà chỉ xử lý khung hình sau khi đã được dựng hoàn chỉnh. Nguyên lý làm việc như sau: MLAA sẽ phân tích 1 khung hình, xác định các cạnh cũng như các phổ màu của khung hình, sau khi xác định được các đối tượng cụ thể, nó sẽ tiến hành làm mờ các cạnh bằng phương pháp pha trộn màu. MLAA tương tự với các bộ lọc giảm răng cưa trong Adobe Photoshop.

Phân biệt được cạnh của đối tượng (trái), rồi tiến hành pha trộn màu để giảm răng cưa (phải)

Phân biệt được cạnh của đối tượng (trái), rồi tiến hành pha trộn màu để giảm răng cưa (phải)

Trên thực tế, MLAA hoạt động khá tốt, đem lại chất lượng hình ảnh gần tương đương với SSAA (kỹ thuật khử răng cưa đầu tiên nhưng có chất lượng hình ảnh tốt nhất) nhưng mức độ công việc cho card đồ họa chỉ sánh ngang với CFAA Edge-Detect. Nhìn chung, nó đem lại chất lượng hình ảnh tốt nhất trong các kỹ thuật khử răng cưa mà lại không quá nặng nề. Nhưng, như đã nói, không có kỹ thuật nào là hoàn hảo cả, MLAA cũng vậy. Do nguyên lý xử lý hậu cảnh của mình, MLAA sẽ khử “răng cưa” ở tất cả các đối tượng độc lập, điều này kể cả chữ, các đối tượng HUD trên màn hình (đạn dược, giáp…) đều bị làm mờ đi, rất khó chịu, đặc biệt là chữ có kích thước nhỏ.

Phóng to một khung hình không bật chế độ khử răng cưa (game Starcraft 2)

Phóng to một khung hình không bật chế độ khử răng cưa (game Starcraft 2)

MLAA hiện tại chỉ có trong dòng Radeon HD 6000, nhưng với driver Catalyst 11.2 trở đi thì dòng card Radeon HD 5000 cũng đã được hỗ trợ.

Kỹ thuật khử răng cưa Quincunx - AMD

Quincunx được giới thiệu cùng với thế hệ card Geforce 3 (ra mắt năm 2001). Quincunx dùng nguyên lý khử răng cưa khá kỳ lạ, nó không lấy các mẫu xung quanh pixel mà tạo ra một bản sao của khung hình hiện tại, theo hướng 45 độ ngược chiều kim đồng hồ, nhờ đó mà mỗi pixel góc sẽ có 4 pixel bản sao bên cạnh, giúp làm mờ sự khác màu giữa pixel gốc đó và các pixel lân cận, tạo nên hiệu ứng làm mờ răng cưa. Mặc dù NVIDIA giới thiệu Quincunx đem lại hiệu quả khử răng cưa tương đương 4xAA chỉ với thiết lập 2xAA, nhưng trên thực tế, phương pháp này chỉ làm cho hình ảnh trở nên lờ mờ khá khó chịu, và bản chất cũng không phải là thực sự khử đi răng cưa như các công nghệ đã nói ở bài trước.

Do đó từ đời Geforce 4 trở đi NVIDIA đã bỏ Quincunx do Geforce 4 trở đi đã đủ mạnh để gánh vác MSAA.

Như hình trên, ta thấy các pixel gốc màu đen, các pixel bản sao có màu đỏ lệch một góc 45 độ so với pixel gốc, từ đó các pixel đen được bao quanh bởi 4 pixel đỏ và tạo hiệu ứng làm mờ, giúp giảm bớt răng cưa.

Khử răng cưa ước tính nhanh (Fast Approximate Anti-Aliasing - FXAA) - NVIDIA

FXAA là câu trả lời của nVIDIA dành cho MLAA của ATi. Tương tự MLAA, FXAA cũng là một kỹ thuật xử lý hậu cảnh. FXAA sẽ tìm và nhận biết các đối tượng độc lập và áp dụng một bộ lọc làm mềm để giảm mức tương phản giữa đối tượng đó với môi trường xung quanh, kết quả là đối tượng sẽ giảm bớt răng cưa. Điểm khác nhau là FXAA sẽ tìm các mức độ tương phản ở từng pixel còn MLAA sẽ tìm độ tương phản ở từng khuôn mẫu (pattern), do đó FXAA nhìn chung hiệu quả hơn MLAA.

----------------------------------------------------

5 phần của loạt bài viết "Tìm hiểu kỹ thuật khử răng cưa trong đồ họa vi tính" vừa qua đã đem lại cho chúng ta rất nhiều điều về kỹ thuật khử răng cưa. Nguyên lý ban đầu rất đơn giản, nhưng có rất nhiều cách tiếp cận, đem lại nhiều kết quả khác nhau. Mỗi cách tiếp cận lại có những ưu nhược điểm của riêng mình.

Điều đầu tiên chúng ta rút ra sau loạt bài này là: trong các chế độ trên, MSAA vẫn là lựa chọn cơ bản nhất. Mặc dù các kỹ thuật cải tiến của MSAA như CSAA, EQAA và CFAA Edge-Detect có thể giúp cải tiến việc khử răng cưa ít nhiều, nhưng MSAA vẫn là chế độ đem lại chất lượng hình ảnh cân bằng với hiệu năng nhất. Các mẫu bao phủ hay edge-detect đều khó đem lại sự khác biệt mà người dùng có thể phân biệt được, trừ khi chúng ta dừng game lại và dùng kính lúp để phóng to ra.

Điều thứ hai đó là: MSAA sẽ không thể khử răng cưa cho các đối tượng nằm trên vân trong suốt, và chúng ta cần có một phương pháp tối ưu để xử lý răng cưa cho đối tượng trên vân trong suốt. AMD đã hơn NVIDIA trong mảng này, khử răng cưa thích ứng đã vượt qua TrSSAA của NVIDIA.

Vậy còn MLAA và FXAA thì sao? Chúng hoạt động tương đối tốt, giảm được hầu hết răng cưa. Ngoài ra chúng độc lập với MSAA, có thể hoạt động song song với nhau để tăng cường hiệu quả xử lý. MLAA và FXAA nhìn chung khá hiệu quả, nhưng chúng cũng xử lý răng cưa trên cả những đối tượng 2D không liên quan trên màn hình, ví dụ các dòng chữ phụ đề trong game, khiến cho một số người dùng cảm thấy khó chịu. Có rất nhiều kỹ thuật khử răng cưa như loạt bài đã nói, vậy lựa chọn nào là phù hợp nhất với bạn? Qua thực tế, chế độ khử răng cưa MSAA 4x là tương đối cân bằng, đem lại hình ảnh đẹp nhưng không quá nặng nề cho máy tính. Với người dùng nVIDIA còn có lựa chọn là TrSSAA để giảm tối đa răng cưa cho các vân trong suốt. Hy vọng AMD nâng cấp AdAA (Adaptive AA) để người dùng mọi card Radeon cũng không thua thiệt với người dùng nVIDIA.

Tóm lại, qua loạt bài viết, chúng ta đã nắm được nguyên lý kỹ thuật khử răng cưa là gì, gồm các loại chính nào cũng như những kỹ thuật của 2 hãng lừng danh là AMD và nVIDIA. Chúng ta cũng biết được ưu nhược điểm của từng loại và độ hiệu quả của chúng. Và chúng ta đã biết vai trò của kỹ thuật khử răng cưa trong các game máy tính là quan trọng như thế nào, chính nhờ kỹ thuật khử răng cưa mà hình ảnh trong game trở nên mịn màng và chân thực hơn, bớt thô kệch hơn.

(Copy từ tinhte)