ว่าด้วยเรื่อง Texture Compression Format หรือวิธีบีบอัด Texture ให้เล็กลง by

30
Apr
0

ปกติเราทำเกมลงมือถือ เราอาจจะพบปัญหาเช่น apk ใหญ่เกิน 50MB เอาลง Google Play ไม่ได้ หรือ Memory ถูกกินไปหมดเครื่องโทรศัพท์ ซึ่งส่วนใหญ่แล้วที่กินพื้นที่ไปมากที่สุดก็ไม่ใช่อะไร มาจากรูปภาพที่ใช้ในเกมหรือ Texture ต่างๆ นั่นเอง ดูตามรูปด้านล่างเลย คือตัวอย่าง Inspector เมื่อคลิกที่รูปภาพ

texture_inspect

เปลี่ยน Texture Type เป็น Advanced ก็จะได้ดังรูป

texture_inspect2

เลือกที่ Format จะมีรูปแบบให้เลือกมากมาย (bpp = bytes per pixel)

  • Automatic Compressed – ตัวนี้หากไม่ได้กด Advance มันคือ Compress เฉยๆ ซึ่งจะเลือก RGBA 16 bit ให้อัตโนมัติ ใช้ได้กับรูปภาพทุกรูปแบบ ทุก device และรองรับ Transparent มีข้อเสียคือพวก Gradient สีจะเละมาก โดยสามารถกินพิ้นที่ 2 bpp
  • RGB DXT1 – ใช้สำหรับอุปกรณ์ที่รองรับ Direct X ซะส่วนใหญ่และอุปกรณ์ที่มีชิป Vivante, Nvidia กินพื้นที่ 0.5 bpp
  • RGBA DXT5 - ใช้สำหรับอุปกรณ์ที่รองรับ Direct X ซะส่วนใหญ่และอุปกรณ์ที่มีชิป Vivante, Nvidia กินพื้นที่ 1 bpp ใช้ transparent ได้
  • RGB ETC1 – รองรับในอุปกรณ์ Android ตั้งแต่ 2.3 ขึ้นไปทุกยี่ห้อไม่ว่าจะใช้ชิปเซ็ตใดก็ได้ เรียกว่ามีโอกาสใช้ได้ก็ใช้ไปเลย วิธีนี้มีข้อเสียหลักคือไม่รองรับ Transparent กินพื้นที่ 0.5 bpp
  • RGB PVRTC 2 bits – 0.25 bpp รองรับ ios ทุกรุ่น และ PVR ชิปเป็นหลัก
  • RGBA PVRTC 2 bits – 0.25 bpp รองรับ ios ทุกรุ่น และ PVR ชิปเป็นหลัก
  • RGB PVRTC 4 bits – 0.5 bpp รองรับ ios ทุกรุ่น และ PVR ชิปเป็นหลัก
  • RGBA PVRTC 4 bits – 0.5 bpp รองรับ ios ทุกรุ่น และ PVR ชิปเป็นหลัก
  • RGBA ATC 8 bits – 0.5 bpp รองรับชิปตระกูล Qualcomm
  • RGBA ETC2 8 bits – 1 bpp ชิป Mali จาก ARM
  • RGB + 1-bit Alpha ETC2 4 bits – 0.5 bpp ชิป Mali จาก ARM
  • ASTC ทั้งหลาย – ไม่แนะนำให้ใช้เนื่องจาก เครื่องที่ไม่ support จะกิน memory มากกว่าปกติเสียอีก

กล่าวโดยสรุปแล้วหากเป็นรูปที่ไม่มี transparent ควรใช้ etc1 สำหรับ android และ pvrtc สำหรับ ios ซึ่งสามารถแยกได้จาก setting ใน inspector ของตัว unity เองอยู่แล้ว แต่หากมี transparent อาจเลือกรูปแบบ RGBA สักอันที่ไม่ใช่ ASTC ซึ่งถึงแม้ว่า hardware จะไม่ support แต่ขนาด memory และพื้นที่ apk ที่ใข้ก็จะยังคงเล็กลงอยู่ โดยยังมีข้อเสียอยู่คือ unity จะใช้ software ในการ decode แทน ส่งผลให้การแสดงรูปช้ากว่าปกติ ซึ่งถ้ารูปที่โหลดติดหน้า Loading อยู่พอดีอยู่แล้วก็อาจจะไม่เป็นไรนัก ทั้งนี้ขึ้นกับผู้พัฒนาจะตัดสินใจเองว่าจะยอมให้รูปโหลดช้าลงเล็กน้อยแลกกับพื้นที่เก็บเล็กลงหรือไม่ หากยอมไม่ได้จริงๆ คงจะเหลือแค่ RGBA 16 bit เท่านั้นที่พอจะทำได้ แล้วแต่ตัดสินใจครับ ขอให้โชคดี :)

Enjoy this article?

Consider subscribing to our RSS feed!

ไม่มีความเห็น

ยังไม่มีความเห็น

ใส่ความเห็น

RSS feed for comments on this post

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน