ทำไมเอ็นจิ้นเกมส่วนใหญ่ไม่ใช้ gif สำหรับพื้นผิวเคลื่อนไหว?


28

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

อะไรคือข้อเสียของการใช้ Gif และข้อดีของ Animation Sheet มีมากกว่า Gif


7
จากนั้นบางทีคุณควรตั้งคำถามใหม่กับคำถามเช่น "ทำไมโปรแกรมเกมหลัก ๆ ถึงไม่ใช้ gif สำหรับพื้นผิวแบบเคลื่อนไหว" อย่างที่ฉันรู้เพราะเหตุผลที่ดี ฉันคิดว่าจะให้คะแนนทางเทคนิคแก่คุณว่าทำไมพวกเขาถึงไม่ได้ใช้กับคำถามที่ดีกว่าซึ่งไม่เหมาะสำหรับไซต์ SE
Coburn

39
One advantage Gifs have over Animation Sheets is that you don't have to think about frames going too fast or too slowทำไมล่ะ คุณพึ่งพาสิ่งที่จะทำให้สมมติฐานที่ว่า? ห้องสมุด? ข้อกำหนดรูปแบบไฟล์? จะเป็นไฟล์ GIF ยังคงเป็นเพียงข้อมูลที่คุณยังคงต้องมีรหัสที่จะตีความมัน (ทำให้มันที่ความเร็วที่ถูกต้อง)
hoffmale

13
สิ่งที่ hoffmale พูด GIF นั้นไม่ใช่เวทมนตร์ แอนิเมชันของพวกเขายังคงต้องได้รับการควบคุมและดำเนินการโดยซอฟต์แวร์บางตัวรวมถึงเวลาและในกรณีนี้ซอฟต์แวร์นั้นเขียนขึ้นโดยคุณ จริงๆแล้วฉันไม่คาดหวังว่ารหัสการจัดการแผ่นข้อมูลแอนิเมชันของคุณจะแตกต่างจากรหัสการจัดการ GIF ของคุณเป็นจำนวนมาก
การแข่งขัน Lightness กับโมนิก้า

12
ความแตกต่างเพียงอย่างเดียวระหว่าง spritesheet และรหัส GIF ของคุณคือรหัส GIF ของคุณจะแปลง GIF เป็น spritesheet แล้วเรียกรหัส spritesheet;)
MickLH

6
gif ไม่มีข้อได้เปรียบใด ๆ หากคุณต้องการการบีบอัดระหว่างเฟรมดังนั้น gif จะมีประสิทธิภาพน้อยกว่าตัวแปลงสัญญาณวิดีโอที่เหมาะสมประมาณ 30 เท่าในขณะที่ยังให้คุณภาพที่แย่ลง (สำหรับเนื้อหาที่เหมือนจริง)
Sarge Borsch

คำตอบ:


91

ข้อเสีย GIF:

  • จานสีที่มี จำกัด มากซึ่งโดยทั่วไปจะมี 256 สีที่มีความสวยงามน่าเกลียด ( ใช่คุณสามารถมีมากกว่า 256 สีในภาพเคลื่อนไหว GIFแต่นี่ไม่ใช่เรื่องแปลก)
  • GPUs ไม่รองรับการบีบอัด GIF ในฮาร์ดแวร์ (หมายความว่าคุณจะต้องนำมันออกจาก CPU)
  • คุณจะได้รับเพียงหนึ่งสีเพื่อความโปร่งใส (ยกเว้นการใช้การประมวลผลที่กำหนดเอง)
  • ไม่มีการเข้าถึงแบบสุ่ม เฟรม GIF ก่อนหน้านี้ทั้งหมดจะต้องอ่านและคลายการเข้าถึงเฟรม
  • ถูกบีบอัด คุณต้องมีฟังก์ชั่นการคลายการบีบอัดโดยเฉพาะในรหัส คุณไม่สามารถเลือกอัลกอริทึมการบีบอัด (ดีกว่า) ที่แตกต่างกันได้ (ใช่GIF ที่ไม่มีการบีบอัดมีอยู่ด้วยเช่นกันแต่นี่เป็นเรื่องผิดปกติ)

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

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

ข้อความข้างต้นทำให้เข้าใจผิด การซิงค์ GIF fps กับเกม fps จริงนั้นไม่แตกต่างจากการซิงค์ภาพเคลื่อนไหว sprite ที่กำหนดเอง ในทั้งสองกรณีคุณมีการตั้งค่าเดียวกัน - รายการของเฟรม, framerate ที่ต้องการและแสดงเหตุการณ์ ไม่มีผงวิเศษใน GIF - คุณจะต้องขยาย GIF เป็น spritesheet ต่อไปซึ่งเอาชนะวัตถุประสงค์

แน่นอนว่าเอ็นจิ้นเกมบางเกมอาจซ่อนปัญหา GIF บางส่วนไว้ด้านหลังม่าน แต่ก็สามารถทำได้ด้วย spritesheets ในวิธีที่ดีกว่า

กล่าวว่ามีบางกรณีที่ GIF สามารถทำงานได้ เช่น HTML / CSS GUIs แต่สิ่งเหล่านี้ค่อนข้างหายากและต้องการทรัพยากรด้วยตนเอง


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

3
@Erik แน่นอน GIF ทั่วไปรองรับสีได้มากถึง 256 สีซึ่งสามารถทำเครื่องหมายเพียง 1 สีเพื่อให้โปร่งใส ต่างจากรูปแบบอื่น ๆ โดยทั่วไปความโปร่งใสจะมีช่วงกว้างกว่ามาก
Kromster พูดว่าสนับสนุน Monica

@Kromster ที่จริงแล้วไซต์ที่มีความชำนาญด้านทรัพยากรนั้นใช้กลไกการเคลื่อนไหวแบบกำหนดเองสำหรับภาพเคลื่อนไหวเช่นbackground-imageภาพเคลื่อนไหวตำแหน่งCSS ที่ภาพเคลื่อนไหวนั้นมีความคลาดเคลื่อนบนภาพขนาดใหญ่หนึ่งภาพซึ่งจะถูกย้ายโดยออฟเซ็ต
Tomáš Zato - Reinstate Monica

@ TomášZato True ขออภัยฉันระบุเป็นอย่างอื่นหรือไม่
Kromster พูดว่าสนับสนุน Monica

2
@ luk32 นี่เป็นข้อเสียเปรียบเพราะมีวิธีการบีบอัดที่ดีกว่าการบีบอัด GIF แบบเก่ามาก ดังนั้นคุณอาจใช้การบีบอัด GIF ที่ไม่ได้ผลหรือการบีบอัดสองครั้ง (โปรดทราบว่าการบีบอัดข้อมูลที่บีบอัดแล้วโดยทั่วไปจะทำให้มีขนาดใหญ่ขึ้นด้วย)
Kromster พูดว่าสนับสนุน Monica

32

ในการใช้ไฟล์ภาพใด ๆ เป็นพื้นผิวในเกมจะต้องมีพื้นผิวที่สร้างขึ้นบน GPU และข้อมูลพิกเซลในไฟล์ภาพจะต้องโหลดเข้ากับพื้นผิวนั้น

GPU ไม่รองรับคุณสมบัติหลายอย่างที่ไฟล์ภาพใน CPU รองรับ พวกเขาไม่สนับสนุนการบีบอัด JPG พวกเขาไม่สนับสนุนการบีบอัด PNG และมีการอ้างอิงถึง GIF โดยเฉพาะพวกเขาไม่สนับสนุนการเคลื่อนไหวอัตโนมัติ

ดังนั้นแม้ว่าคุณจะใช้ไฟล์ GIF คุณก็ยังต้องเขียนแอนิเมชันและรหัสกำหนดเวลาของคุณเอง GIF ไม่ได้ให้อะไรคุณ


30
โปรดทราบว่า "CPU" ไม่รองรับสิ่งเหล่านั้นเว็บเบราว์เซอร์และระบบปฏิบัติการทำ
253751

7
ยังไม่มีใครเขียนเว็บเบราว์เซอร์ GPGPU เลย
Camille Goudeseune

7
@CamilleGoudeseune คุณหัวเราะ ฉันร้องไห้.
3Dave

13

GIF มีจานสีที่ จำกัด (255) คุณต้องแยกวิเคราะห์และสร้างภาพเคลื่อนไหว GIF ด้วย ดังนั้นจึงไม่มีความก้าวหน้าในด้านเวลาและด้านเทคนิคของรูปแบบ


4
256 ถ้าคุณไม่ต้องการความโปร่งใส 255 ผลอย่างอื่น
CVN

@ MichaelKjörlingยังคง 256 ด้วยความโปร่งใส - เพียงหนึ่งในสีที่ถูกกำหนดเป็น "โปร่งใส" ฉันเชื่อว่าข้อมูลถูกเก็บไว้ในส่วนหัว
3Dave

@DavidLively ดังนั้น "มีประสิทธิภาพ" ยังมีสีอยู่ แต่ไม่สามารถใช้เป็นสีทึบได้
CVn

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