Để hiểu bản chất của lọc bất đẳng hướng, bạn cần có một sự hiểu biết vững chắc về ý nghĩa của ánh xạ kết cấu.
Thuật ngữ "ánh xạ kết cấu" có nghĩa là gán các vị trí trên một đối tượng cho các vị trí trong một kết cấu. Điều này cho phép rasterizer / shader, đối với từng vị trí trên đối tượng, lấy dữ liệu tương ứng từ kết cấu. Phương pháp truyền thống để thực hiện điều này là gán cho mỗi đỉnh trên một đối tượng tọa độ kết cấu, trực tiếp ánh xạ vị trí đó đến một vị trí trong kết cấu. Trình rasterizer sẽ nội suy tọa độ kết cấu này trên các mặt của các hình tam giác khác nhau để tạo ra tọa độ kết cấu được sử dụng để lấy màu từ kết cấu.
Bây giờ, hãy nghĩ về quá trình rasterization. Làm thế nào mà làm việc? Nó lấy một hình tam giác và chia nó thành các khối có kích thước pixel mà chúng ta sẽ gọi là "các mảnh". Bây giờ, các khối có kích thước pixel này có kích thước pixel so với màn hình.
Nhưng những mảnh này không có kích thước pixel so với kết cấu. Hãy tưởng tượng nếu rasterizer của chúng tôi tạo ra một tọa độ kết cấu cho mỗi góc của mảnh. Bây giờ hãy tưởng tượng vẽ 4 góc đó, không phải trong không gian màn hình, mà trong không gian kết cấu . Hình dạng này sẽ là gì?
Vâng, điều đó phụ thuộc vào tọa độ kết cấu. Đó là, nó phụ thuộc vào cách kết cấu được ánh xạ tới đa giác. Đối với bất kỳ mảnh cụ thể nào, nó có thể là một hình vuông thẳng hàng trục. Nó có thể là một hình vuông không thẳng hàng trục. Nó có thể là một hình chữ nhật. Nó có thể là một hình thang. Nó có thể là khá nhiều bất kỳ con số bốn mặt (hoặc ít nhất, những cái lồi).
Nếu bạn đang thực hiện truy cập kết cấu một cách chính xác, cách để có được màu kết cấu cho một đoạn sẽ là tìm ra hình chữ nhật này là gì. Sau đó tìm nạp mọi texel từ kết cấu trong hình chữ nhật đó (sử dụng vùng phủ sóng để chia tỷ lệ màu nằm trên đường viền). Sau đó, trung bình tất cả chúng cùng nhau. Đó sẽ là ánh xạ kết cấu hoàn hảo.
Nó cũng sẽ cực kỳ chậm .
Thay vào đó, chúng ta cố gắng ước chừng câu trả lời thực sự. Chúng tôi dựa trên mọi thứ trên một tọa độ kết cấu, thay vì 4 bao phủ toàn bộ khu vực của mảnh vỡ trong không gian texel.
Lọc dựa trên Mipmap sử dụng hình ảnh có độ phân giải thấp hơn. Những hình ảnh này về cơ bản là một lối tắt cho phương pháp hoàn hảo, bằng cách tính toán trước các khối màu lớn sẽ trông như thế nào khi được pha trộn với nhau. Vì vậy, khi nó chọn một mipmap thấp hơn, nó đang sử dụng các giá trị được tính toán trước trong đó mỗi texel đại diện cho một khu vực của kết cấu.
Lọc bất đẳng hướng hoạt động bằng cách xấp xỉ phương pháp hoàn hảo (có thể, và nên, được kết hợp với mipmapping) thông qua việc lấy đến một số lượng mẫu bổ sung cố định. Nhưng làm thế nào để tìm ra khu vực trong không gian texel để tìm nạp, vì nó vẫn chỉ được cung cấp một tọa độ kết cấu?
Về cơ bản, nó gian lận. Do các shader mảnh được thực thi trong các khối lân cận 2x2, nên có thể tính đạo hàm của bất kỳ giá trị nào trong shader mảnh trong không gian màn hình X và Y. Sau đó, nó sử dụng các dẫn xuất này, kết hợp với tọa độ kết cấu thực tế, để tính xấp xỉ những gì dấu chân kết cấu của mảnh thực sự sẽ là gì. Và sau đó nó thực hiện một số mẫu trong khu vực này.
Đây là một sơ đồ để giúp giải thích nó:
Các hình vuông đen trắng đại diện cho kết cấu của chúng tôi. Nó chỉ là một bàn cờ gồm 2 x 2 màu trắng và đen.
Dấu chấm màu cam là tọa độ kết cấu cho đoạn trong câu hỏi. Đường viền màu đỏ là dấu chân của mảnh, được tập trung vào tọa độ kết cấu.
Các hộp màu xanh lá cây đại diện cho các texels mà việc triển khai lọc bất đẳng hướng có thể truy cập (chi tiết về thuật toán lọc bất đẳng hướng là cụ thể nền tảng, vì vậy tôi chỉ có thể giải thích ý tưởng chung).
Sơ đồ cụ thể này cho thấy việc triển khai có thể truy cập 4 texels. Ồ vâng, các hộp màu xanh lá cây bao gồm 7 trong số chúng, nhưng hộp màu xanh lá cây ở trung tâm có thể tìm nạp từ một mipmap nhỏ hơn, do đó lấy tương đương 4 texels trong một lần tìm nạp. Việc triển khai tất nhiên sẽ cân trung bình cho 4 lần tìm nạp đó so với các texel đơn.
Nếu giới hạn lọc bất đẳng hướng là 2 thay vì 4 (hoặc cao hơn), thì việc triển khai sẽ chọn 2 trong số các mẫu đó để thể hiện dấu chân của mảnh.