Apa perbedaan antara Sprite dan Tekstur?

27

Saya memiliki tugas untuk Universitas, dan tugas saya adalah membahas tekstur yang digunakan dalam video game, dan bagaimana mereka berkembang.

Pertanyaan utama saya adalah, apa perbedaan mendasar antara menggunakan sprite, atau menggunakan metode tekstur lainnya?

Setelah melakukan sedikit riset sendiri, saya sepertinya cenderung bahwa Sprite menyimpan gambar dalam satu file, dan dapat digunakan untuk animasi dll. Sekarang, dengan permainan modern, sprite yang saya percaya cenderung kurang digunakan seiring kemajuan teknologi dan tekstur lain yang tersedia seperti pemetaan benjolan. Meskipun sprite masih digunakan sampai sekarang untuk mengakomodasi fitur seperti bar kesehatan atau tekstur jarak jauh.

Tapi apa keuntungan utama menggunakan tekstur, dibandingkan sprite?

jlw8
sumber
5
Satu adalah minuman dan yang lainnya tidak (saya minta maaf atas lelucon ini)
CAD97

Jawaban:

37

Pada akhirnya, sprite dan tekstur hanyalah gambar - blok data warna raster (meskipun kadang-kadang kita sedikit mendorong batas untuk memasukkan data non-gambar ke dalamnya). Perbedaannya terletak pada bagaimana kita menggunakannya.

Kami biasanya menyebut gambar (atau bagian dari gambar yang mengandung banyak bagian terpisah) sebagai "sprite" jika tujuan render yang dimaksudkan akan ditarik langsung ke kisi 2D layar, tanpa distorsi perspektif. Jadi apa yang Anda lihat dalam permainan yang berjalan pada dasarnya adalah apa yang Anda lihat dalam file gambar itu sendiri (terlepas dari efek pewarnaan / pertukaran warna / transparansi). Ini berlaku untuk ubin latar belakang dan karakter / objek interaktif dalam game 2D, kartu "papan iklan" seperti partikel dan gaya rendering pohon & semak yang lebih lama, dan juga elemen antarmuka pengguna dan ikon di game 3D juga.

Sebaliknya, jika kita menggunakan gambar untuk memberikan detail permukaan untuk poligon dari objek 3D yang mungkin digambarkan dalam perspektif, kita biasanya menyebut gambar itu sebagai "tekstur." Nama itu telah terbawa ke penggunaan lain dari data gambar untuk memodulasi rendering sesuatu yang lain, bahkan jika mereka tidak lagi tentang tekstur dalam arti yang dapat Anda rasakan dengan ujung jari Anda - hal-hal seperti refleksi, peta distorsi, overlay, masker, atau penggunaan umum untuk tujuan gambar yang tidak kami rasa penamaannya lebih khusus cenderung disamakan dengan "tekstur" dalam nomenklatur longgar kami.

Itu membuat batas antara keduanya kabur dan tidak terlalu ketat. Jika saya memiliki gambar yang mengandung urutan api dan asap untuk digunakan dalam menggambar partikel papan reklame untuk efek ledakan, saya bisa menyebutnya "spritesheet" atau "tekstur flipbook" secara bergantian. Atau jika saya memiliki gambar tileset yang terdiri dari semua ubin latar belakang untuk game 2D, saya dapat menyebutnya "tekstur atlas" hari ini, dengan analogi dengan tekstur atlas yang dikembangkan untuk game 3D, meskipun data dan penggunaannya dalam game 2D saya tidak bisa dibedakan. dari apa yang orang lain sebut sebagai spritesheet. Jika saya memiliki persegi panjang geometri yang tujuannya adalah untuk menyajikan satu gambar ke layar, saya dapat menyebutnya "quad bertekstur" atau "sprite" tergantung pada apa yang ingin saya tekankan tentang penggunaannya.

(Catat di sini dalam contoh terakhir ini bahwa "sprite" adalah singkatan dari kedua segmen gambar sumber dalam aset game kami, dan contoh entitas permainan yang diberikan yang menggunakan segmen gambar ini - cara lain kami menggunakan terminologi ini sedikit tidak konsisten)

Anda akan menemukan beberapa mesin dan perpustakaan menyandikan perbedaan ini dalam memberikan maksud ke dalam nomenklatur mereka sendiri. Misalnya, di Unity, Anda dapat memilih untuk mengimpor aset gambar sebagai "Sprite" - ini memungkinkan serangkaian opsi tambahan yang umumnya diinginkan untuk gambar UI atau aset game 2D, seperti pengiris & pengepakan spritesheet, dan kemampuan untuk referensi bagian gambar sebagai entitas diskrit dalam pengaturan adegan dan objek Anda. Dalam kasus ini "Sprite" sering berarti "gambar (tekstur) ditambah metadata " - tetapi itu tetap sama dengan tekstur biasa di bawah tenda. Kemasan tambahan adalah kenyamanan sehingga kita tidak perlu melakukan micromanage UV offset dan sejenisnya di mana-mana kita ingin menggunakan gambar;

DMGregory
sumber
Apakah "tekstur" biasanya termasuk atau memungkinkan piksel transparan? Saya akan berpikir tentang objek yang berperilaku sebagai permukaan datar yang dipetakan-pixel yang mengandung piksel transparan sebagai "sprite" terlepas dari apakah permukaannya tegak lurus terhadap sumbu kamera.
supercat
2
Mereka tentu bisa, tanpa melepaskan gelar "tekstur" mereka. Adalah umum untuk melihat orang merujuk pada gambar untuk rendering, katakanlah, daun, atau pagar rantai, sebagai "tekstur dedaunan" atau "tekstur pagar" bahkan jika mereka diberikan dengan alfa-tes / dithered atau transparansi alpha-blended . Kita juga dapat menyebut casing daun "dedaunan sprite" jika itu dibuat sebagai papan iklan menghadap kamera, tetapi tidak biasa untuk menggunakan nama sprite jika digunakan pada geometri perspektif seperti pagar 3D.
DMGregory
Saat merender objek yang dipetakan tekstur buram, mesin rendering tidak perlu khawatir tentang bagaimana bagian dalamnya akan muncul karena permukaan buram akan menyembunyikan bagian dalamnya. Saya akan berpikir bahwa sesuatu seperti pohon atau pagar rantai akan lebih baik dibuat dengan melakukan bagian-bagian yang buram dan kemudian menjadikan bagian-bagian yang sebagian transparan sebagai permukaan terpisah yang sebagian transparan. Meskipun mereka mungkin tidak cocok dengan apa yang oleh sebagian orang disebut "sprite" jika mereka tidak menghadap kamera, mereka juga tidak akan sama dengan objek "normal".
supercat
Memang biasanya itu yang dilakukan. Geometri untuk tiang pagar dan batang diberikan dalam celah buram, dan kemudian geometri untuk pagar pagar dan dedaunan / ranting akan diberikan dalam uji alfa atau lulus alpha-blended sesudahnya.
DMGregory
1
Saya biasanya mendengar "tekstur transparan" atau "tekstur alfa" / "tekstur dengan alfa" - mungkin kadang-kadang "guntingan" / "guntingan tekstur" jika itu merupakan transparansi yang sulit / diuji alpha.
DMGregory
7

Sprite adalah peninggalan dari sejarah game komputer. Pikirkan 8-bit Ataris sekitar ca. 1980. Gambar kecil, biasanya dengan bitmask cakupan (atau warna "transparan" khusus) yang memiliki posisi di layar dan digabungkan ke layar dengan cara tertentu. Dengan lubang di mana ada "lubang" di sprite, sesuai peta cakupan. Biasanya dengan cara "hanya berfungsi", dan dengan cara yang memungkinkan ilusi hal-hal bergerak, biasanya dengan menyimpan dan mengembalikan piksel layar asli yang ditimpa.

Dulu sprite adalah fitur perangkat keras pada komputer, dulu Anda bisa menggambar / undraw dengan konten layar yang disimpan secara otomatis, dulu Anda hanya bisa memiliki jumlah yang sangat terbatas (dan tidak tumpang tindih, ya!) , dan dulunya mereka sangat kecil (seperti 16x16) dan terbatas.

Kursor mouse adalah yang paling dekat dengan sprite saat ini (dan dulunya adalah sprite aktual pada beberapa sistem sampai beberapa ~ 10-15 tahun yang lalu).

Saat ini, tidak ada hal yang benar-benar ada, tetapi kata itu tetap ada. Sprite pada dasarnya adalah gambar 2D kecil yang Anda gambar (komposit) di suatu tempat. Biasanya dengan menggambar quad bertekstur kecil.

Tekstur, di sisi lain, adalah konsep gambar yang dapat dibaca yang digunakan dalam API grafik yang agak lebih modern. Atau, lebih tepatnya, wilayah memori ("buffer" dalam hal API modern) dengan beberapa data tambahan terkait seperti ukuran, yang dapat diambil sampelnya dari beberapa cara. Biasanya, tetapi tidak harus dengan shader yang berjalan pada unit pemrosesan grafis. Biasanya, tetapi tidak harus, dengan koordinat dinormalisasi, dan biasanya tetapi tidak harus dengan penyaringan (dan pemetaan, dan beberapa mode perbatasan tertentu, dan, dan, dan ...).

Dengan demikian, tekstur dapat menjadi sumber data yang Anda gunakan untuk menggambar sprite.

Damon
sumber
3
Sprite yang tepat dilapisi dalam perangkat keras, sehingga data video dalam memori tidak berubah, dan bahkan tidak harus menggunakan mode yang sama (misalnya pada C64, Anda dapat memiliki bitmap sprite di atas latar belakang teks). Objek yang dirender dengan menyimpan bitmap, dan mengganti data disebut BOB (Blitter OBjects).
Simon Richter
1
@SimonRichter: Saya tidak terbiasa dengan C64, yang dianggap sebagai mainan, tetapi Amiga juga memilikinya, 8 di antaranya jika saya ingat dengan benar. Tidak yakin cara kerjanya pada level perangkat keras, tetapi mungkin juga overlay langsung (tampaknya mungkin). Pada ST, sprite A00D/ AOOCopcode pastinya merupakan jenis pengubah framebuffer draw / undraw. BOB, ya, itu ada juga, hal Amiga yang khas. Itu adalah hal yang paling dekat dengan tekstur masa kini, saya kira (ukuran apa pun, unggah ke prosesor grafis satu kali, gambar berkali-kali).
Damon
4

Ini semacam perbandingan apel dan jeruk. Tekstur hanyalah gambar, sedangkan sprite adalah gambar dan cara penggunaannya.

Kami masih menggunakan sprite untuk game 2d, dan mereka muncul di game 3d dalam efek partikel. Saat ini, sprite umumnya merujuk pada jenis quad bertekstur tertentu, atau (jarang, saya pikir) sebuah segitiga tunggal. Bahkan elemen UI sering masih quads bertekstur - yang saya sebut sprite.

Dulu kasus sprite dimuat ke dalam memori dan dibulatkan (byte-untuk-byte mem-disalin) ke titik-titik di layar (secara harfiah, memori layar), seperti perangko. Di satu sisi, kami masih melakukan itu. Untuk animasi sprite, kami sering mengubah koordinat sampel tekstur sumber untuk menyalin segmen dari tekstur yang akan dirender ke paha depan. Efek shader, seperti pemetaan benjolan, sampel dari tekstur dengan cara yang sama dan dengan demikian masih dapat digunakan untuk, katakanlah, efek cahaya pada sprite.

Lebih khusus untuk game 2d, ini adalah pilihan gaya. Misalnya, seseorang dapat membuat karakter yang digambar tangan atau dicat dalam permainan menggunakan sprite. Game South Park akan menjadi contohnya, secara teknis.

Jadi, Anda tidak dapat benar-benar menggunakan hanya tekstur sebagai pengganti sprite.

jzx
sumber
3

Ini jawaban singkat dan sederhana. Saya biasanya menganggap sprite sebagai keseluruhan objek itu sendiri di samping fungsi dan tekstur apa pun yang telah diterapkan padanya. Sedangkan untuk tekstur, saya cukup menganggapnya hanya gambar yang bisa diterapkan pada sesuatu.

ADuck apa
sumber