Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Các trò chơi 3D mà chúng ta chơi và yêu thích đều được tạo thành từ hàng nghìn, nếu không muốn nói là hàng triệu đường thẳng có màu và các cạnh khác. Và do cách mà những thứ này xuất hiện trên màn hình của bạn, chúng thường trông có vẻ lởm chởm và gây mất tập trung. Trong phần thứ năm của nghiên cứu chuyên sâu về kết xuất trò chơi 3D, chúng tôi sẽ giải thích những phương pháp nào được sử dụng để làm mịn các cạnh của thế giới mà chúng ta chơi. Tuy nhiên, lần này không có nhiều toán học, vì vậy đó là một chút tin tốt!

Vì chúng ta sẽ đi sâu vào để xem tất cả những thứ này hoạt động như thế nào, nên bạn có thể muốn xem 101 Kết xuất trò chơi 3D của chúng tôi, nếu bạn chưa quen với toàn bộ công cụ này. Sau đó, bạn có thể bắt kịp các yếu tố kết xuất phức tạp hơn trong các bài viết bên dưới.

Về mặt toán học, răng cưa được tạo ra khi một ‘tín hiệu’ liên tục được chuyển đổi thành một tập giá trị riêng biệt, thông qua lấy mẫu. Rasterizing một đường thẳng hoặc đường cong tạo ra răng cưa không gian – những hình dạng hình học này thực sự bao gồm vô số điểm giữa hai vị trí trong không gian và việc biểu thị nó bằng một số pixel cố định sẽ luôn dẫn đến kết quả gần đúng của đường thẳng đó, bất kể có bao nhiêu pixel được sử dụng.

Vì phiên bản pixel của đường không còn là một đường thực tế, nên việc di chuyển nó hoặc đặt nó bên cạnh các hình dạng khác sẽ tạo ra vô số điểm kỳ lạ về hình ảnh, đó là điều mà chúng tôi đang đề cập đến với thuật ngữ “răng cưa”.

Bạn có thể thắc mắc liệu quy trình này có thực sự cần thiết hay không nhưng nó xuất phát từ thực tế là hình ảnh kết xuất cần được hiển thị trên màn hình. Bất kể nó được làm từ ống tia âm cực (CRT), màn hình tinh thể lỏng (LCD) hay bảng plasma, màn hình đó sẽ tạo ra hình ảnh bằng cách sử dụng một mảng các thành phần màu.

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Một số tín hiệu thay đổi theo thời gian, thay vì theo không gian và bạn cũng nhận được răng cưa ở đây khi lấy mẫu ở các khoảng thời gian đã đặt. Ví dụ: chuyển đổi một rãnh âm thanh tương tự sang một rãnh kỹ thuật số liên quan đến việc đo mức âm thanh cứ sau vài phần giây (trong trường hợp, chẳng hạn như âm thanh CD, cứ sau 0,02 mili giây).

Sự khác biệt giữa tín hiệu được tạo từ mẫu và tín hiệu ban đầu tạo ra răng cưa tạm thời và thường được xử lý bằng cách lấy mẫu ở tốc độ nhanh hơn. Nhưng nếu tín hiệu thực sự là một chuỗi chuyển động thì sao? Nếu chúng ta quan sát thế giới thực, mọi thứ xung quanh chúng ta dường như di chuyển liên tục, vì vậy khi chúng ta chuyển đổi điều này thành một luồng ảnh chụp nhanh của chuyển động này, chúng ta sẽ nhận được răng cưa.

Trong thế giới điện ảnh, điều này dẫn đến chuyển động kỳ lạ, chẳng hạn như bánh xe ô tô dường như quay theo hướng ngược lại với hướng của phương tiện. Nó cũng xuất hiện trong đồ họa 3D, khi tốc độ khung hình kết xuất của cảnh không đủ cao để thể hiện đầy đủ chuyển động của các đối tượng và nhân vật, dẫn đến các cạnh trông bị mờ hoặc lởm chởm, hiện tượng này càng trầm trọng hơn do răng cưa không gian.

Mặc dù các kỹ thuật được sử dụng để khắc phục những vấn đề này được gọi chung là khử răng cưa (viết tắt là AA), nhưng những gì được sử dụng cho phim lại hoàn toàn khác đối với trò chơi 3D. Trên thực tế, đối với cái sau, có rất nhiều phương pháp được sử dụng và có đủ loại tên khác nhau. Nhưng trước khi chúng ta xem xét tiền đề chung của các thuật toán được sử dụng phổ biến nhất, hãy xem xét độ phân giải khung hình và tốc độ khung hình.

Tại sao? Chà, nếu cả hai đều cực kỳ cao, thì chắc chắn răng cưa sẽ không thành vấn đề. Nếu chúng tôi sử dụng một tiêu chuẩn cũ, chẳng hạn như 3DMark03 của UL, và chạy nó trên một hệ thống hiện đại, thì chúng tôi có thể chỉ tập trung vào răng cưa không gian.

Đọc thêm:  Cập nhật giá và tính khả dụng của GPU: Tháng 4 năm 2022

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Hình ảnh trên, từ thử nghiệm Wings of Fury đầu tiên, được chụp ở độ phân giải 1280 x 720 pixel. Mười bốn năm trước, khi Radeon 9800 XT của ATI và GeForce FX 5900 Ultra của Nvidia là những card đồ họa tốt nhất hiện có, màn hình lớn nhất vào thời điểm đó có kích thước khoảng 1600 x 1200 – vì vậy những gì chúng tôi đang sử dụng ở đây sẽ được coi là độ phân giải từ trung bình đến thấp (gần giống với 1080p ngày nay).

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Nhưng nhìn lướt qua cánh máy bay sẽ thấy rõ vấn đề răng cưa và nó đặc biệt đáng chú ý khi chuyển động. Độ tương phản lớn giữa màu sắc của các điểm ảnh tạo nên cánh với nền trời và mây tạo ra ánh sáng lung linh khi máy bay di chuyển trên bầu trời.

Nguyên nhân là do tốc độ lấy mẫu tương đối thấp của raster, vì vậy giải pháp rõ ràng nhất là tăng nó lên; hãy xem lại cảnh tương tự ở 4K (3840 x 2160 pixel).

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Các cạnh của cánh bây giờ mịn hơn rõ rệt, nhưng nếu bạn phóng to một chút, hiện tượng răng cưa vẫn xuất hiện. Chúng tôi có thể tiếp tục tăng độ phân giải hơn nữa, đến mức mà chúng tôi không thể nhìn thấy bất kỳ răng cưa nào về mặt thị giác, nhưng sẽ có một chi phí để làm điều này.

Trừ khi được mã hóa theo cách khác, mọi pixel trong raster cần được xử lý: nhiều họa tiết được áp dụng và nhiều trình đổ bóng được xử lý để tính toán màu cuối cùng. Đây thường là nút cổ chai trong hầu hết các trò chơi, chạy trên phần lớn các hệ thống máy tính hiện có, vì vậy tốc độ khung hình tổng thể sẽ tỷ lệ nghịch với độ phân giải raster.

Đối với một thứ cũ như 3DMark03 trên PC hiện đại, việc chuyển từ 768p sang 4K chỉ làm giảm tốc độ khung hình trung bình từ 1670 xuống 1274 FPS

Đối với một thứ cũ như 3DMark03 trên PC hiện đại, việc chuyển từ 1280 x 768 xuống 3840 x 2160 chỉ làm giảm tốc độ khung hình trung bình từ 1670 xuống 1274 FPS – tức là số lượng pixel cần xử lý tăng 740% dẫn đến giảm 24% trong hiệu suất. Tuy nhiên, đây sẽ không phải là trường hợp trong một cái gì đó gần đây hơn.

Điều này có thể dễ dàng chứng minh bằng cách chạy 3DMark hiện tại của UL trên một số độ phân giải; biểu đồ bên dưới hiển thị tốc độ khung hình trung bình của bài kiểm tra đồ họa đầu tiên trong điểm chuẩn Time Spy.

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Bước nhảy từ 720p lên 4K là độ phân giải tăng 800% nhưng tốc độ khung hình giảm 81%. Mặc dù các trò chơi có thể không hiển thị mô hình chính xác như thế này, nhưng một tựa game AAA hiện đại sẽ không quá khác biệt. Điều nó nói với chúng ta là nếu chúng ta muốn giảm tác động của răng cưa càng nhiều càng tốt, thì chúng ta cần một phương pháp tốt hơn là chỉ tăng độ phân giải raster – tốc độ khung hình càng thấp, răng cưa theo thời gian càng trở nên tồi tệ.

Thật không may, thuật toán đầu tiên được phát triển để chống răng cưa không gian đã thực hiện chính xác điều này, nhưng trước khi chúng ta tiếp tục xem xét vấn đề này, bạn nên chỉ ra một vài lưu ý với những gì chúng ta sẽ trình bày trong bài viết này. Trong những năm qua, các kỹ thuật khử răng cưa đã được phát triển bởi các nhà nghiên cứu hàn lâm độc lập cũng như các nhà phát triển hệ thống tại các công ty như ATi, Intel và Nvidia.

Không có cơ quan trung tâm xác định thuật ngữ, có sự khác biệt đáng kể trong những gì một nhà cung cấp hoặc lập trình viên trò chơi có thể sử dụng so với người khác, mặc dù tất cả các phương pháp của họ đều có cùng tên. Vì vậy, chúng tôi sẽ sử dụng dạng chung nhất của tên thuật toán và cũng giải thích cách hoạt động của kỹ thuật cơ bản – đối với mỗi phiên bản, có nhiều phiên bản được điều chỉnh và mở rộng, mỗi phiên bản có tiêu đề khởi tạo riêng.

Thường được gọi là khử răng cưa toàn cảnh , phương pháp này là phương pháp lâu đời nhất và đơn giản nhất. Nó liên quan đến việc hiển thị cảnh ở độ phân giải cao hơn cài đặt đích, sau đó lấy mẫu và trộn kết quả này xuống số lượng pixel thấp hơn. Ví dụ: màn hình có thể bị giới hạn ở 1920 x 1080 pixel, nhưng trò chơi có thể được tạo để hiển thị ở 3840 x 2160, trước khi được thu nhỏ lại và gửi kết quả đến màn hình.

Đọc thêm:  Khi hiệu suất SSD trở nên tồi tệ

Mẫu lấy mẫu được sử dụng thường là hàng xóm gần nhất (về cơ bản là một hộp xung quanh pixel) và phép toán trộn không gì khác hơn là trung bình cộng của các mẫu.

Chắc chắn, khả năng của GPU hiện đại cho phép sử dụng các thuật toán trộn và lấy mẫu phức tạp hơn. Nhưng chúng ta hãy xem nhanh cách thức hoạt động của nó – hình ảnh bên dưới cho thấy ứng dụng của 4x SSAA cổ điển đang hoạt động. 4x đề cập đến thực tế là 4 mẫu (còn gọi là vòi ) được trộn với nhau, bằng cách tính giá trị trung bình cộng của các giá trị màu, cho đầu ra cuối cùng. Để làm điều này, độ phân giải raster được tăng lên gấp 2 lần dọc theo cả hai trục.

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Lưu ý cách các vị trí mẫu trong ví dụ này là trung tâm chết của pixel? Vì bản thân các pixel có một vùng riêng biệt nên vị trí của các mẫu có thể được đặt ở bất kỳ đâu trong vùng đó. Nhiều năm trước, cả AMD và Nvidia đều đã thử nghiệm đủ loại kiểu mẫu để có được khả năng khử răng cưa tốt nhất có thể.

Phương pháp pha trộn và mẫu được mô tả ở trên được gọi là bộ lọc hộp, mặc dù cải tiến phổ biến liên quan đến việc sử dụng lưới xoay cho các vị trí mẫu (còn gọi là RGSS). Vấn đề với SSAA là tất cả các pixel thừa đó cần phải được xử lý và như chúng ta đã thấy trong các thử nghiệm 3DMark, việc tăng độ phân giải raster có thể dễ dàng khiến tốc độ khung hình giảm xuống.

Phần lớn, tính năng siêu lấy mẫu đã được thay thế (ý định chơi chữ hoàn toàn) bằng các thuật toán hiệu quả hơn, nhưng nó đã tìm thấy ánh sáng mới dưới dạng cài đặt trong trình điều khiển cho cạc đồ họa do AMD và Nvidia sản xuất. Cái trước gọi là Độ phân giải siêu ảo (VSR) của chúng, trong khi cái sau sử dụng tên rất khác là Độ phân giải siêu động (DSR).

Chúng có thể được sử dụng để kích hoạt khử răng cưa trong một số trò chơi cũ không có bất kỳ hệ thống nào được tích hợp sẵn hoặc chỉ cải thiện những gì đã có.

Phương pháp này lần đầu tiên xuất hiện từ các phòng thí nghiệm nghiên cứu của Silicon Graphics vào đầu những năm 90 và về cơ bản nó là SSAA, nhưng chỉ được áp dụng ở những nơi thực sự cần thiết. Được rồi, vì vậy rõ ràng là còn nhiều điều nữa về điều đó, nhưng nó sẽ giúp bạn tìm ra cách hoạt động cơ bản của thuật toán.

Ưu điểm chính của Supersampling cũng là một vấn đề nhỏ, vì mọi thứ đang bị khử răng cưa: các cạnh của nguyên thủy, bề mặt kết cấu phẳng, đa giác trong suốt, rất nhiều . Cho rằng bộ lọc kết cấu đã quan tâm đến những gì đang diễn ra bên trong các hình tam giác kết xuất, thứ chúng ta cần là một hệ thống chỉ được áp dụng cho các cạnh, vì chúng tạo ra vấn đề răng cưa rõ ràng nhất.

Nhưng làm thế nào để làm điều đó? Chà, thật tình cờ là thông tin cần thiết để làm điều này đã có sẵn. Khi thế giới 3D của đỉnh được chuyển đổi thành mặt phẳng 2D của raster, các pixel tạo thành tất cả các nguyên mẫu khác nhau trong cảnh không chỉ chứa thông tin về màu sắc và kết cấu mà còn cả độ sâu.

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Thông tin này có thể được lưu trữ trong bộ đệm z (đôi khi được gọi là bộ đệm độ sâu ) và sau đó được sử dụng để xác định khả năng hiển thị của cạnh. Trong ví dụ trên, một nguyên thủy đơn giản nằm đối diện với máy ảnh và do đó, các giá trị độ sâu tại các trung tâm pixel tương ứng là một giá trị đơn giản: màu trắng là nền, màu đen là nguyên thủy.

Giờ đây, vì GPU có khả năng lấy các mẫu bổ sung trong một pixel, nên chúng tôi có thể tạo phiên bản có độ phân giải cao hơn của lưới ô vuông đen trắng. Một lần nữa, chúng tôi chỉ cần ghi lại độ sâu của nguyên thủy tại các vị trí mẫu và kết quả cuối cùng sẽ giống như thế này.

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Xem làm thế nào nhiều mẫu (à, đó là cách nó có tên) đã cho chúng ta một bản đồ chuyên sâu về nguyên thủy đại diện hơn cho những gì thực sự ở đó? Bây giờ đến phần thông minh. Giữ bản đồ độ sâu chi tiết này sang một bên, chúng tôi quay lại khung có độ phân giải ban đầu và chạy tất cả các trình đổ bóng pixel khác nhau để có được màu cuối cùng.

Đọc thêm:  Xem lại hiệu suất theo dõi Battlefield V Ray

Sau đó, chúng tôi quay lại bộ đệm độ sâu chi tiết và đối với mọi pixel dạng nguyên thủy (tức là màu đen), chúng tôi phân bổ màu đầu ra của trình đổ bóng cho nó. Điều này rõ ràng cần phải được lưu trữ ở đâu đó, vì vậy đó là một bộ đệm có độ phân giải cao khác cần được tạo ra – hoặc là hoặc chúng tôi có một bộ đệm riêng biệt nhưng tương đối nhỏ cho mỗi điểm mẫu trong pixel.

Sau đó, giống như trong SSAA, chúng tôi lấy mẫu và trộn bộ đệm chi tiết trở lại độ phân giải yêu cầu và thì đấy ! Bạn đã có một khung khử răng cưa. Về mặt hiệu suất, chúng tôi chỉ chạy trình đổ bóng pixel trên một số điểm tương đối thấp, nhưng chúng tôi cũng phải tạo và lưu trữ một vài bộ đệm có độ phân giải cao để thực hiện việc này.

Vì vậy, khử răng cưa đa mẫu , như tên gọi của nó, cần nhiều VRAM và băng thông bộ nhớ (cộng với khả năng đọc/ghi vào bộ đệm z một cách nhanh chóng), nhưng nó không yêu cầu nhiều năng lượng đổ bóng thô. Hãy sử dụng một ví dụ viết mã cũ của AMD để xem nó trông như thế nào và so sánh với SSAA.

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Mã chạy một cảnh đơn giản, với kết cấu và ánh sáng cơ bản, nhưng có nhiều hình học để răng cưa trên các cạnh nổi bật hơn rất nhiều. Ở góc trên cùng bên trái, có một số đoạn thông tin thú vị – trung bình mỗi khung hình mất 0,18 mili giây để hiển thị và chỉ 0,02 mili giây để trộn khung hình cho đầu ra cuối cùng. Bộ đệm màu (bộ đệm mà chúng tôi đang xem xét) có kích thước 7,4 MB và bộ đệm độ sâu cũng vậy (chữ b nhỏ là lỗi đánh máy).

Chúng tôi cũng có thể phóng to các khu vực cụ thể của khung để xem răng cưa ở tất cả các chi tiết đẫm máu của nó. Bây giờ đừng quên rằng chúng ta có thể kết xuất tất cả những thứ này ở độ phân giải cao hơn, nhưng điều đó sẽ chỉ làm tăng thời gian kết xuất. Nhưng nếu chúng ta áp dụng 4x SSAA cho hiện trường, đây chính xác là điều sẽ xảy ra.

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Trong hình trên, lưu ý rằng thời gian kết xuất đã tăng lên 0,4 ms (tăng 122%) và thời gian hòa trộn, được liệt kê là ‘Giải quyết’ đã tăng gấp đôi thời lượng. Ngoài ra, kích thước của bộ đệm màu và độ sâu đã tăng lên gấp 4 lần. Đây là chi phí sử dụng SSAA và mặc dù không có điều nào trong số này khó thực hiện đối với GPU hiện đại trong một ví dụ như thế này, nhưng nó sẽ rất tệ trong một trong những tựa game 3D mới nhất.

Nhưng hãy xem phần phóng to. Chú ý các đường nét mượt mà hơn như thế nào? Vâng, vẫn còn nhiều răng cưa nhưng nó tốt hơn rõ rệt. Giá như nó không quá đắt để làm! Vâng, đó là nơi chúng tôi chuyển sang sử dụng MSAA thay thế – một vài cú nhấp chuột và chúng tôi bắt đầu.

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Thời gian kết xuất cảnh quay trở lại gần như ban đầu mà không áp dụng khử răng cưa, điều này tốt, mặc dù thời gian giải quyết đã tăng thêm. Tổng dung lượng bộ nhớ cũng bằng một nửa giữa không có AA và 4xSSAA, vì vậy có vẻ như MSAA chắc chắn là con đường để đi.

Ngay cả việc giảm răng cưa trên các cạnh nguyên thủy cũng có vẻ tốt hơn, mặc dù điều này liên quan nhiều hơn đến mẫu lấy mẫu được sử dụng, hơn là bản chất của chính MSAA. Trên thực tế, nếu nhìn vào kết cấu của bức tường trong khu vực được phóng to, một nhược điểm của AA nhiều mẫu trở nên rõ ràng.

Khi SSAA cải thiện mọi thứ, MSAA chỉ ảnh hưởng đến các cạnh của đa giác và mặc dù đây không phải là vấn đề lớn trong hình ảnh tĩnh, chuyển động có xu hướng tạo ra sự khác biệt giữa các đường được làm mịn và kết cấu mờ hơn một chút. Một vấn đề khác là thuật toán không hoạt động tốt với kết xuất bị trì hoãn và mặc dù có nhiều cách giải quyết vấn đề này, nhưng không có cách nào là ‘miễn phí’, về mặt hiệu suất.

Đọc thêm:  Windows 7 Jump Lists Fix và thủ thuật

Vậy bạn có thể làm gì nếu các phương pháp khử răng cưa siêu tốc và đa mẫu không phải là lựa chọn tuyệt vời?

Vào năm 2009, Nvidia đã trình bày một phương pháp hoàn toàn khác để thu gọn các cạnh lởm chởm của các hình dạng trong cảnh 3D. Trong trường hợp SSAA dựa vào sức mạnh tuyệt đối và MSAA dựa trên các tính năng phần cứng và một vài thủ thuật mã hóa, thì FXAA được thiết kế để thực hiện hoàn toàn thông qua trình đổ bóng. Nó đã được tinh chỉnh một vài lần kể từ khi phát hành và được sử dụng nhiều trong các trò chơi ngày nay.

Mã này được chạy dưới dạng quá trình xử lý hậu kỳ (tức là sau khi phần lớn kết xuất khác đã được hoàn thành nhưng trước khi các phần tử như HUD được áp dụng), thường ở dạng một pixel shader. Lần lặp ban đầu của thuật toán hoạt động như sau: đầu tiên lấy mẫu bộ đệm chứa hình ảnh để hiển thị và chuyển đổi giá trị sRGB thành ước tính tuyến tính về độ chói của pixel đó (đây là phép đo lượng ánh sáng đi qua một khu vực nhất định trong một hướng xác định).

Phần này của shader chỉ vỏn vẹn vài dòng và thậm chí có thể chỉ sử dụng kênh màu xanh lá cây để ước tính mức độ ánh sáng. Tại sao nó cần điều này? Chà, bước tiếp theo trong trình đổ bóng liên quan đến việc kiểm tra độ tương phản tương đối của các pixel xung quanh với pixel được lấy mẫu – nếu có sự khác biệt lớn, thì vị trí đó rất có thể nằm trên cạnh.

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Đối với những pixel vượt qua bài kiểm tra này, chúng sẽ trải qua một bước kiểm tra thêm để xác định hướng của cạnh. Sau khi tìm ra điều này, cặp pixel (ở góc 90° so với cạnh) có sự khác biệt cao nhất về độ sáng được sử dụng để quét dọc theo cạnh, để tìm kiếm các điểm cuối của nó. Điều này được biểu thị khi có sự thay đổi đủ lớn về độ chói trung bình của cặp pixel này.

Khi tất cả các cạnh đã được xác định đầy đủ, tất cả các vị trí của pixel dọc theo các cạnh đó sẽ được dịch chuyển: lên hoặc xuống đối với các cạnh nằm ngang và từ bên này sang bên kia đối với các cạnh nằm dọc. Chúng chỉ di chuyển một lượng rất nhỏ, nhỏ đến mức vị trí mới nằm trong khu vực của pixel gốc. Với mọi thứ được điều chỉnh một cách tinh tế, bộ đệm khung ban đầu được lấy mẫu bằng cách sử dụng các vị trí mới – các pixel bên trong các nguyên mẫu sẽ vẫn ở vị trí trước đây, nhưng những điểm xác định cạnh sẽ bị thay đổi, tất cả đều giúp giảm tác động của răng cưa.

FXAA có một số lợi thế nghiêm trọng so với SSAA và MSAA. Trước hết, đó là một đoạn mã đơn giản mà gần như bất kỳ GPU nào cũng có thể làm được; ngay cả các mô hình ngân sách cấp thấp cũng có thể thực hiện quy trình chỉ trong vài mili giây.

Thứ hai, nó khử răng cưa cho tất cả các cạnh, không chỉ các chu vi của hình. Ví dụ: kết cấu có độ trong suốt (thường được sử dụng cho khói, mảnh vụn và tán lá) sẽ được làm mịn, đây là điều mà MSAA sẽ không làm được.

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Những nhược điểm? Nếu khung hình chứa đầy các vùng có độ tương phản cao, chẳng hạn như các điểm ảnh sáng trên nền tối, thì chúng sẽ bị pha trộn cho dù chúng có phải như vậy hay không.

Độ chính xác của phương pháp này không tốt bằng phương pháp trong SSAA hay MSAA, do không nắm bắt được các chi tiết pixel phụ – về cơ bản, phương pháp này chỉ là một bộ lọc ưa thích và có thể dẫn đến một số kết cấu trông có vẻ mềm. Nhưng khi nó quá rẻ để sử dụng và tạo ra kết quả hiệu quả hợp lý, bạn có thể thấy tại sao FXAA vẫn được sử dụng sau 12 năm – mặc dù đã được sửa đổi kỹ lưỡng.

Có các thuật toán tìm cạnh toàn màn hình khác, tương tự như của Nvidia. Khử răng cưa hình thái (MLAA), được phát triển bởi Intel, là nguồn cảm hứng cho FXAA; nó đã được cải tiến thêm bởi nhà phát triển trò chơi Crytek và Đại học Zaragoza ở Tây Ban Nha, và được đặt tên là MLAA pixel phụ nâng cao (viết tắt là SMAA).

Đọc thêm:  Thử nghiệm đồ họa lố bịch: Dual GTX Titan SLI cho chơi game 4K và ba màn hình

Khía cạnh tốt nhất của tất cả những thứ này là không giống như SSAA và MSAA, những thứ này có thể được các lập trình viên cập nhật và sửa đổi liên tục, điều chỉnh chúng để phù hợp nhất với các ứng dụng hoặc trò chơi mà họ đang tạo.

Cho đến nay, chúng tôi mới chỉ xem xét các phương pháp để chống lại tác động trực quan của răng cưa không gian. Để chống lại hiện tượng răng cưa theo thời gian, gây ra trong trò chơi do thực tế là trò chơi 3D tạo ra các mẫu chuyển động liên tục rời rạc, thuật toán sau đây được sử dụng phổ biến nhất.

Chúng tôi bắt đầu bằng cách hiển thị một khung và hiển thị nó như bình thường; tuy nhiên, chúng tôi cũng lưu trữ các giá trị màu của pixel trong một đoạn bộ nhớ được gọi là bộ đệm lịch sử . Sau đó, trình kết xuất sẽ chuyển sang khung tiếp theo trong trình tự và xử lý khung đó, nhưng trước khi hiển thị khung này, bộ đệm lịch sử được lấy mẫu và kết quả được trộn với khung hiện tại. Bộ đệm lịch sử sau đó được cập nhật với kết quả này, được sao chép để tạo ra hình ảnh cuối cùng và bộ đệm đã hoàn thành của chúng tôi sau đó được gắn cờ sẵn sàng để hiển thị trên màn hình.

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Sau đó, tất cả các khung tiếp theo tuân theo mẫu kết xuất này, lấy mẫu bộ đệm lịch sử, pha trộn, cập nhật và hiển thị. Việc tích lũy các khung hình liên tiếp dẫn đến việc làm mịn toàn bộ cảnh khi nó chuyển từ khung hình này sang khung hình khác, và xin chào! Chúng tôi đã có một hình ảnh khử răng cưa để xem xét.

Tuy nhiên, nếu đó là tất cả những gì nó đã làm, thì thuật toán sẽ khá vô dụng – ví dụ: nếu không có thay đổi nào giữa các khung hình, thì quá trình hòa trộn sẽ không khắc phục được bất cứ điều gì. Vì vậy, để giải quyết vấn đề này, ban đầu, mỗi khung hình được hiển thị với máy ảnh được bù ngẫu nhiên, bằng một lề nhỏ (được gọi là hiện tượng rung pixel phụ ). Sau đó, các vị trí bị dịch chuyển nhẹ của các vị trí pixel được sử dụng để lấy mẫu bộ đệm lịch sử và sau đó, jitter sẽ được loại bỏ để hoàn tất quá trình xử lý khung hình.

Do đó, khi trộn các giá trị lịch sử với các giá trị hiện tại, bạn hầu như luôn nhận được các vị trí pixel phụ được lấy mẫu không hoàn toàn ở cùng một vị trí, dẫn đến mức độ khử răng cưa.

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Tuy nhiên, AA tạm thời cũng có thể tạo ra hiện tượng mờ quá mức, cũng như một vấn đề gọi là bóng mờ , trong đó các cạnh của vật thể chuyển động dường như bị nhòe, thay vì được làm mềm.

Một phương pháp phổ biến được sử dụng để giải quyết vấn đề này bao gồm sử dụng trình đổ bóng điện toán để tính toán vectơ chuyển động của các đối tượng, lưu trữ thông tin trong bộ nhớ (bộ đệm vận tốc) và sau đó so sánh vận tốc tương đối của pixel hiện tại với các pixel được lấy mẫu – nếu chúng đáng chú ý khác, thì mẫu lịch sử bị từ chối.

Ngoài việc sử dụng các giá trị vận tốc, hầu hết các triển khai TAA đều thực hiện quy trình xác minh thêm trên các mẫu lịch sử – điều này ngăn các giá trị từ các khung trước đó được sử dụng không còn phù hợp trong khung hiện tại (ví dụ: chúng có thể bị ẩn sau một đối tượng đã di chuyển ). Phương pháp này thường sử dụng hộp giới hạn căn chỉnh theo trục, trong đó các trục vạch ra sắc độ của bộ đệm lịch sử, loại bỏ bất kỳ màu nào có màu nằm ngoài các giới hạn này.

Sự pha trộn cuối cùng của lịch sử và pixel hiện tại cũng có thể được tính trọng số, sử dụng các giá trị so sánh về màu sắc, độ chói hoặc vận tốc; cuối cùng, trong bản sao cuối cùng của bộ đệm lịch sử được cập nhật để hiển thị, có thể sử dụng nhiều bộ lọc làm mờ khác nhau để giảm bóng mờ hơn nữa.

Đọc thêm:  Phần cứng PC tốt nhất và tệ nhất năm 2020

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Đối với các nhà phát triển, mã hóa tất cả những thứ này liên quan nhiều hơn đáng kể so với việc thêm tùy chọn SSAA hoặc MSAA vào trò chơi. Tuy nhiên, các GPU hiện đại có thể xử lý khá nhanh tất cả các trình đổ bóng cần thiết và trong đó các thuật toán siêu lấy mẫu và lấy nhiều mẫu lấy nhiều mẫu cho mỗi khung hình (đòi hỏi nhiều công việc ROP và băng thông bộ nhớ), TAA phân bổ hiệu quả các mẫu này trên nhiều khung hình. Điều này có nghĩa là đối với các trò chơi không bị giới hạn nhiều bởi số lượng đổ bóng đang diễn ra, TAA có thể được kích hoạt với mức giảm hiệu suất tương đối nhỏ.

TAA cũng hoạt động tốt với kết xuất bị trì hoãn và có thể được sử dụng cùng với FXAA và SMAA, dẫn đến hình ảnh thậm chí còn tốt hơn. Thật không may, nó hơi dễ bị mờ quá mức và tạo ra các tạo tác lung linh dọc theo các cạnh có độ tương phản cao. Tuy nhiên, do khả năng tính toán của GPU chưa có dấu hiệu đạt đến mức ổn định, các kỹ thuật này có thể được tinh chỉnh thêm bằng cách sử dụng các phương pháp phức tạp hơn để xác định cách lấy mẫu và xác minh bộ đệm lịch sử.

Bốn phương pháp được mô tả ở trên được sử dụng nhiều trong các trò chơi dành cho PC và bảng điều khiển, đặc biệt là các trò chơi như FXAA và TAA. Nhưng có rất nhiều hơn nữa ngoài kia.

Ví dụ: khi Nvidia ra mắt dòng card đồ họa GeForce 9, họ cũng đã công bố một phiên bản sửa đổi của MSAA, được gọi là Khử răng cưa lấy mẫu đa khung (MFAA). Về cơ bản, GPU sửa đổi mẫu lấy mẫu với từng khung hình liên tiếp, sao cho trên mỗi khung hình , số lượng mẫu được lấy và trộn thấp hơn.

Tính trung bình trên nhiều khung hình và hiệu ứng giống như những gì bạn nhận được với MSAA bình thường, nhưng với chi phí hiệu suất thấp hơn. Thật không may, thuật toán này chỉ có thể được triển khai thông qua các trò chơi đã được phát triển theo hướng dẫn của Nvidia và không được triển khai trên mọi tựa game. Tuy nhiên, nó vẫn tồn tại và bạn có thể truy cập nó bằng cách bật một tùy chọn trong bảng điều khiển trình điều khiển GeForce.

Gần đây, gã khổng lồ GPU đã đầu tư nguồn lực đáng kể để phát triển thuật toán AA sử dụng AI – được gọi là Deep Learning Super Sampling (DLSS), lần đầu tiên xuất hiện vào năm 2018 với chip Turing của họ.

Phiên bản gốc của DLSS yêu cầu Nvidia đào tạo mạng nơ-ron sâu (DNN) trên các trò chơi cụ thể, so sánh các khung hình có độ phân giải thấp với các khung hình có độ phân giải rất cao đã bật SSAA. Phiên bản hiện tại sử dụng một mạng tổng quát hơn và lấy thông tin bổ sung, ở dạng vectơ chuyển động, để xác định khung hình sẽ trông như thế nào, nếu nó được hiển thị ở độ phân giải cao hơn.

svg+xml,%3Csvg%20xmlns= Cách hoạt động của kết xuất trò chơi 3D: Khử răng cưa

Mặc dù lợi ích chính của DLSS là hiệu suất (ví dụ: hiển thị ở 1080p nhưng sử dụng mạng thần kinh để nâng cấp lên 1440p), về cơ bản, hệ thống áp dụng AA vì đó là hình ảnh được nhắm mục tiêu.

AMD hiện đang làm việc trên phiên bản này của riêng họ và sau khi được phát hành, chúng ta có thể thấy các thuật toán AA học sâu cuối cùng sẽ thay thế các thuật toán truyền thống – nhưng chưa phải lúc này. Chẳng hạn, các hệ thống này không dễ triển khai hơn TAA và kết quả trực quan không phải lúc nào cũng hoàn hảo.

Nghiên cứu về các kỹ thuật khử răng cưa cải tiến vẫn tiếp tục, nhưng chúng ta đã đi được một chặng đường dài kể từ thời của Riva TNT và Half-Life, nơi chúng ta phải chịu đựng những đa giác lởm chởm ở khắp mọi nơi, bởi vì chúng ta không có hiệu suất để làm bất cứ điều gì về nó!

Vì vậy, lần tới khi bạn định cấu hình các tùy chọn đồ họa của một trò chơi mới và xem các phương pháp AA khác nhau có sẵn cho bạn, hãy gửi lời cảm ơn thầm lặng đến các kỹ sư và lập trình viên, những người đã tìm ra tất cả những điều này và tận hưởng.