หลีกเลี่ยงการบีบอัดทรัพยากรสองเท่า


13

ฉันใช้.pngs สำหรับพื้นผิวของฉันและใช้ระบบไฟล์เสมือนใน.zipไฟล์สำหรับโครงการเกมของฉัน ซึ่งหมายความว่าพื้นผิวของฉันถูกบีบอัดและแตกสองครั้ง การแก้ไขปัญหาการบีบอัดสองครั้งนี้มีอะไรบ้าง ทางออกหนึ่งที่ฉันเคยได้ยินคือใช้.tgaพื้นผิว แต่ดูเหมือนว่านานมาแล้วตั้งแต่ฉันเคยได้ยินเรื่องนี้ อีกวิธีหนึ่งคือใช้การคลายการบีบอัดที่GPUและเนื่องจากรวดเร็วให้ลืมค่าใช้จ่าย


2
เกี่ยวข้อง: หากคุณใช้ jpegs โปรแกรมซิปจำนวนมากที่มีรูปแบบของตัวเองสามารถบีบอัดได้ถึง 20% ดังนั้นจึงไม่จำเป็นว่าจะแย่ขนาดนั้น ประเด็นในการบีบอัดสองครั้งที่คุณกังวลมากที่สุดคืออะไร? ใช้เวลานานเกินไปหรือไม่ รูปแบบจำนวนมากแม้จะเก็บข้อมูลที่ถูกบีบอัดไว้แล้วเพียงแค่ใช้คำต่อคำและไม่ทำการคลายการบีบอัดใด ๆ เลย
PlasmaHH

คำตอบ:


17

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

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

รูปแบบ TGA รู้โหมดที่แตกต่างมากมายซึ่งบางอันถูกบีบอัดและบางโหมดไม่ เมื่อคุณไม่ต้องการใช้การบีบอัดตรวจสอบให้แน่ใจว่าคุณเลือกที่ถูกต้องในตัวเลือกการส่งออกของตัวแก้ไขกราฟิกที่คุณใช้ รูปแบบภาพอื่นที่ไม่บีบอัดคือ BMP (Windows Bitmap)

นี่คือการทดสอบที่ฉันทำ ฉันเพิ่มรูปภาพเดียวกัน (เนื้อหาจากโครงการปัจจุบันของฉัน) ในรูปแบบที่แตกต่างกันหลายครั้งไปยังไฟล์ zip- บางภาพที่มี "deflate" - อัลกอริทึมเกี่ยวกับความแรงปกติและอีกภาพหนึ่งมี "store" ขออภัยสำหรับ GUI ภาษาเยอรมัน คอลัมน์ที่ 2 ไม่มีการบีบอัดขนาดคอลัมน์ที่ 3 คืออัลกอริธึมการบีบอัดและคอลัมน์ที่ 4 บีบอัดขนาด

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

อย่างที่คุณเห็นการเข้ารหัสแบบ deflate PNG นั้นบันทึกเพียงเล็กน้อยเพียง 0.3% ในขณะที่ BMP ที่เข้ารหัสแบบ deflate จะลดลงเหลือหนึ่งในสิบของไฟล์ต้นฉบับซึ่งมีขนาดเล็กกว่ารุ่น PNG มันค่อนข้างทำให้ฉันประหลาดใจ ฉันคาดว่า PNG จะเล็กลงเนื่องจากวิธีการบีบอัดของ PNG ควรปรับให้เหมาะกับข้อมูลภาพในขณะที่ ZIP ไม่ใช่ คำอธิบายที่น่าจะเป็นคือโปรแกรมแก้ไขรูปภาพ (GIMP) ของฉันได้เพิ่มข้อมูลเมตาลงในไฟล์ PNG จำนวนมากซึ่งไม่ได้ทำเพื่อ BMP

TGA ที่ไม่บีบอัดทำหน้าที่คล้ายกับ BMP เกี่ยวกับขนาดไฟล์ก่อนและหลังซิปในขณะที่การบีบอัดไฟล์ TGA ที่ถูกบีบอัดได้รับการปรับปรุงเพิ่มเติมโดย ZIP แม้ว่าจะไม่มากเท่ากับเวอร์ชันที่ไม่บีบอัด

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

ด้านล่างบรรทัด:เมื่อคุณต้องการหลีกเลี่ยงการบีบอัดสองครั้งในขณะที่ยังมีขนาดไฟล์ต่ำไม่ว่าจะใช้PNGกับStoreอัลกอริทึม zip หรือBMPกับอัลกอริทึมการบีบอัด zip


5
ฉันทำมันกับภาพบางส่วนของฉันและ PNG (ระดับการบีบอัด 9) เอาชนะไฟล์ zip (ระดับการบีบอัดพิเศษ) ของรูปภาพ BMP ตลอดเวลาประมาณ 20% ดังนั้นควรมีผลกระทบเช่นข้อมูลเมตา
Trilarion

3
png มีตัวเลือกการเชื่อมต่อที่ลดการบีบอัด แต่อนุญาตให้ดึงภาพความละเอียดต่ำจากส่วนแรกของไฟล์ภาพ (เช่นเมื่อดาวน์โหลดผ่านการเชื่อมต่อที่มีแบนด์วิดท์ต่ำ) ผนังของคุณมีการใช้งานหรือไม่? นอกเหนือจาก png นั้นใช้การยุบสำหรับการบีบอัดแล้ว
วงล้อประหลาด

ดูเหมือนว่าคุณใช้ตัวบีบอัด png ที่ไม่ดีปล่อยให้ไฟล์ของคุณวิ่งผ่าน PNGOUT และคุณควรได้ผลลัพธ์ที่จะไม่ถูกบีบอัดด้วยไฟล์ bmp ที่บีบอัด
aaaaaaaaaaaa

BMPs หรือ TGA ของคุณ 24-bit หรือ 32-bit? โดยเฉพาะอย่างยิ่ง BMP พวกเขามีแนวโน้มที่จะเป็น 24 บิตและขนาด TGA ที่ไม่มีการบีบอัดแสดงให้เห็นว่านั่นคือ 24 บิต คุณอาจไม่เปรียบเทียบสิ่งที่คล้ายกับที่นี่
Maximus Minimus

@ JimmyShelter ทั้ง TGA และ BMP เป็น 32 บิตพร้อมช่องอัลฟา - ฉันแน่ใจแล้ว
ฟิลิปป์

7

ไม่ต้องกังวลกับมัน

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

http://en.wikipedia.org/wiki/DEFLATE


3
บางครั้งมันเป็นเรื่องง่ายปัญหาที่รับรู้ไม่ได้เป็นปัญหาจริง แม้ว่าในความเป็นจริงแล้วมีค่าใช้จ่ายในการคลายการบีบอัดสองเท่า แต่การบีบอัดแบบไม่บีบอัดเป็นการดำเนินการที่รวดเร็วมากฉันคิดว่าค่าโสหุ้ยจะสามารถวัดได้เท่านั้น
aaaaaaaaaaaa

การบีบอัดข้อมูลจะใช้เวลานานในการรู้หรือไม่ว่าไฟล์นั้นไม่สามารถบีบอัดได้
user253751

ใช่ ฉันไม่รู้ว่าฮิวริสติกแบบทั่วไป. zip บีบอัดใช้เพื่อเลือกการเข้ารหัสของบล็อก แต่มันอาจจะตรงไปตรงมาเหมือนกับการลองเข้ารหัสทั้งหมดและรักษาผลลัพธ์ที่ดีที่สุด ในระหว่างการพัฒนาหากคุณต้องมีข้อมูลในไฟล์. zip คุณอาจต้องการบังคับให้ทุกอย่างใช้storeแทนdeflateการประหยัดเวลาdeflateทุกอย่างสำหรับการวางบิล
รัสเซล Borogove

2

ดูเหมือนจะได้รับคำตอบที่ดีมาก แต่ฉันคิดว่าฉันจะให้อีกครั้ง:

What are the solutions to this double compression problem?

วิธีแก้ปัญหา: ไม่ทำอะไรเลย

เหตุผล: ไม่มีปัญหาระบุ - ใช่คุณกำลังบีบอัดข้อมูลสองครั้ง แต่ทำไมคุณกังวลเกี่ยวกับเรื่องนี้? ขนาดข้อมูลใหญ่เกินไปหรือไม่ การบีบอัดช้าเกินไปหรือไม่ สิ่งนี้มีความสำคัญมากกว่าหรือน้อยกว่าคุณสมบัติหลายสิบประการที่คุณสามารถเพิ่มปรับแต่งทดสอบและ / หรือตรวจแก้จุดบกพร่องในเวลานี้ใช่ไหม


การทำสิ่งที่สองครั้งโดยไม่จำเป็นเป็นปัญหาในตัวเอง อย่างน้อยฉันก็รับรู้เช่นนี้ แต่แน่นอนคุณพูดถูกด้วยคำแนะนำของคุณเช่นกัน ทั้งความเร็วหน่วยความจำและความเร็วในการบีบอัดอาจเป็นปัญหาแม้ว่าจะไม่ใช่ในกรณีนี้เนื่องจากฉันไม่ได้เขียนเกมเชิงพาณิชย์
user1095108

ฉันเป็นนักพัฒนาเกมระดับมืออาชีพและฉันสามารถรับรองคุณได้หากไม่มีปัญหาเรื่องประสิทธิภาพการทำงานที่เป็นเอกสารจริงเราไม่ต้องกังวลอีกต่อไปเกี่ยวกับเรื่องนี้ - ต้องใช้เงินซื้อ 0.99 เหรียญสหรัฐหรือการแสดงผลโฆษณาจำนวนมาก ชั่วโมงในการแก้ไขปัญหานี้อย่างถูกต้อง การทำสิ่งที่สองไม่ใช่ปัญหา แต่อาจไม่มีประสิทธิภาพ แม้ว่าในกรณีนี้คุณไม่ได้ทำสิ่งเดียวกันสองครั้ง แต่คุณมีข้อมูลภาพที่ถูกจัดเก็บเป็น PNG สำหรับการบีบอัดและไฟล์ทั้งหมดที่ถูกเก็บถาวรไว้ด้วยกัน
NPSF3000

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

ถ้าอย่างนั้นคุณใช้เวลา 2 สัปดาห์กับเดือนใดที่ใช้ Deflate บน GPU? แล้วคุณจะรู้ว่าคุณกำลังจะติดตั้งบนแพลตฟอร์ม X มากกว่า Y และทำลายอัลกอริทึมของคุณผ่าน Z หากคุณต้องการสร้างเกม FOCUS ON MAKING เกมไม่ต้องกังวลกับสิ่งที่ไม่จำเป็นเช่นประสิทธิภาพลดลง
NPSF3000

เมื่อคุณรู้ว่าอัลกอริทึม (อีกครั้ง) การใช้มันควรจะง่าย สแน็ปไม่ใช่ 2 สัปดาห์หรือเดือน นั่นคือสิ่งที่ฉันอยากจะพูด มันมีมาตั้งแต่ยุคแปดสิบลงทุนในบางครั้งมันอาจจะคุ้มค่า
user1095108

1

หากคุณใช้รูปแบบพิเศษเช่น PNG และ OGG คุณไม่จำเป็นต้องบีบอัด ZIP

PNG, OGG และรูปแบบที่บีบอัดอื่น ๆ จะไม่เล็กลงนักโดยบีบอัดอีกครั้งในรูปแบบ ZIP PNG ที่บีบอัด 100MB ยังคง ~ 100MB

สคริปต์ไฟล์กำหนดค่าและรูปแบบข้อความอื่น ๆ ได้รับประโยชน์อย่างมากจากการบีบอัดอย่างไรก็ตามโดยทั่วไปแล้วมันมีขนาดเล็กเมื่อเปรียบเทียบกันพวกเขาไม่เก็บข้อมูลจำนวนมาก หากเกมของคุณมีขนาด 100MB ไฟล์ข้อความอาจสร้าง 1MB ของเกมทั้งหมดแม้ว่าคุณจะสามารถสร้างได้ 100KB ผ่านการบีบอัดก็ตามคุณก็จะได้รับรางวัลเพียง 900KB น้อยกว่า 1% ซึ่งคุ้มค่ากับความพยายาม

คุณอาจต้องการใช้ระบบไฟล์โดยตรงแทนที่จะใช้ระบบไฟล์เสมือนและใช้ซิป มันจะทำให้การปะแก้ง่ายมาก: คุณสามารถสลับไฟล์ใดก็ได้ที่คุณแก้ไข


2
บางครั้งไม่มีทางเลือกเนื่องจากพิจารณาว่าจะใช้.zipไฟล์หรือไม่ ตัวอย่างเช่นบนแพลตฟอร์ม Android ที่.apkเป็น.zipไฟล์ซึ่งอาจจะมีทรัพยากร
user1095108

3
นอกจากนี้ยังมีข้อดีที่แน่นอนในการใช้การเก็บถาวรและไฟล์ ZIP ให้ทั้งการบีบอัดและโครงสร้างการเก็บ
MrCranky

ใช่ฉันรู้ว่าฉันแค่บอกว่าการใช้ระบบไฟล์เนทิฟมีข้อดีเช่นกัน ฉันเป็นผู้ให้การสนับสนุน "เรียบง่าย"
API-Beast
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.