texelFetch และพื้นผิวของ OpenGL แตกต่างกันอย่างไร


18

ฉันเข้าใจความแตกต่างที่สำคัญระหว่างtexelFetchและtextureแต่มีคำถามบางอย่างเกี่ยวกับรายละเอียด:

  • ไม่texelFetchเกี่ยวข้องกับการลงโทษประสิทธิภาพหรือไม่? เช่นไม่ได้ใช้แคชหรือเช่น?
  • มีtexelFetchและtextureใช้แทนกันได้เมื่อใช้GL_NEAREST?

1
คุณสามารถเขียนกรณีทดสอบและดู ...
ThorinII

1
คุณลืมที่จะทำเครื่องหมายคำตอบว่ายอมรับหรือไม่หรือนี่ยังคงเป็นปัญหาที่เปิดอยู่หรือไม่?
Anko

คำตอบ:


23

texelFetchtextureค่อนข้างแตกต่างจาก

textureเป็นฟังก์ชั่นการเข้าถึงพื้นผิวตามปกติของคุณซึ่งจัดการการกรองและ[0,1]พิกัดพื้นผิว( ) มาตรฐาน texelFetchเข้าถึงเท็กเซลในพื้นผิวโดยตรง (ไม่มีตัวกรอง) โดยใช้พิกัดที่ไม่ปกติ (เช่น(64,64)ในเทเลเท็กซ์กลาง -ish ในพื้นผิว 128x128 เทียบกับ(.5,.5)พิกัดปกติ)


4
+1 ฉันต้องการเพิ่มว่า texelFetch มีไว้สำหรับการเข้าถึงข้อมูลเมื่อพื้นผิวไม่ได้มีความตั้งใจที่จะแสดงเป็นรูปภาพ แต่เป็นข้อมูลประเภทอื่นซึ่งแตกต่างจากพื้นผิวที่เข้าถึงเท็กซัสเมื่อใช้เป็นรูปภาพ นั่นเป็นสาเหตุที่มันใช้การกรองเป็นต้น -
concept3d

มีความแตกต่างในประสิทธิภาพหรือไม่
Lenar Hoyt

1
@mcb: อาจ แต่ฉันไม่คาดหวังว่ามันจะมีขนาดใหญ่มากและมันอาจจะแตกต่างกันมากโดยผู้ผลิตฮาร์ดแวร์ ประสิทธิภาพเป็นตัวชี้วัดที่ไม่ถูกต้องอย่างยิ่งที่จะใช้เมื่อตัดสินใจเลือกฟังก์ชันเหล่านี้: ใช้สิ่งที่ถูกต้องสำหรับสถานการณ์ของคุณ (คุณต้องใช้การกรองของฮาร์ดแวร์และต้องใช้textureหรือคุณต้องการฮาร์ดแวร์ที่จะไม่ทำการกรองและต้องใช้texelFetch)
Sean Middleditch

3
@SeanMiddleditch ประสิทธิภาพการทำงานของเมตริกในกรณีนี้เป็นอย่างไร ถ้าtexelFetchเป็นได้เร็วขึ้นและเพื่อนบ้านที่ใกล้ที่สุดกรองพอเพียง, คุณไม่สามารถเปลี่ยนบริบท NN textureกรองด้วยเหตุผลใดก็จะมีความเหมาะสมที่จะชอบมันมากกว่า
Lenar Hoyt

@mcb: texelFetchและtextureทำงานแตกต่างกันในวิธีพื้นฐาน ดูเพิ่มเติมได้ที่: พิกัดพื้นผิวและพิกัดปกติ พวกเขาตอบสนองวัตถุประสงค์ที่แตกต่าง หนึ่งไม่ได้เป็นเพียงการเพิ่มประสิทธิภาพของอีก
Sean Middleditch

6

เนื่องจากไม่มีคำตอบที่ยอมรับได้ฉันเพิ่มข้อมูลบางอย่างฉันต้องการเพียงเพิ่มสิ่งที่ไม่ได้กล่าวโดย Sean ในคำตอบของเขา

TexelFetchถือว่าพื้นผิวเป็นรูปภาพเพื่อให้คุณสามารถเข้าถึงเนื้อหาของพิกเซลได้อย่างแน่นอน คุณมักจะทำเช่นนั้นเมื่อคุณต้องการเนื้อหานั้น ๆ อย่างแน่นอนซึ่งมีอยู่เพียงไม่กี่ครั้ง แต่ก็มีประโยชน์:

  • ตัวกรองการประมวลผลโพสต์บางอย่าง (เบลอ Guassian หาประโยชน์การแก้ไขตัวอย่างเนื้อสัมผัสและดังนั้นจึงไม่สามารถใช้ TexelFetch
  • เมื่อจุดยอดต้องการอ่านข้อมูลจากพื้นผิวและนั่นคือการดำเนินการขึ้นอยู่กับ 2 พิกัด

Tex2Dถือว่าพื้นผิวเป็นพื้นผิว คุณไม่ต้องการเนื้อหาที่แน่นอนของพิกเซล แต่คุณต้องการผลลัพธ์ที่สมจริงที่สุด การอ่านค่าพื้นผิวแบบมาตรฐานนั้นเป็นการดำเนินการที่ซับซ้อนมากและเกี่ยวข้องกับการอ่านข้อมูลที่ถูกแก้ไขจากระดับหนึ่งหรือหลายระดับจากนั้นจึงทำการแทรกอีกครั้ง การดำเนินการที่มีราคาแพงเหล่านั้นคือการหลีกเลี่ยงสิ่งประดิษฐ์ที่มองเห็นได้

GL_NEAREST จะไม่ทำงานเหมือนกันเพราะในรูปหลายเหลี่ยมที่ไกลที่สุดที่คุณกำลังอ่านข้อมูลในระดับ mipmap ที่เล็กกว่าซึ่งไม่ใช่ข้อมูลที่แน่นอนแบบเดียวกับที่คุณจะอ่านจากการเรียกใช้ texel

มีกรณีหนึ่งที่ Tex2D (เกือบ) ทำงานเหมือนกับ TexelFetch:

  1. ตัวกรองคือ GL_NEAREST
  2. คุณกำลังใช้ปิรามิด mipmap ที่ไม่สมบูรณ์ซึ่งมี 1 ระดับ
  3. UVs ของคุณไม่ได้เป็นส่วนประกอบของจุดยอดปกติ (แต่คุณต้องทำให้เป็นมาตรฐานใน shader)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.