การบีบอัดพื้นผิวของฮาร์ดแวร์ทำงานอย่างไร


13

ว่ามันบีบอัดข้อมูลเมื่อเทียบกับอาร์เรย์พิกเซลที่เห็นได้ชัด

แต่อะไรที่ทำให้แตกต่างจากการบีบอัดปกติ (เช่น png, jpeg)


"การบีบอัดปกติ" คืออะไรเช่น JPEG และ PNG คุณถามถึงความแตกต่างระหว่างรูปแบบเหล่านั้นกับฮาร์ดแวร์ที่รองรับเช่น DXT และ ASTC หรือไม่?
นาธานรีด

6
(ในที่สุดหัวข้อที่ฉันรู้เล็กน้อยเกี่ยวกับ!) สิ่งที่ทำให้แตกต่างกับ PNG / JPEG คือการเข้าถึงแบบสุ่ม เมื่อคุณต้องการเข้าถึง Texel (XY) คุณสามารถกำหนดขนาดเล็กของข้อมูลที่จำเป็นในการผลิต Texel นั้นได้อย่างรวดเร็ว JPG หรือ PNG อาจต้องใช้การบีบอัดข้อมูลสูงสุดถึงทั้งหมด! ส่วนที่ 1 และ 2 ของบทความ Wikipediaเป็นบทสรุปที่ดี
Simon F

ดังที่ SimonF เขียน นี่เป็นคำถามที่กว้างมากและคำตอบนั้นขึ้นอยู่กับประเภทที่คุณสนใจคุณดูสเปคของ DXT หรือไม่?
imallett

คำตอบ:


25

เมื่อความคิดเห็นของ Simon พาดพิงถึงความแตกต่างที่สำคัญอย่างหนึ่งระหว่างการบีบอัดพื้นผิวของฮาร์ดแวร์และการบีบอัดรูปภาพอื่น ๆ ที่ใช้กันทั่วไปคือก่อนหน้านี้ไม่ได้ใช้การเข้ารหัสแบบเอนโทรปี การเข้ารหัสแบบเอนโทรปีคือการใช้บิตบิตที่สั้นกว่าเพื่อแสดงรูปแบบทั่วไปที่เกิดขึ้นหรือทำซ้ำในแหล่งข้อมูลดังที่เห็นในรูปแบบคอนเทนเนอร์เช่น ZIP รูปแบบภาพทั่วไปจำนวนมากเช่น GIF, JPEG และ PNG และเสียงทั่วไปมากมาย และรูปแบบวิดีโอ

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

ดังนั้นแทนที่จะเข้ารหัสแบบเอนโทรปีการบีบอัดฮาร์ดแวร์จึงใช้แบบแผนอัตราส่วนคงที่และบล็อก ตัวอย่างเช่นในการบีบอัด DXT / BCnพื้นผิวจะถูกแบ่งออกเป็นบล็อกพิกเซล 4 × 4 ซึ่งแต่ละรายการจะถูกเข้ารหัสใน 64 หรือ 128 บิต (ขึ้นอยู่กับรูปแบบที่เลือก); ในASTCรูปแบบที่แตกต่างกันใช้ขนาดบล็อกตั้งแต่ 4 × 4 ถึง 12 × 12 และบล็อกทั้งหมดจะถูกเข้ารหัสใน 128 บิต รายละเอียดว่าบิตเป็นตัวแทนของข้อมูลภาพแตกต่างกันอย่างไรระหว่างรูปแบบ (และอาจแตกต่างกันไปจากบล็อกหนึ่งไปยังบล็อกถัดไปในรูปภาพเดียวกัน) แต่เนื่องจากอัตราส่วนได้รับการแก้ไขแล้วจึงเป็นเรื่องง่ายสำหรับฮาร์ดแวร์ในการคำนวณตำแหน่งในหน่วยความจำ มีพิกเซล( x , y ) ที่กำหนดและแต่ละบล็อกมีข้อมูลในตัวเองดังนั้นจึงสามารถถอดรหัสได้อย่างอิสระจากบล็อกอื่น ๆ

Another consideration in hardware texture compression is that the decoding should be efficiently implementable in hardware. This means that heavy math operations and complex dataflow are strongly disfavored. The BCn formats, for instance, can be decoded by doing a handful of 8-bit integer math operations per block to populate a small lookup table, then just looking up the appropriate table entry per pixel. This requires very little area on-chip, which is important because you probably want to decode several blocks in parallel, and thus need several copies of the decode hardware.

ในทางตรงกันข้ามรูปแบบที่ใช้ DCT เช่น JPEG ต้องการจำนวนคณิตศาสตร์ต่อพิกเซลแบบไม่ต้องพูดถึง dataflow ที่ซับซ้อนซึ่งสลับและกระจายค่ากลางต่างๆในพิกเซลภายในบล็อก (ดูบทความนี้สำหรับรายละเอียดเต็มไปด้วยเลือดของการถอดรหัส DCT) นี่จะเป็นเรื่องคร่าวๆสำหรับการใช้งานฮาร์ดแวร์ซึ่งฉันคาดเดาว่าทำไม AFAICT ไม่มีฮาร์ดแวร์ GPU ที่เคยใช้การบีบอัดพื้นผิวบนพื้นฐาน DCT หรือเวฟเล็ต .


คำตอบที่ยอดเยี่ยม นอกจากนี้คุณสามารถเพิ่มว่ามีเอกสารบางฉบับที่กล่าวถึงว่าในบางสถานการณ์คุณสามารถบีบอัดตัวเองและถอดรหัสด้วยรหัสลูกค้าในตัวแปลงพิกเซลแทนที่จะใช้ฮาร์ดแวร์เฉพาะ ฉันรู้ว่าไม่มีการใช้งานจริง ๆ ในโลกซึ่งอาจมีค่าสำหรับการวิจัยเท่านั้น แต่มันมีอยู่จริง
v.oddou

1
@ Nathan-Reed re-based การบีบอัดการบีบอัดจริง ๆ แล้วโครงการ Talisman ของ Microsoft ใช้รูปแบบการบีบอัดที่เรียกว่า TREC ซึ่ง (หนึ่งในโหมด) ใช้ DCT แต่ไม่เหมือนกับ JPEG อนุญาตให้เข้าถึงแบบสุ่มไปยังบล็อก (ฉันสงสัยว่าต้องมีตารางที่มี ที่อยู่) นี่จะอนุญาตให้ข้อมูลความยาวแปรผันสำหรับบล็อกต่าง ๆ แต่การอ้อมนั้นไม่น่าพึงพอใจสำหรับ HW - เหตุผล VQ TC ล้าสมัย FWIW ฉันทดลองเกี่ยวกับความคิด TC โหล B4 PVRTC; บางตัวเป็นอัตราคงที่, แปลงตาม แต่ coeffs "ที่หายไป" ยังคงใช้บิต ตำแหน่ง coeff แบบคงที่ BTC หมายถึงข้อมูล "ฟรี"
Simon F

2
@ นาธาน-กก จากสิ่งที่ฉันได้เห็นตัวถอดรหัส HW ทั้งหมดสามารถนำไปใช้กับเส้นทางตรรกะบริสุทธิ์ (การถอดรหัสบิตการค้นหาบางอย่างคณิตศาสตร์บางอย่างในเส้นทางข้อมูล) แต่ไม่จำเป็นต้องวนซ้ำ / ลงทะเบียน คุณทราบถึงชุดรูปแบบใด ๆ ที่เพิ่มรอบเวลาแฝงลงในการค้นหาพื้นผิวหรือไม่ (ฉันสนุกที่จะใช้ตัวถอดรหัส VHDL ETC1) ฉันรู้สึกประทับใจที่แต่ละหน่วยพื้นผิว (TU) มีตัวถอดรหัสฝังอยู่
Romain Piquois

31

"วิธีการบีบอัดพื้นผิว (ฮาร์ดแวร์) ทำงานอย่างไร"เป็นหัวข้อขนาดใหญ่ หวังว่าฉันสามารถให้ข้อมูลเชิงลึกบางส่วนโดยไม่ต้องทำซ้ำเนื้อหาของคำตอบของนาธาน

ความต้องการ

การบีบอัดพื้นผิวโดยทั่วไปแตกต่างจากเทคนิคการบีบอัดภาพ 'มาตรฐาน' เช่น JPEG / PNG ในสี่วิธีหลักดังที่อธิบายไว้ในการแสดงผลของ Beers และ al จากพื้นผิวที่บีบอัด :

  1. ความเร็วในการถอดรหัส : คุณไม่ต้องการให้การบีบอัดพื้นผิวช้าลง (อย่างน้อยก็ไม่สังเกตเห็นได้ชัด) กว่าการใช้พื้นผิวที่ไม่ได้บีบอัด มันควรจะค่อนข้างง่ายในการแตกเนื่องจากมันสามารถช่วยให้เกิดการคลายอย่างรวดเร็วโดยไม่ต้องใช้ฮาร์ดแวร์และพลังงานมากเกินไป

  2. การเข้าถึงแบบสุ่ม : คุณไม่สามารถคาดเดาได้ง่ายว่าจะต้องใช้เอกสารใดบ้างระหว่างการแสดงผลที่กำหนด หากเซตย่อยบางอันMของเท็กซัสที่เข้าถึงมานั้นบอกว่าอยู่ตรงกลางของรูปภาพมันเป็นสิ่งสำคัญที่คุณไม่จำเป็นต้องถอดรหัสบรรทัด 'ก่อนหน้า' ทั้งหมดของพื้นผิวเพื่อกำหนดM ; ด้วย JPEG และ PNG สิ่งนี้จำเป็นเนื่องจากการถอดรหัสพิกเซลขึ้นอยู่กับข้อมูลที่ถอดรหัสก่อนหน้านี้
    โปรดทราบว่าการพูดแบบนี้เพียงเพราะคุณมีการเข้าถึงแบบ "สุ่ม" ไม่ได้หมายความว่าคุณควรลองตัวอย่างโดยพลการอย่างสมบูรณ์

  3. อัตราการบีบอัดและคุณภาพการมองเห็น : เบียร์และอัลเถียงกัน (เชื่อมั่น) ว่าการสูญเสียคุณภาพบางอย่างในผลลัพธ์ที่ถูกบีบอัดเพื่อปรับปรุงอัตราการบีบอัดนั้นเป็นการแลกเปลี่ยนที่คุ้มค่า ในการเรนเดอร์ 3D ข้อมูลน่าจะถูกจัดการ (เช่นตัวกรอง & เงา ฯลฯ ) ดังนั้นการสูญเสียคุณภาพบางอย่างอาจถูกหลอกลวง

  4. การเข้ารหัส / ถอดรหัสแบบอสมมาตร : แม้ว่าอาจจะเป็นที่ถกเถียงกันอยู่เล็กน้อยพวกเขาอ้างว่ามันเป็นที่ยอมรับได้ว่ากระบวนการเข้ารหัสช้ากว่าการถอดรหัสมาก เนื่องจากการถอดรหัสต้องอยู่ในอัตราการเติม HW ซึ่งเป็นที่ยอมรับโดยทั่วไป (ฉันจะยอมรับว่าการบีบอัด PVRTC, ETC2 และอื่น ๆ ที่คุณภาพสูงสุดอาจเร็วกว่า)

ประวัติศาสตร์และเทคนิคเบื้องต้น

อาจแปลกใจที่บางคนเรียนรู้ว่าการบีบอัดพื้นผิวนั้นมีมานานกว่าสามทศวรรษแล้ว จำลองการบินจาก 70s และ 80s ที่จำเป็นในการเข้าถึงค่อนข้างข้อมูลจำนวนมากพื้นผิวและให้ที่1MB แรมในปี 1980 เป็น> $ 6000 , การลดการปล่อยเนื้อเป็นสิ่งจำเป็น เป็นอีกตัวอย่างหนึ่งในช่วงกลางยุค 70 แม้กระทั่งหน่วยความจำความเร็วสูงและตรรกะจำนวนเล็กน้อยเช่นเพียงพอสำหรับบัฟเฟอร์เฟรมเฟรม RGB ขนาด 512x512 ที่พอเหมาะ ) ก็อาจทำให้คุณได้ราคาบ้านหลังเล็ก ๆ

แม้ว่า AFAIK ไม่เรียกอย่างชัดเจนว่าการบีบอัดเนื้อในวรรณคดีและสิทธิบัตรคุณสามารถหาอ้างอิงถึงเทคนิค ได้แก่ :
รูปแบบง่ายๆของการสังเคราะห์พื้นผิวทางคณิตศาสตร์ / ขั้นตอนการ
b. การใช้พื้นผิวช่องสัญญาณเดียว (เช่น 4bpp) ที่จะถูกคูณด้วยค่า RGB ต่อพื้นผิว
c YUV และ
d จานสี (วรรณกรรมแนะนำให้ใช้วิธีการของ Heckbert ในการบีบอัด)

การสร้างแบบจำลองข้อมูลภาพ

ดังที่ได้กล่าวไว้ข้างต้นการบีบอัดพื้นผิวนั้นมักจะสูญเสียไปและทำให้ปัญหากลายเป็นหนึ่งในความพยายามที่จะนำเสนอข้อมูลที่สำคัญในแบบกะทัดรัดในขณะที่การกำจัดข้อมูลที่สำคัญน้อยกว่า รูปแบบต่าง ๆ ที่จะอธิบายด้านล่างทั้งหมดมีรูปแบบ 'พารามิเตอร์' โดยปริยายที่ใกล้เคียงกับพฤติกรรมทั่วไปของข้อมูลพื้นผิวและการตอบสนองของตา

นอกจากนี้เนื่องจากการบีบอัดพื้นผิวมีแนวโน้มที่จะใช้การเข้ารหัสอัตราคงที่กระบวนการบีบอัดมักจะมีขั้นตอนการค้นหาเพื่อค้นหาชุดของพารามิเตอร์ซึ่งเมื่อป้อนเข้ากับแบบจำลองจะสร้างการประมาณค่าที่ดีของพื้นผิวดั้งเดิม อย่างไรก็ตามขั้นตอนการค้นหานั้นอาจใช้เวลานาน
(ยกเว้นเครื่องมือที่เป็นไปได้เช่นoptipngนี่เป็นอีกพื้นที่หนึ่งที่การใช้ PNG และ JPEG โดยทั่วไปแตกต่างจากแผนการบีบอัดพื้นผิว)

ก่อนที่จะดำเนินการต่อไปเพื่อช่วยในการทำความเข้าใจเพิ่มเติมเกี่ยวกับ TC มันมีค่าดูที่การวิเคราะห์ส่วนประกอบหลัก (PCA) - เครื่องมือทางคณิตศาสตร์ที่มีประโยชน์มากสำหรับการบีบอัดข้อมูล

ตัวอย่างเนื้อสัมผัส

ในการเปรียบเทียบวิธีการต่างๆเราจะใช้ภาพต่อไปนี้:

lorikeet ขนาดเล็ก + ข้อความ
โปรดทราบว่านี่เป็นภาพที่ค่อนข้างยากโดยเฉพาะอย่างยิ่งสำหรับพาเล็ตและวิธีการ VQTC เนื่องจากมันครอบคลุมลูกบาศก์สี RGB จำนวนมากและมีเพียง 15% ของข้อความที่ใช้สีซ้ำ

PC และ (post mid 90s) การบีบอัดเนื้อคอนโซล

เพื่อลดค่าใช้จ่ายในการรับส่งข้อมูลเกมพีซีและเกมคอนโซลบางเกมก็ใช้ภาพแบบพาเล็ตซึ่งเป็นรูปแบบของ Vector Quantisation (VQ) วิธีการแบบใช้พาเล็ตทำให้สมมติฐานที่ว่าภาพที่กำหนดใช้เพียงส่วนเล็ก ๆ ของลูกบาศก์สี RGB (A) ปัญหาของพื้นผิวแบบพาเล็ตคืออัตราการบีบอัดสำหรับคุณภาพที่ทำได้นั้นโดยทั่วไปค่อนข้างปานกลาง ตัวอย่างพื้นผิวที่บีบอัดให้กับ "4bpp" (โดยใช้ GIMP) สร้าง หมายเหตุอีกครั้งว่านี่เป็นภาพที่ค่อนข้างยากสำหรับแผนการ VQ
ป้อนคำอธิบายรูปภาพที่นี่

VQ ที่มีเวกเตอร์ขนาดใหญ่ (เช่น 2bpp ARGB)

แรงบันดาลใจจากเบียร์และอัลคอนโซล Dreamcast ใช้ VQ เพื่อเข้ารหัส 2x2 หรือแม้กระทั่งบล็อกพิกเซล 2x4 ด้วยไบต์เดียว ในขณะที่ "เวกเตอร์" ในพื้นผิวแบบพาเล็ทมี 3 หรือ 4 มิติบล็อก 2x2 พิกเซลสามารถพิจารณาเป็น 16 มิติ รูปแบบการบีบอัดจะถือว่ามีเพียงพอการทำซ้ำเวกเตอร์เหล่านี้โดยประมาณ

แม้ว่า VQ สามารถบรรลุคุณภาพที่น่าพอใจด้วย ~ 2bpp ปัญหาของโครงร่างเหล่านี้คือต้องใช้หน่วยความจำที่ต้องพึ่งพาอ่าน: การอ่านเริ่มต้นจากแผนที่ดัชนีเพื่อกำหนดรหัสสำหรับพิกเซลตามด้วยวินาทีเพื่อดึงข้อมูลพิกเซลที่เกี่ยวข้องจริง ๆ ด้วยรหัสนั้น แคชเพิ่มเติมสามารถช่วยบรรเทาความล่าช้าที่เกิดขึ้น แต่เพิ่มความซับซ้อนให้กับฮาร์ดแวร์

ภาพตัวอย่างบีบอัดด้วยโครงการ 2bpp ผล 2QP VQแคสต์เป็น แผนที่ดัชนีคือ:แผนที่ดัชนี 2bpp VQ

การบีบอัดข้อมูล VQ สามารถทำได้หลายวิธีอย่างไรก็ตามIIRCด้านบนทำโดยใช้ PCA เพื่อหาค่าจากนั้นแบ่งพาร์ติชันเวกเตอร์ 16D ตามเวกเตอร์หลักออกเป็น 2 ชุดซึ่งเวกเตอร์ตัวแทนสองตัวลดข้อผิดพลาดกำลังสองเฉลี่ย กระบวนการนี้จะเรียกใช้ซ้ำจนกว่าจะมีการผลิตเวกเตอร์จำนวน 256 แบบ จากนั้นใช้วิธีอัลกอริทึม k-mean / Lloydทั่วโลกเพื่อปรับปรุงตัวแทน

การแปลงพื้นที่สี

การแปลงพื้นที่สีใช้ประโยชน์จาก PCA โดยสังเกตว่าการกระจายสีทั่วโลกมักจะแพร่กระจายไปตามแกนหลักและกระจายน้อยลงตามแกนอื่น ๆ สำหรับการเป็นตัวแทนของ YUV สมมติฐานคือก) แกนหลักมักจะอยู่ในทิศทางของลูม่าและข) ดวงตานั้นไวต่อการเปลี่ยนแปลงในทิศทางนี้มากขึ้น

ระบบ 3dfx Voodoo จัดให้มีระบบการบีบอัด"YAB" , 8bpp, "Narrow Channel" ที่แบ่งเท็กเซล 8 บิตออกเป็นฟอร์แมต 322 และใช้สีที่ผู้ใช้เลือกเปลี่ยนเป็นข้อมูลเพื่อแมปเป็น RGB แกนหลักจึงมี 8 ระดับและแกนเล็กลง 4 ต่อ

ชิป S3 Virge มีรูปแบบที่เรียบง่ายกว่าเล็กน้อยคือ 4bpp ซึ่งอนุญาตให้ผู้ใช้ระบุสำหรับทั้งพื้นผิวสีสองสีซึ่งควรวางอยู่บนแกนหลักพร้อมกับพื้นผิว 4bpp สีเดียว จากนั้นค่าต่อพิกเซลจะผสมสีสุดท้ายกับน้ำหนักที่เหมาะสมเพื่อสร้างผลลัพธ์ RGB

รูปแบบที่ใช้ BTC

กรอกลับจำนวนปีบาง Delp เซรั่มและการออกแบบรูปแบบที่เรียบง่าย (ขาวดำ) การบีบอัดภาพที่เรียกว่าบล็อกตัด Coding (BTC) บทความนี้ยังรวมถึงอัลกอริทึมการบีบอัด แต่เพื่อจุดประสงค์ของเราเราส่วนใหญ่สนใจในข้อมูลการบีบอัดที่เกิดและกระบวนการบีบอัด

ในรูปแบบนี้ภาพจะถูกแบ่งออกเป็นปกติบล็อกพิกเซล 4x4 ซึ่งสามารถบีบอัดได้อย่างอิสระด้วยเอฟเฟกต์ VQ ที่แปลเป็นภาษาท้องถิ่น แต่ละบล็อกจะแสดงด้วย "ค่า" สองชุดคือaและbและชุด 4x4 บิตของดัชนีซึ่งระบุว่าจะใช้ค่าใดในสองพิกเซลสำหรับแต่ละพิกเซล

S3TC : 4bpp RGB (+ 1bit อัลฟา)
แม้ว่าหลายสีสายพันธุ์ของ BTC สำหรับการบีบอัดภาพที่ถูกนำเสนอที่น่าสนใจให้เราเป็นIourcha et al, ของ S3TCบางอย่างที่ดูเหมือนจะเป็นการค้นพบของการทำงานลืมค่อนข้างHoffert et al,ว่า ถูกใช้ใน Quicktime ของ Apple

S3TC ดั้งเดิมซึ่งไม่มีตัวแปร DirectX จะบีบอัดบล็อกของทั้ง RGB หรือ RGB + 1 บิต Alpha เป็น 4bpp บล็อก 4x4 แต่ละอันในพื้นผิวจะถูกแทนที่ด้วยสีสองสีคือAและBซึ่งสีอื่น ๆ มากถึงสองสีนั้นจะได้มาจากการผสมเชิงเส้นคงที่และน้ำหนัก เพิ่มเติมแต่ละ texel ในบล็อกมีดัชนี 2 บิตที่กำหนดวิธีการเลือกหนึ่งในสี่สีเหล่านี้

ตัวอย่างต่อไปนี้คือส่วน 4x4 พิกเซลของภาพทดสอบที่บีบอัดด้วยเครื่องมือบีบอัด AMD / ATI (โดยทางเทคนิคแล้วมันมาจากภาพทดสอบรุ่น 512x512 แต่ยกโทษให้ฉันโดยไม่มีเวลาให้ฉันอัปเดตตัวอย่าง ) นี่แสดงให้เห็นถึงกระบวนการบีบอัด: คำนวณค่าเฉลี่ยและแกนหลักของสี แบบที่ดีที่สุดจะถูกดำเนินการเพื่อหาจุดสิ้นสุดสองจุดที่ 'นอนอยู่บน' แกนซึ่งรวมกับการผสมผสาน 1: 2 และ 2: 1 (หรือในบางกรณีการผสมผสาน 50:50) ของจุดสิ้นสุดนั้น ลดข้อผิดพลาดให้น้อยที่สุด แต่ละพิกเซลดั้งเดิมจะถูกแมปกับสีใดสีหนึ่งเพื่อให้ได้ผลลัพธ์
ป้อนคำอธิบายรูปภาพที่นี่

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

ภาพตัวอย่างบีบอัดด้วยAMD Compressonatorสร้าง:
ป้อนคำอธิบายรูปภาพที่นี่

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

ETC1 : 4bpp RGB
Ericsson Texture Compression ใช้งานได้กับ 4x4 บล็อกของ texels แต่ทำให้สันนิษฐานได้ว่าเหมือนกับ YUV แกนหลักของชุด Texel ในท้องถิ่นนั้นมีความสัมพันธ์อย่างมากกับ "luma" ชุดของเท็กซัลนั้นสามารถแสดงเพียงสีเฉลี่ยและ 'ความยาว' สเกลาร์เชิงปริมาณที่สูงของการฉายภาพของเท็กซัสไปยังแกนที่สันนิษฐานนั้น

เนื่องจากสิ่งนี้ช่วยลดค่าใช้จ่ายในการจัดเก็บข้อมูลเมื่อเทียบกับ S3TC ทำให้ ETC สามารถแนะนำรูปแบบการแบ่งพาร์ติชั่นโดยบล็อก 4x4 จะถูกแบ่งย่อยเป็นคู่ของบล็อกย่อยแนวนอน 4x2 หรือแนวตั้ง 2x4 แต่ละอันมีสีเฉลี่ยของตัวเอง ภาพตัวอย่างสร้าง: พื้นที่รอบ ๆ จะงอยปากยังแสดงให้เห็นถึงการแบ่งพาร์ติชันตามแนวนอนและแนวตั้งของบล็อก 4x4
ป้อนคำอธิบายรูปภาพที่นี่
ป้อนคำอธิบายรูปภาพที่นี่

ทั่วโลก + ท้องถิ่น

มีบางระบบการบีบอัดพื้นผิวที่มีการผสมผสานกันระหว่างรูปแบบทั่วโลกและท้องถิ่นเช่นว่าจานกระจายเป็นIvanov และ KuzminหรือวิธีการของPVRTC

PVRTC : 4 & 2 bpp RGBA
PVRTC ถือว่าภาพที่อัปสเกล (ในทางปฏิบัติ, bilinearly) เป็นการประมาณที่ดีสำหรับเป้าหมายเต็มความละเอียดและความแตกต่างระหว่างการประมาณและเป้าหมายนั่นคือภาพเดลต้า มีแกนหลักที่โดดเด่น นอกจากนี้จะถือว่าแกนหลักในพื้นที่สามารถแก้ไขข้ามภาพได้

(ต้องทำ: เพิ่มภาพที่แสดงรายละเอียด)

ตัวอย่างพื้นผิวที่ถูกบีบอัดด้วย PVRTC1 4bpp สร้างขึ้น: ด้วยพื้นที่รอบ ๆ ปากนก: เมื่อเทียบกับ BTC-schemes บล็อกของสิ่งประดิษฐ์มักจะถูกกำจัด แต่บางครั้งก็อาจ "เกินขนาด" หากมีความไม่ต่อเนื่องที่แข็งแกร่งในภาพต้นฉบับ เงาของหัว lorikeet
ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ตัวแปร 2bpp มีความผิดพลาดสูงกว่า 4bpp โดยธรรมชาติ (โน้ตที่สูญเสียความแม่นยำรอบสีน้ำเงินพื้นที่ความถี่สูงใกล้คอ) แต่เนื้อหายังมีคุณภาพพอสมควร:
ป้อนคำอธิบายรูปภาพที่นี่

หมายเหตุเกี่ยวกับค่าใช้จ่ายในการบีบอัด

แม้ว่าอัลกอริธึมการบีบอัดสำหรับรูปแบบที่อธิบายไว้ข้างต้นจะมีค่าใช้จ่ายในการประเมินปานกลางถึงสูง แต่อัลกอริธึมการบีบอัดโดยเฉพาะอย่างยิ่งสำหรับการปรับใช้ฮาร์ดแวร์นั้นมีราคาค่อนข้างต่ำ ตัวอย่างเช่น ETC1 ต้องการมากกว่า MUXes และตัวเสริมที่มีความแม่นยำต่ำเพียงเล็กน้อย S3TC ได้อย่างมีประสิทธิภาพยิ่งขึ้นนอกจากนี้หน่วยเพิ่มเติมเพื่อทำการผสม; และ PVRTC เพิ่มขึ้นอีกเล็กน้อย ในทางทฤษฎีแล้วโครงร่าง TC แบบง่ายเหล่านี้สามารถอนุญาตให้สถาปัตยกรรม GPU เพื่อหลีกเลี่ยงการคลายการบีบอัดจนกระทั่งก่อนขั้นตอนการกรองซึ่งจะช่วยเพิ่มประสิทธิภาพของแคชภายใน

แผนการอื่น ๆ

โหมด TC ทั่วไปอื่น ๆ ที่ควรกล่าวถึงคือ:

  • ETC2 - เป็น superset (4bpp) ของ ETC1 ที่ปรับปรุงการจัดการพื้นที่ด้วยการกระจายสีที่ไม่สอดคล้องกับ 'luma' นอกจากนี้ยังมีตัวแปร 4bpp ที่รองรับ 1 บิตอัลฟาและรูปแบบ 8bpp สำหรับ RGBA

  • ATC - เป็นอย่างมีประสิทธิภาพขนาดเล็กรูปแบบบน S3TC

  • FXT1 (3dfx) เป็นความทะเยอทะยานมากขึ้นแตกต่างจากรูปแบบ S3TC

  • BC6 & BC7: 8bpp เป็นระบบบล็อกที่รองรับ ARGB นอกเหนือจากโหมด HDR แล้วระบบเหล่านี้ยังใช้ระบบการแบ่งพาร์ติชันที่ซับซ้อนกว่า ETC เพื่อให้การกระจายสีของรูปแบบดีขึ้น

  • PVRTC2: 2 และ 4bpp ARGB สิ่งนี้แนะนำโหมดเพิ่มเติมรวมถึงโหมดหนึ่งที่จะเอาชนะข้อ จำกัด ด้วยขอบเขตที่แข็งแกร่งในภาพ

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


1
ว้าวนี่น่าจะเป็นโพสต์บล็อกที่ไหนสักแห่ง! คำตอบที่ดี!
glampert

2
ดีใจที่ได้รับความช่วยเหลือ สำหรับบล็อกฉันเขียนสิ่งนี้เมื่อสิบปีก่อนแต่ฉันไม่มีเวลาทำ
Simon F

1
เว็บไซต์ที่โฮสต์บล็อกเก่านั้นตายแล้ว นี่เป็นเวอร์ชันล่าสุดที่เก็บถาวร: web.archive.org/web/20160322090245/http://web.onetel.net.uk/ …
ahcox
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.