ระบบการแปลงรหัสพื้นผิวที่บีบอัด GPU แบบพกพา LDR/HDR
พื้นฐาน Universal เป็น Open Source Supercompressed LDR/HDR GPU ที่บีบอัดพื้นผิวระบบ Interchange จาก Binomial LLC ที่รองรับรูปแบบไฟล์กลางสองรูปแบบ:. KTX2 Open Standard จากกลุ่ม Khronos และรูปแบบไฟล์ ".Basis" ของเราเอง รูปแบบไฟล์เหล่านี้รองรับการแปลงรหัสอย่างรวดเร็วไปยังรูปแบบพื้นผิว GPU ที่ถูกบีบอัดใด ๆ ที่เผยแพร่ในช่วงเวลา ~ 25 ปีที่ผ่านมา
เป้าหมายโดยรวมของเรากับโครงการนี้คือการทำให้การเข้ารหัสและการกระจายอย่างมีประสิทธิภาพของพื้นผิว LDR และ HDR GPU แบบพกพา ภาพและเนื้อหาวิดีโอพื้นผิวในลักษณะที่เข้ากันได้กับ GPU หรือการแสดงผล/กราฟิก API
ระบบรองรับสามโหมด: ETC1s, UASTC LDR และ UASTC HDR Libaries C/C ++ และ Libaries Transcoder สามารถรวบรวมเป็นรหัสดั้งเดิมหรือ webAssembly และคุณสมบัติ encoder/transcoder ทั้งหมดสามารถเข้าถึงได้จาก JavaScript
บันทึกย่อ
ตัวอย่าง WebGL แบบ Live encoder/Transcoder
ข้อมูล JavaScript API/WASM/WebGL
ภาพตัวอย่าง uastc hdr
ไฟล์ ETC1S และ UASTC LDR สามารถแปลงรหัสไปยัง:
ไฟล์ UASTC HDR สามารถแปลงรหัสเป็น:
ETC1S: โหมด supercompressed คุณภาพต่ำถึงระดับต่ำถึงระดับปานกลางโดยประมาณ. 3-3bpp คุณภาพต่ำกว่าชุดย่อยของ ETC1 ที่เรียกว่า "ETC1S" โหมดนี้รองรับคุณภาพตัวแปรคุณภาพเทียบกับระดับขนาดไฟล์ (เช่น JPEG), ช่องอัลฟ่า, การบีบอัดในตัวและอาร์เรย์พื้นผิวที่ถูกบีบอัดเป็นลำดับวิดีโอโดยใช้ Skip Blocks (การเติมเต็มเงื่อนไข) โหมดนี้สามารถแปลงรหัสอย่างรวดเร็วไปยังรูปแบบพื้นผิว LDR ที่รองรับทั้งหมด
UASTC LDR: โหมด 8 บิต/พิกเซล LDR คุณภาพสูง UASTC LDR เป็นชุดย่อยโหมด 19 ของรูปแบบพื้นผิวมาตรฐาน ASTC LDR 4X4 (8BPP) แต่ด้วยรูปแบบบล็อกที่กำหนดเองที่มีคำแนะนำการแปลงรหัส การแปลงรหัส UASTC LDR เป็น ASTC LDR และ BC7 นั้นรวดเร็วและง่ายโดยเฉพาะอย่างยิ่งเนื่องจาก UASTC LDR เป็นชุดย่อยทั่วไปของทั้ง BC7 และ ASTC transcoders สำหรับรูปแบบพื้นผิวอื่น ๆ จะถูกเร่งด้วยบิตคำใบ้เฉพาะรูปแบบที่มีอยู่ในแต่ละบล็อก UASTC LDR
โหมดนี้รองรับขั้นตอนหลังการปรับแต่งอัตราการบิดเบือนอัตรา (RDO) ที่เป็นตัวเลือกซึ่งเงื่อนไขข้อมูลพื้นผิว UASTC LDR ที่เข้ารหัสในไฟล์. KTX2/.BASIS เพื่อให้สามารถบีบอัด LZ ได้อย่างมีประสิทธิภาพมากขึ้น รายละเอียดเพิ่มเติมที่นี่
นี่คือเอกสารข้อมูลจำเพาะ UASTC LDR
นี่คือเอกสารข้อมูลจำเพาะ UASTC HDR และภาพตัวอย่างบางส่วน
ทั้งไฟล์. BASIS และ. KTX2 รองรับระดับ MIPMAP, อาร์เรย์พื้นผิว, cubemaps, cubemap อาร์เรย์และวิดีโอพื้นผิวในทั้งสามโหมด นอกจากนี้ไฟล์. BASIS รองรับอาร์เรย์พื้นผิวที่ไม่สม่ำเสมอซึ่งแต่ละภาพในไฟล์สามารถมีความละเอียดที่แตกต่างกันหรือจำนวนระดับ MIPMAP ที่แตกต่างกัน
ในโหมด ETC1S คอมเพรสเซอร์สามารถใช้ประโยชน์จากความสัมพันธ์สีและลวดลายในภาพทั้งหมดในไฟล์ทั้งหมดโดยใช้รหัสปลายทาง/ตัวเลือกทั่วโลกดังนั้นภาพหลายภาพที่มี MIPMAPs สามารถจัดเก็บได้อย่างมีประสิทธิภาพในไฟล์เดียว โหมด ETC1S ยังรองรับลำดับวิดีโอสั้น ๆ ด้วยการข้ามบล็อก (การเติมเต็มเงื่อนไข) ที่ใช้เพื่อไม่ส่งบล็อกซึ่งไม่ได้เปลี่ยนเมื่อเทียบกับเฟรมก่อนหน้า
รูปแบบภาพ LDR ที่รองรับการอ่านคือ. png, .dds กับ mipmaps, .tga, .qoi และ. jpg รูปแบบภาพ HDR ที่รองรับการอ่านคือ. exr, .hdr และ .dds ด้วย mipmaps มันสามารถเขียน. basis, .ktx2, .dds, .ktx (v1), .ASTC, .out, .EXR และ. PNG
ขณะนี้ระบบรองรับการโหลดไฟล์ 2D .DDS พื้นฐานที่มี mipmaps เสริม แต่ไฟล์. dds ต้องอยู่ในรูปแบบที่ไม่ได้บีบอัดที่รองรับหนึ่งรูปแบบ: 24bpp RGB, 32bpp RGBA/BGRA, RGBA ครึ่งโรตหรือลอย RGBA การใช้ไฟล์. dds ช่วยให้ผู้ใช้สามารถควบคุมวิธีการสร้าง mipmaps ก่อนการบีบอัด
เครื่องมือการเข้ารหัสและเครื่องมือบรรทัดคำสั่งไม่จำเป็นต้องมีการพึ่งพาบุคคลที่สามซึ่งไม่ได้อยู่ใน repo เอง transcoder เป็นไฟล์แหล่งข้อมูล. CPP เดียว (ใน transcoder/basisu_transcoder.cpp
) ซึ่งไม่มีการพึ่งพาบุคคลที่สาม
เราสร้างและทดสอบภายใต้:
ภายใต้ Windows ด้วย Visual Studio คุณสามารถใช้ไฟล์ basisu.sln
ที่รวมอยู่ในไฟล์ หรือคุณสามารถใช้ CMAKE เพื่อสร้างไฟล์โซลูชัน/โครงการใหม่
ในการสร้างให้ติดตั้ง cmake ก่อนแล้ว:
cd build
cmake ..
make
ในการสร้างด้วยการสนับสนุน SSE 4.1 บนระบบ X86/X64 (การเข้ารหัสเร็วกว่าประมาณ 15-30%) เพิ่ม -DSSE=TRUE
กับบรรทัดคำสั่ง CMAKE เพิ่ม -DOPENCL=TRUE
เพื่อสร้างด้วยการสนับสนุน OpenCl (ไม่บังคับ) ใช้ -DCMAKE_BUILD_TYPE=Debug
เพื่อสร้างในการดีบัก ในการสร้างปฏิบัติการ 32 บิตให้เพิ่ม -DBUILD_X64=FALSE
หลังจากสร้างเครื่องมือบรรทัดคำสั่งดั้งเดิมที่ใช้ในการสร้างตรวจสอบและ transcode/unpack .basis/.ktx2 ไฟล์คือ bin/basisu
เครื่องมือบรรทัดคำสั่งรวมถึงการทดสอบการเข้ารหัส/การแปลงรหัส LDR/HDR อัตโนมัติ: การทดสอบการแปลงรหัส:
cd ../bin
basisu -test
basisu -test_hdr
ในการทดสอบตัวแปลงสัญญาณในโหมด OpenCl (ต้องมีการติดตั้ง OpenCL LIBS/ส่วนหัว/ไดรเวอร์และได้รวบรวมการสนับสนุน OpENCL โดยใช้ CMAKE ด้วย -DOPENCL=TRUE
):
basisu -test -opencl
basisu -q 255 x.png
basisu -linear x.png
basisu -uastc x.png
basisu x.exr
หมายเหตุเครื่องอ่าน. EXR ที่เราใช้คือ TINYEXR ซึ่งไม่รองรับโหมดการบีบอัด. EXR ทั้งหมดที่เป็นไปได้ เครื่องมือเช่น ImageMagick สามารถใช้ในการสร้างไฟล์. exr ที่ TinyExr สามารถอ่านได้
อีกทางเลือกหนึ่งคือภาพ LDR (เช่น. png) สามารถบีบอัดเป็น UASTC HDR ได้โดยระบุ -hdr
โดยค่าเริ่มต้นรูปภาพ LDR เมื่อถูกบีบอัดเป็น UASTC HDR จะถูกแปลงเป็นครั้งแรกจาก SRGB เป็นแสงเชิงเส้นก่อนการบีบอัด ขั้นตอนการแปลงนี้สามารถปิดใช้งานได้โดยการระบุ -hdr_ldr_no_srgb_to_linear
ที่สำคัญสำหรับคุณภาพที่ดีที่สุดคุณควร จัดหาพื้นฐานด้วยภาพต้นฉบับที่ไม่ได้บีบอัดดั้งเดิม การบีบอัดแบบสูญเสียประเภทอื่น ๆ ที่ใช้ก่อนพื้นฐาน (รวมถึง ETC1/BC1-5, BC7, JPEG ฯลฯ ) จะทำให้สิ่งประดิษฐ์หลายรุ่นปรากฏในพื้นผิวเอาต์พุตสุดท้าย
-fastest
(ซึ่งเทียบเท่ากับ -uastc_level 0
) ทำให้ตัวเข้ารหัส UASTC LDR/HDR ในโหมดที่เร็วที่สุด (แต่มีคุณภาพต่ำกว่า)
-slower
ทำให้ตัวเข้ารหัส UASTC LDR/HDR ในโหมดคุณภาพสูงขึ้น แต่ช้ากว่า (เทียบเท่ากับ -uastc_level 3
) ระดับเริ่มต้นคือ 1 และสูงสุดคือ 4 (ซึ่งค่อนข้างช้า)
-q X
โดยที่ X อยู่ในช่วง [1,255] ควบคุมคุณภาพของโหมด ETC1S เทียบกับระดับการแลกเปลี่ยนขนาดไฟล์ 255 คือคุณภาพสูงสุดและค่าเริ่มต้นคือ 128
-debug
ทำให้ตัวเข้ารหัสพิมพ์ข้อมูลการดีบัก verbose ภายในและนักพัฒนาที่มุ่งเน้น
-stats
เพื่อดูสถิติคุณภาพ (PSNR) ต่างๆ
-linear
: ETC1S ค่าเริ่มต้นเป็นตัวชี้วัด SRGB ColorsPace ปัจจุบัน UASTC LDR ใช้ตัวชี้วัดเชิงเส้นเสมอและค่าเริ่มต้น UASTC HDR ไปยังตัวชี้วัด RGB ถ่วงน้ำหนัก (ด้วยน้ำหนัก 2,3,1) หากอินพุตเป็นแผนที่ปกติหรือเนื้อหาพื้นผิวที่ไม่ใช่ SRGB (ไม่ใช่ภาพถ่าย) ประเภทอื่น ๆ ให้แน่ใจว่าใช้ -linear
เพื่อหลีกเลี่ยงสิ่งประดิษฐ์ที่ไม่จำเป็นพิเศษ (ตัวชี้วัดแผนที่เชิงมุมสำหรับ UASTC LDR/HDR เป็นไปได้อย่างแน่นอนและอยู่ในรายการสิ่งที่ต้องทำของเรา)
การระบุ -opencl
เปิดใช้งานโหมด OpenCL ซึ่งปัจจุบันเร่งการเข้ารหัส ETC1S เท่านั้น
คอมเพรสเซอร์เป็นมัลติเธรดโดยค่าเริ่มต้นซึ่งสามารถปิดใช้งานได้โดยใช้ตัวเลือกบรรทัดคำสั่ง -no_multithreading
Line ปัจจุบัน transcoder เป็นเกลียวเดี่ยวแม้ว่าจะเป็นเธรดที่ปลอดภัย (เช่นรองรับการบีบอัดชิ้นเนื้อหลายชิ้นในแบบขนาน)
basisu -uastc -uastc_rdo_l 1.0 -mipmap x.png
-uastc_rdo_l X
ควบคุมการตั้งค่าคุณภาพ RDO (การเพิ่มประสิทธิภาพการกระจายอัตรา) ค่านี้จะยิ่งต่ำเท่าไหร่คุณภาพก็จะยิ่งสูงขึ้น แต่ยิ่งขนาดไฟล์บีบอัดมากขึ้นเท่านั้น ค่าที่ดีในการลองอยู่ระหว่าง. 2-3.0 ค่าเริ่มต้นคือ 1.0
basisu -mipmap -q 200 x.png
มีตัวเลือก MIPMAP หลายตัวเลือกในการเปลี่ยนเคอร์เนลตัวกรองตัวกรอง Colorspace สำหรับช่อง RGB (เชิงเส้นกับ SRGB) ขนาด MIPMAP ที่เล็กที่สุด ฯลฯ เครื่องมือยังรองรับการสร้างไฟล์ Cubemap, อาร์เรย์พื้นผิว 2D/Cubemap เครื่องกำเนิด MIPMAP อัตโนมัติคุณสามารถสร้างไฟล์พื้นผิว LDR หรือ HDR ที่ไม่บีบอัดได้และป้อนเข้ากับคอมเพรสเซอร์
basisu -comp_level 2 x.png
ในภาพที่หายากบางภาพ (ภาพที่มีการไล่ระดับสีฟ้าสีฟ้ามาผูก) คุณอาจต้องเพิ่มการตั้งค่า ETC1S -comp_level
ซึ่งอยู่ในช่วงตั้งแต่ 1,6 สิ่งนี้จะควบคุมปริมาณความพยายามโดยรวมที่ Encoder ใช้เพื่อเพิ่มประสิทธิภาพโค้ด ETC1S และสตรีมข้อมูลที่บีบอัด comp_level ที่สูงขึ้นจะช้าลง อย่างมาก
basisu x.png -comp_level 2 -max_endpoints 16128 -max_selectors 16128
basisu -tonemap x.exr
basisu -compare a.png b.png
basisu -compare_hdr a.exr b.exr
ดูข้อความช่วยเหลือสำหรับรายการตัวเลือกบรรทัดคำสั่งของเครื่องมือที่สมบูรณ์ เครื่องมือบรรทัดคำสั่งเป็นเพียง wrapper บางที่ด้านบนของไลบรารี ENCODER
คุณสามารถใช้เครื่องมือบรรทัดคำสั่งหรือเรียกรหัส transcoder โดยตรงจากรหัส JavaScript หรือ C/C ++ เพื่อ decompress .ktx2/.basis ไฟล์ไปยังข้อมูลพื้นผิว GPU หรือข้อมูลภาพที่ไม่บีบอัด หากต้องการแกะไฟล์. ktx2 or.basis ไปยังไฟล์. png/.exr/.ktx/.dds หลายไฟล์:
basisu x.ktx2
ใช้ตัวเลือก -no_ktx
และ -etc1_only
/ -format_only
ตัวเลือกเพื่อแกะไฟล์ให้น้อยลง
-info
และ -validate
จะแสดงข้อมูลไฟล์และไม่ส่งออกไฟล์ใด ๆ
ไฟล์ mipmapped, cubemap หรืออาร์เรย์พื้นผิว. ktx/.dds จะอยู่ในรูปแบบพื้นผิวที่บีบอัด GPU หลากหลายรูปแบบ (PVRTC1 4BPP, ETC1-2, BC1-5, BC7 ฯลฯ ) น่าเสียดายที่ (ณ ปี 2024) ยังไม่มีเครื่องมือดู. KTX หรือ. DDS ที่ถูกต้องและรองรับรูปแบบพื้นผิว GPU ทุกรูปแบบที่เราสนับสนุนได้อย่างถูกต้องและน่าเชื่อถือ ไฟล์ BC1-5 และ BC7 สามารถดูได้โดยใช้คอมเพรสเซอร์ของ AMD, ETC1/2 โดยใช้เครื่องมือการบีบอัดพื้นผิวของมาลีและ PVRTC1 โดยใช้ PVRTextool ของ Imagination Tech RenderDoc มีตัวแสดงไฟล์พื้นผิวที่เป็นประโยชน์สำหรับหลายรูปแบบ Mac OSX Finder รองรับไฟล์. EXR และ. KTX ในรูปแบบ GPU ต่างๆ Windows 11 Explorer สามารถดูตัวอย่างไฟล์. DDS ผู้ชม OpenHDR ออนไลน์มีประโยชน์สำหรับการดูไฟล์ภาพ. EXR/.HDR
ไดเรกทอรี 'WebGL' มีการสาธิต WebGL แบบง่ายสี่แบบที่ใช้ Transcoder และคอมเพรสเซอร์ที่รวบรวมกับ WASM ด้วย Emscripten การสาธิตเหล่านี้ออนไลน์ที่นี่ ดูรายละเอียดเพิ่มเติมในไฟล์ readme ที่นี่
ทั้ง transcoder และ encoder อาจถูกรวบรวมโดยใช้ emscripten ไปยัง WebAssembly และใช้บนเว็บ ชุดของ JavaScript wrappers ไปยังตัวแปลงสัญญาณที่เขียนใน C ++ พร้อมส่วนขยาย emscripten ตั้งอยู่ใน webgl/transcoding/basis_wrappers.cpp
เสื้อคลุม JavaScript รองรับคุณสมบัติและโหมดเกือบทั้งหมดรวมถึงวิดีโอพื้นผิว ดูไฟล์ readme.md และ cmakelists.txt ใน webgl/transcoder
และ webgl/encoder
ในการสร้างตัวแปลงสัญญาณ WASM หลังจากติดตั้ง Emscripten:
cd webgl/transcoder/build
emcmake cmake ..
make
เพื่อสร้างตัวเข้ารหัส WASM:
cd webgl/encoder/build
emcmake cmake ..
make
มีการเข้ารหัสเว็บการเข้ารหัส/transcoding สองอย่างง่าย ๆ ซึ่งอยู่ใน webgl/ktx2_encode_test
และ webgl/texture_test
ซึ่งแสดงวิธีการใช้ JavaScript Wrapper API ของตัวเข้ารหัสและ Transcoder
ตัวอย่างง่ายๆบางอย่างที่แสดงวิธีเรียก C ++ encoder และ Transcoder Library API โดยตรงอยู่ใน example/examples.cpp
ดูวิกิที่นี่
คุณสามารถดาวน์โหลดและติดตั้งพื้นฐาน Universal โดยใช้ตัวจัดการการพึ่งพา VCPKG:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install basisu
พอร์ตสากลพื้นฐานใน VCPKG ได้รับการปรับปรุงให้ทันสมัยโดยสมาชิกในทีม Microsoft และผู้มีส่วนร่วมในชุมชน หากเวอร์ชันล้าสมัยโปรดสร้างปัญหาหรือดึงคำขอบนที่เก็บ VCPKG (9/10/2024: การสนับสนุน UASTC HDR ยังไม่สามารถใช้ได้ที่นี่)
ไลบรารี transcoder และ core encoder คือ Apache 2.0 Transcoder ใช้ห้องสมุดหรือการพึ่งพาของบุคคลที่สาม ดูใบอนุญาต
ไลบรารี ENCODER คือ Apache 2.0 แต่ใช้ประโยชน์จากโมดูลโอเพนซอร์สที่ 3 (ใน 'ENCODER/3RDPARTY' และในไดเรกทอรี 'ZSTD') เพื่อโหลด. QOI, .DDS, .EXR แกะบล็อกพื้นผิว ASTC ดูใบอนุญาตและโฟลเดอร์. Reuse
ที่เก็บได้รับการอัปเดตให้สอดคล้องกับเครื่องมือตรวจสอบใบอนุญาตนำกลับมาใช้ซ้ำ (https://reuse.software/) ดูไดเรกทอรีย่อย. .reuse
ออนไลน์. exr hdr image file viewer
Windows HDR + WCG Image Viewer - ตัวแสดงภาพ HDR ที่แท้จริงสำหรับ Windows ดู GitHub Repo ด้วย
RenderDoc
AMD Compressonator
Directxtex ของ Microsoft
pvrtextool
เครื่องมือการบีบอัดพื้นผิวของมาลี - ตอนนี้เลิกใช้แล้ว
สำหรับลิงก์เอกสารและเครื่องมือ/ไลบรารีที่มีประโยชน์มากขึ้นโปรดดูที่ส่วนท้ายของข้อมูลจำเพาะพื้นผิว UASTC HDR
อีเมล: info @ binomial dot info หรือติดต่อเราทาง Twitter
นี่คือหน้าผู้สนับสนุน Wiki