Bagaimana saya bisa menerapkan sprite 2D pra-render yang dapat menghadapi segala arah?

28

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?

Kyle Lin
sumber
2
Teknik yang Anda maksud disebut "Billboarding", omong-omong.
Weckar E.

Jawaban:

45
  1. Biasanya ada kurang dari 360 arah. Kasus umum adalah 8 atau 16. Animasi juga cukup pendek.

  2. 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.

  3. 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:

masukkan deskripsi gambar di sini

Kromster berkata mendukung Monica
sumber
4
Keseimbangan render daya / waktu versus ruang penyimpanan dan waktu pengunduhan.
M. Mimpen
3
Apa itu "atlas"? Ada tautan?
BЈовић
7
@ BЈовић Cari "Atlas Tekstur". Itu konsep yang sangat umum.
Kromster berkata mendukung Monica
2
Mungkin perlu dicatat bahwa dalam diskusi tentang teknik ini oleh pengembang Blizzard North, mereka pada dasarnya sampai pada kesimpulan bahwa itu adalah ukuran kesenjangan yang aneh untuk menangani momen canggung dalam kemampuan grafis PC, dan bahkan kemudian itu tidak benar-benar akhirnya menjadi berharga. Ada sebuah wawancara tentang hal itu, dan pada akhirnya butuh begitu banyak waktu untuk merender ulang semuanya sehingga kesimpulan umumnya adalah bahwa itu bukan pendekatan yang hebat (dan permainan mereka berikutnya pasti 3D).
KRyan
1
@Ryan tambahan yang bagus! Saya kira itu karena jumlah NPC dan peralatan VAST di D2. Untuk platform CoC dan seluler, itu keseimbangan yang berbeda.
Kromster berkata mendukung Monica
8

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.

Peter
sumber
2
Anda juga dapat beralih dari papan iklan ke model 3d jika Anda memperbesar dekat ke objek tertentu - jadi 3d dekat dan kemudian menggunakan 2d lebih cepat ketika Anda hanya memiliki banyak berlarian di latar belakang. Menangani transisi dengan lancar bisa sulit.
Tim B
@TimB Yang sangat bagus karena Anda akhirnya memberikan resolusi tinggi dan menggunakan gambar untuk resolusi rendah.
Peter
2

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.

afaulconbridge
sumber
5
Kompresi bekerja secara berbeda untuk GPU daripada untuk jpeg, terutama GPU seluler di perangkat yang ditulis untuk Clash of Clans. en.wikipedia.org/wiki/S3_Texture_Compression Dengan kata lain: latar belakang kosong adalah 100% tidak relevan dengan kompresi tekstur.
Peter
-2

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.

Graham
sumber
Tidak ada ukuran yang berbeda. Render baru saja naif tetangga terdekat meningkatkan / turun sesuai kebutuhan.
R ..
@R .. Terima kasih atas koreksinya. Sudah beberapa tahun sejak saya memainkannya! :)
Graham
1
Maaf, tapi ini tidak menjawab pertanyaan "Bagaimana saya bisa menerapkan .." sama sekali.
Kromster berkata mendukung Monica
@Kromster Jadi untuk pertanyaan yang menanyakan "bagaimana cara menerapkan ini?", Saya tidak menjawab pertanyaan dengan gambaran umum cepat dari permainan klasik yang mengimplementasikannya (8 sudut, bukan 360), dan menyebutkan bahwa cara mereka melakukannya adalah khususnya mudah dilihat ketika Anda memainkannya, karena OP rupanya tidak tahu di Clash? Dan mencatat perbedaan antara kasus umum dan kasus spesifik dari pandangan isometrik? Saya akan dengan bebas mengakui bahwa jawabannya tidak sebagus jawaban Anda, tetapi ada perbedaan antara jawaban berkualitas rendah dan tidak menjawab pertanyaan.
Graham