Làm thế nào để texelFetch và kết cấu của OpenGL khác nhau?


18

Tôi hiểu sự khác biệt chính giữa texelFetchtexture, nhưng có một số câu hỏi về các chi tiết:

  • texelFetchliên quan đến một hình phạt hiệu suất? Chẳng hạn như không sử dụng bộ đệm hay như vậy?
  • Được texelFetchtexturehoán đổi cho nhau khi sử dụng GL_NEAREST?

1
Bạn có thể viết một trường hợp thử nghiệm và xem ...
ThorinII

1
Bạn đã quên đánh dấu một câu trả lời là được chấp nhận, hay đây vẫn là một vấn đề mở?
Anko

Câu trả lời:


23

texelFetchlà khá khác nhau từ texture.

texturelà chức năng truy cập kết cấu thông thường của bạn để xử lý các [0,1]tọa độ lọc và chuẩn hóa ( ). texelFetchtruy cập trực tiếp một texel trong kết cấu (không lọc) bằng cách sử dụng tọa độ không chuẩn hóa (ví dụ: (64,64)trong texel giữa ish trong kết cấu 128x128 so với (.5,.5)tọa độ chuẩn hóa).


4
+1 Tôi muốn thêm rằng texelFetch có nghĩa là để truy cập dữ liệu khi kết cấu không đặc biệt được hiển thị dưới dạng hình ảnh, nhưng loại dữ liệu khác, không giống như kết cấu truy cập vào texels khi chúng được sử dụng làm hình ảnh, đó là lý do tại sao nó sử dụng tính năng lọc, v.v. -
concept3d

Có sự khác biệt trong hiệu suất?
Lenar Hoyt

1
@mcb: có thể, nhưng tôi không mong đợi nó sẽ rất lớn và nó có thể sẽ thay đổi rất nhiều bởi nhà cung cấp phần cứng. Hiệu suất là số liệu hoàn toàn sai khi sử dụng khi quyết định hàm nào trong số các hàm này: sử dụng hàm đúng cho tình huống của bạn (bạn cần lọc phần cứng và do đó phải sử dụng texturehoặc bạn cần phần cứng để không lọc và do đó phải sử dụng texelFetch).
Sean Middleditch

3
@SeanMiddleditch Làm thế nào là hiệu suất số liệu sai trong trường hợp này? Nếu texelFetchnhanh hơn và lọc hàng xóm gần nhất đủ, bạn không thể thay đổi ngữ cảnh thành lọc NN vì bất kỳ lý do gì, sẽ hợp lý hơn nếu thích nó hơn texture.
Lenar Hoyt

@mcb: texelFetchtexturelàm việc khác nhau theo những cách cơ bản. Xem thêm các đầu vào: tọa độ kết cấu so với tọa độ chuẩn hóa. Họ phục vụ các mục đích khác nhau. Cái này không chỉ là tối ưu hóa cái kia.
Sean Middleditch

6

Vì không có câu trả lời được chấp nhận nên tôi thêm một số thông tin, tôi chỉ muốn thêm những điều chưa được Sean nói vào câu trả lời của anh ấy.

TexelFetch coi kết cấu dưới dạng Hình ảnh, do đó bạn có thể truy cập chính xác nội dung của pixel. Bạn thường làm điều đó khi bạn cần chính xác nội dung đó, trong một vài dịp nhưng rất hữu ích:

  • Một số bộ lọc xử lý bài đăng (Guassian Blur khai thác nội suy mẫu kết cấu và do đó nó không thể sử dụng TexelFetch)
  • Khi các đỉnh cần đọc dữ liệu từ kết cấu và đó là thao tác phụ thuộc vào 2 tọa độ

Tex2D coi kết cấu như một kết cấu. Bạn không muốn nội dung chính xác của một pixel, nhưng bạn muốn kết quả thực tế nhất. Đọc kết cấu tiêu chuẩn là một hoạt động rất phức tạp và nó bao gồm việc đọc dữ liệu được nội suy từ một hoặc nhiều cấp độ mipmap và sau đó nó nội suy lại. Tất cả những hoạt động đắt tiền là để tránh các tạo tác trực quan.

GL_NEAREST sẽ không hoạt động giống nhau vì trên các đa giác xa nhất bạn đang đọc dữ liệu ở cấp độ mipmap nhỏ hơn, wich không giống với dữ liệu chính xác mà bạn sẽ đọc từ một lần tìm nạp texel.

Có một trường hợp Tex2D (gần như) hoạt động giống như TexelFetch:

  1. bộ lọc là GL_NEAREST
  2. bạn đang sử dụng một kim tự tháp mipmap chưa hoàn chỉnh với 1 cấp độ
  3. UV của bạn không phải là thành phần đỉnh được chuẩn hóa (nhưng bạn phải chuẩn hóa chúng trong shader)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.