Mengapa sebagian besar mesin gim utama tidak menggunakan gif untuk tekstur animasi?

28

Apa yang lebih baik untuk menggunakan Lembar Animasi atau Gif? Satu kelebihan yang dimiliki Gif dibandingkan dengan Lembar Animasi adalah bahwa Anda tidak harus berpikir tentang bingkai yang terlalu cepat atau terlalu lambat karena kode Anda dan pembaruan dalam tanda centang yang tepat.

Apa kerugian menggunakan Gif dan kelebihan Lembar Animasi melebihi Gif?

Arek Żyłkowski
sumber
7
Maka mungkin Anda harus menulis ulang pertanyaan Anda menjadi sesuatu seperti, "Mengapa sebagian besar mesin gim utama tidak menggunakan gif untuk tekstur animasi?" karena mereka tidak umum, setidaknya yang saya tahu, untuk alasan yang baik. Saya pikir itu akan memberi Anda poin teknis tentang mengapa mereka tidak digunakan versus yang merupakan pertanyaan yang lebih baik, yang tidak sesuai untuk situs 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 slowKenapa begitu? Apa yang Anda andalkan untuk membuat asumsi itu? Perpustakaan? Spesifikasi format file? File gif masih berupa data, Anda masih memerlukan kode untuk mengartikannya (render dengan kecepatan yang benar)
hoffmale
13
Apa kata hoffmale. GIF bukanlah sihir; animasi mereka masih perlu dikendalikan dan dijalankan oleh beberapa perangkat lunak, termasuk waktunya, dan dalam hal ini, perangkat lunak itu ditulis oleh Anda. Jujur saya tidak akan mengharapkan kode penanganan Lembar Animasi Anda berbeda dalam jumlah besar dari kode penanganan GIF Anda.
Lightness Races with Monica
12
Satu-satunya perbedaan antara spritesheet Anda dan kode GIF, adalah bahwa kode GIF Anda akan mengubah GIF menjadi spritesheet dan kemudian memanggil kode spritesheet;)
MickLH
6
gif tidak memiliki kelebihan. jika Anda ingin kompresi antar-bingkai, maka gif kurang lebih 30 kali lebih efisien daripada codec video yang tepat, sementara juga memberikan kualitas yang lebih buruk (untuk hal-hal fotorealistik).
Sarge Borsch

Jawaban:

91

Kelemahan GIF:

  • palet warna yang sangat terbatas, biasanya 256 warna dengan dithering jelek ( ya, Anda dapat memiliki lebih dari 256 warna di GIF animasi , tetapi ini jarang terjadi)
  • GPU tidak mendukung kompresi GIF dalam perangkat keras (berarti Anda harus membukanya di CPU)
  • Anda hanya bisa memilih SATU warna untuk transparansi (kecuali jika menerapkan pemrosesan kustom)
  • tidak ada akses acak. Semua frame GIF sebelumnya harus dibaca dan didekompresi untuk mengakses frame.
  • sedang dikompresi. Anda memerlukan fungsi dekompresi khusus dalam kode. Anda tidak dapat memilih algoritma kompresi yang berbeda (lebih baik). (ya, GIF terkompresi juga ada , tapi ini tidak biasa)

Dengan format khusus, semua item ini dapat diselesaikan dengan sangat cepat. Anda memiliki kontrol lebih besar atas format gambar, kualitas, transparansi, akses acak dan kompresi (termasuk format yang didukung GPU sama seperti DXT). Lebih baik lagi, Anda dapat memprioritaskan fitur yang Anda butuhkan.

Satu kelebihan yang dimiliki Gif dibandingkan dengan Lembar Animasi adalah bahwa Anda tidak harus berpikir tentang bingkai yang terlalu cepat atau terlalu lambat karena kode Anda dan pembaruan dalam tanda centang yang tepat.

Pernyataan di atas menyesatkan. Menyinkronkan GIF fps dengan fps gim sebenarnya tidak jauh berbeda dengan menyinkronkan animasi sprite kustom. Dalam kedua kasus Anda memiliki pengaturan yang sama persis - daftar bingkai, framerate yang diinginkan dan membuat acara. Tidak ada bubuk ajaib di GIF - Anda harus mendekompres GIF menjadi spritesheet, yang mengalahkan tujuannya.

Tentu saja beberapa mesin game mungkin menyembunyikan beberapa masalah GIF di balik tirai, tetapi kemudian, hal yang sama dapat dilakukan dengan spritesheets dengan cara yang lebih baik.

Mengatakan bahwa, ada beberapa kasus di mana GIF dapat bekerja . Misalnya GUI HTML / CSS, tetapi ini cukup langka dan haus sumber daya sendiri.

Kromster berkata mendukung Monica
sumber
Saya tidak mengerti "satu warna untuk transparansi." Apa artinya memiliki banyak warna untuk transparansi? Apakah Anda berbicara tentang berbagai nilai alfa seperti menerapkan gradien transparansi di seluruh tekstur?
Erik
3
@Erik persis seperti itu. GIF umum mendukung hingga 256 warna, dari yang hanya 1 dapat ditandai menjadi transparan. Tidak seperti format lain, di mana transparansi biasanya memiliki jangkauan yang lebih luas.
Kromster berkata mendukung Monica
@Kromster Sebenarnya, situs yang memahami sumber daya menggunakan mekanisme animasi khusus untuk gambar animasi, seperti background-imageanimasi posisi CSS di mana animasi digeser pada satu gambar besar, yang kemudian dipindahkan oleh offset.
Tomáš Zato - Pasang kembali Monica
@ TomášZato Benar. Maaf, apakah saya menyatakan sebaliknya?
Kromster mengatakan mendukung Monica
2
@ luk32 ini adalah kelemahan karena ada metode kompresi yang jauh lebih baik daripada kompresi GIF lama. Jadi, Anda menggunakan kompresi GIF suboptimal atau kompres (de) dua kali (perhatikan bahwa mengompresi data yang sudah dikompres umumnya menghasilkan ukuran yang lebih besar juga).
Kromster mengatakan mendukung Monica
32

Untuk menggunakan file gambar apa pun sebagai tekstur dalam permainan, harus ada tekstur yang dibuat pada GPU dan data piksel dalam file gambar harus dimuat ke tekstur itu.

GPU tidak mendukung banyak fitur yang didukung file gambar pada CPU. Mereka tidak mendukung kompresi JPG, mereka tidak mendukung kompresi PNG, dan dengan referensi khusus untuk GIF, mereka tidak mendukung animasi otomatis .

Jadi, bahkan jika Anda menggunakan file GIF, Anda tetap harus menulis animasi dan kode waktu Anda sendiri. GIF tidak memberi Anda apa-apa.

Maximus Minimus
sumber
30
Perhatikan bahwa "CPU" tidak mendukung hal-hal itu, browser web dan sistem operasi tidak.
user253751
7
Apa, belum ada yang menulis browser web GPGPU?
Camille Goudeseune
7
@CamilleGoudeseune Anda tertawa. Aku menangis.
3Dave
13

GIF memiliki palet warna terbatas. (255) Anda harus mengimplementasikan penguraian dan menghidupkan GIF juga. Jadi tidak ada kemajuan dalam waktu atau dalam aspek teknis format.

Piranha
sumber
4
256 jika Anda tidak memerlukan transparansi, 255 jika tidak efektif.
CVn
@ MichaelKjörling Masih 256 dengan transparansi - hanya satu warna yang dinamai "transparan." Saya percaya bahwa informasi disimpan di header.
3Dave
@DavidLively Karenanya "efektif". Warnanya masih ada, tetapi tidak dapat digunakan sebagai warna buram.
CVn
@Romster ya. Dihapus. Saya dapat memiliki matematika yang bagus.
3Dave