Saya mengembangkan game 2D, dan saya memiliki banyak sprite. Saya menggunakan animasi dan model 3D untuk dirender menjadi 2D, untuk memberi mereka tampilan "Fallout" atau "Diablo". Ini juga lebih mudah daripada menggambar dengan tangan, lol.
Saya harus memotong framerate menjadi 15fps, yang merupakan level terendah yang dapat saya turunkan tanpa membuat mereka memiliki tampilan yang berombak. Namun, itu menyedihkan karena betapa 24 frame terlihat sangat halus.
Ada dua alasan saya melakukan ini:
1) Kurangi ruang HDD. Semakin sedikit gambar, semakin kecil total game saya.
2) Kurangi konsumsi RAM. Semakin sedikit gambar dimuat, semakin besar kemungkinan saya untuk menghindari masalah kembung keterbatasan RAM saya.
Namun, jika ada cara untuk memampatkan gambar di ruang HDD dan RAM, saya akan melakukannya. Saya telah mengujinya sebelumnya, dan sebagian besar tidak menerima perubahan kualitas ketika memberikan dari RGBA8888 ke RGBA5555 dan hanya sedikit hit ketika mengkonversi ke RGBA4444 dalam program TexturePacker saya. Saya tidak melakukan ini saat ini, karena SFML tampaknya menggunakan jumlah memori yang sama terlepas dari jenis gambar .PNG itu. Saya mencari cara untuk memuatnya secara berbeda, tetapi gagal menemukan apa pun pada subjek.
Saya telah membaca banyak tentang cara menangani video game 2D. Konsensusnya luar biasa: Kemas Sprite Anda ke dalam Tekstur yang Lebih Besar untuk kinerja hebat! Jadi saya mengemas sprite kecil saya menjadi spritesheet yang jauh lebih besar menggunakan TexturePacker.
Namun, saya berencana memiliki 10-15 animasi per karakter, 5 arah untuk dipindahkan, dan 15-40 frame per animasi (mungkin rata-rata 24). Dengan 15 animasi, 5 arah, dan rata-rata 24 frame per animasi; Itu adalah 1800 frame individu per karakter. Jika dikemas dalam lembar sprite, itu hanya 75 gambar saja. (Satu lembar sprite per Animasi, per Arah. 15 * 5)
Untuk satu karakter bos besar dalam game, saya tidak bisa menggunakan spritesheet dan harus memprogram cara untuk memuat dalam satu gambar pada satu waktu. Saya tidak tahu apakah saya bisa melakukan ini untuk kinerja.
Untuk karakter, saya sudah mengemasnya dalam spritesheet. Untuk satu karakter berjalan-jalan, ini sepertinya bekerja sebagian besar waktu, meskipun kadang-kadang berhenti. Namun, saya mengaitkannya dengan kode saya yang salah yang menukar tekstur alih-alih membuka semua tekstur untuk karakter itu.
Jika saya melakukan preload tekstur, masuk akal untuk sprite sheet. Saya hanya akan membayangkan itu ide buruk untuk memuat lebih awal 1800 gambar kecil untuk setiap karakter.
Namun, saya membayangkan streaming mereka keluar dan masuk memori satu per satu akan sangat cepat, jadi saya hanya perlu memiliki satu gambar dalam memori pada satu waktu. Bukankah ini berarti bahwa setiap saat saya hanya akan meminta masing-masing karakter mengkonsumsi beberapa KB, bukannya 45 + MB?
Saya membayangkan ini akan membunuh kinerja saya, karena streaming harus sangat cepat (15 gambar masuk dan keluar dari memori dan rendering, per detik) dan meskipun gambar akan sangat kecil-itu mungkin ide yang lebih baik untuk memuat spritesheets karakter ke dalam memori saja. Tapi saya harus mengkode sistem render seperti stream gambar tunggal untuk karakter bos saya yang lebih besar.
Saya telah bereksperimen, tetapi itu bukan proses yang sederhana. Terutama mengingat fakta saya sedang mengerjakan bagian-bagian lain dari mesin permainan yang tidak berurusan dengan grafik sekarang.