ทำไมเอ็นจิ้นเกมส่วนใหญ่ไม่ใช้ 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.