Saya telah Googling bagaimana game seperti Clash of Clans merender pasukan mereka, dan tampaknya mereka melakukan pra-rendering model 3D ke lembar sprite 2D sebelum runtime, dan merender gambar 2d tersebut pada saat runtime. Namun, pasukan di Clash of Clans dapat menghadapi segala arah.
Dalam permainan saya yang serupa, jika saya membuat gambar untuk setiap orientasi (0-360 derajat) untuk setiap jenis pasukan (ada 18 jenis) di setiap frame dalam animasi mereka, mereka harus menghasilkan sejumlah besar gambar. Saya tidak bisa membayangkan ini yang dilakukan pengembang lain, jadi bagaimana saya bisa melakukan ini?
Jawaban:
Biasanya ada kurang dari 360 arah. Kasus umum adalah 8 atau 16. Animasi juga cukup pendek.
Otomasi adalah teman Anda. Tulis skrip Blender / 3DMax / etc untuk memuat model dari daftar, render dalam setiap frame yang diperlukan dan arah ke gambar. Beri tag pada gambar berdasarkan konten dan atur dari game.
Kemas semuanya ke dalam tekstur atlas (alias sprite sheet) untuk akses yang lebih cepat.
Pada akhirnya, Anda akan berakhir dengan beberapa ribu sprite, yang dikemas dengan rapi menjadi hanya selusin atlas. Bukan masalah besar;)
Saya tidak dapat menemukan gambar dari CoC, tetapi di sini adalah Diablo II, yang menggunakan pendekatan yang sama untuk animasi karakter. Misalnya serangan melee Amazon:
sumber
Ingat juga resolusi rendah dari gambar-gambar ini. Ada beberapa hal lagi yang dapat Anda lakukan untuk menghemat ruang, meskipun saya tidak tahu yang mana yang digunakan oleh Clash of Clans:
Anda dapat membuat bias posisi pasukan untuk menghadapi arah standar (N, E, S, W, NE, SE, SW, NW) lebih sering daripada tidak, kemudian optimalkan hanya untuk arah standar.
Anda dapat melakukan pendekatan gabungan, di mana Anda melakukan pra-render hanya beberapa arahan. Selama bingkai, Anda dapat membuat pasukan yang tidak cocok dengan gambar yang ada, atau menggunakan gambar terdekat jika Anda kehabisan waktu.
Gunakan simetri kiri / kanan bila memungkinkan untuk memotong jumlah frame yang disimpan menjadi dua.
Anda dapat memprioritaskan animasi tertentu seperti berjalan dan beristirahat, menyimpan lebih banyak arahan dan bingkai untuk ini. Kemudian kehilangan prioritas animasi lain, seperti mengayunkan pedang, tempat Anda menyimpan lebih sedikit arah dan bingkai (saya sarankan menjaga lebih banyak arah untuk frame pertama dan terakhir dari ayunan).
Anda dapat memalsukan petunjuk yang tersisa dengan menggunakan gambar terdekat lalu merentangkannya.
Secara keseluruhan, kita mungkin berbicara tentang 18 unit, hingga 8 arah, mungkin 2 detik animasi pada 20 frame per detik, rata-rata 64x64 piksel, dan sekitar 2 byte per piksel. Itu 18x2x20x64x64x2 = 50 MB. Mereka mungkin juga menskala jumlah arah, resolusi, dan jumlah frame berdasarkan kemampuan perangkat dan jumlah unit yang digunakan pada peta.
sumber
Selain jawaban @romster, perhatikan bahwa gambar sering dikompres secara signifikan, dan dalam gambar "atlas" besar di mana ada banyak elemen berulang (misalnya latar belakang kosong) kompresi sangat signifikan. Jadi "ukuran" akhir gambar bukan hanya perkalian lurus dari ukuran gambar individu.
sumber
Sebagai contoh klasik, saya sarankan Anda mengunduh Doom asli, yang menggunakan sprite 2D dalam lingkungan pseudo-3D. Sprite memiliki 8 arah menghadap (relatif terhadap sudut pandang pemain), dan dari memori sekitar 8 ukuran yang berbeda ketika mereka semakin dekat. Ini sangat terlihat, tetapi cukup bisa diterima untuk gameplay. Di Clash atau game yang menampilkan isometrik lainnya, tentu saja tidak perlu mempertimbangkan jarak.
sumber