Câu hỏi của tôi đặc biệt liên quan đến Metal, vì tôi không biết câu trả lời có thay đổi cho API khác không.
Những gì tôi tin rằng tôi hiểu cho đến nay là:
Một kết cấu mipmaps đã tính toán trước "mức độ chi tiết", trong đó mức độ chi tiết thấp hơn được tạo ra bằng cách lấy mẫu kết cấu ban đầu theo một cách có ý nghĩa.
Các mức Mipmap được đề cập ở mức độ chi tiết giảm dần, trong đó mức độ
0
là kết cấu ban đầu và các mức cao hơn là mức giảm sức mạnh của hai mức giảm.Hầu hết các GPU đều thực hiện lọc trilinear, chọn hai mức mipmap lân cận cho từng mẫu, lấy mẫu từ mỗi cấp bằng cách sử dụng bộ lọc song tuyến, sau đó trộn tuyến tính các mẫu đó.
Điều tôi không hiểu lắm là làm thế nào các mức mipmap này được chọn. Trong tài liệu về thư viện tiêu chuẩn Metal, tôi thấy rằng các mẫu có thể được lấy, có hoặc không chỉ định một thể hiện của một lod_options
loại. Tôi sẽ giả định rằng đối số này thay đổi cách các mức mipmap được chọn và rõ ràng có ba loại lod_options
cho kết cấu 2D:
bias(float value)
level(float lod)
gradient2d(float2 dPdx, float2 dPdy)
Thật không may, tài liệu không bận tâm giải thích những gì trong số các tùy chọn này làm. Tôi có thể đoán rằng bias()
sự thiên vị một số mức độ chi tiết được chọn tự động, nhưng sau đó sự thiên vị value
có nghĩa là gì? Nó hoạt động trên quy mô nào? Tương tự như vậy, như thế nào là lod
của level()
dịch sang mức mipmap rời rạc? Và, hoạt động theo giả định gradient2d()
sử dụng gradient của tọa độ kết cấu, làm thế nào để sử dụng gradient đó để chọn mức mipmap?
Quan trọng hơn, nếu tôi bỏ qua lod_options
, các mức mipmap được chọn như thế nào? Điều này khác nhau tùy thuộc vào loại chức năng được thực hiện?
Và, nếu hoạt động không có tùy chọn mặc định của sample()
chức năng là thực hiện một cái gì đó như gradient2D()
(ít nhất là trong một shader mảnh), thì nó có sử dụng các dẫn xuất không gian màn hình đơn giản hay nó hoạt động trực tiếp với rasterizer và tọa độ kết cấu nội suy để tính toán một độ dốc chính xác?
Và cuối cùng, làm thế nào nhất quán bất kỳ hành vi này từ thiết bị đến thiết bị? Một bài viết cũ (cũ như trong DirectX 9) Tôi đã đọc đề cập đến lựa chọn mipmap dành riêng cho thiết bị phức tạp, nhưng tôi không biết liệu lựa chọn mipmap có được xác định rõ hơn trên các kiến trúc mới hơn không.