Memahami seni pixel di Unity 2d

10

Saya berjuang untuk memahami dasar-dasar di balik seni pixel di Unity.

Saya mengerti apa itu unit, dan jika saya menggambar sprite saya dengan 16x16 piksel, saya harus mengatur PPU ke 16.

Ambil lembah stardew misalnya, pada gambar di bawah ini Anda dapat dengan jelas melihat bahwa pemain tidak persegi. Pembuat game mengatakan dia membuat semuanya dalam 16x16, tapi lalu bagaimana ada begitu banyak detail dalam karakter? Tentunya Anda tidak menambal beberapa kotak 16x16 bersama untuk membuat karakter (seperti yang Anda lakukan dengan tilemap)?

masukkan deskripsi gambar di sini

Apa itu "umum" cara berurusan dengan hal-hal yang tidak persegi, seperti karakter pada gambar. Apakah Anda hanya membuat sprite 16x32 dan mengatur PPU ke 16? Tidakkah itu membuatnya terlihat sedikit aneh di sebelah sprite 16x16? Apakah Anda biasanya memilih satu ukuran (yaitu 16, 32, 64) Dan kemudian berpegang teguh pada itu untuk semua yang ada dalam permainan?

Masalah visual yang saya lihat adalah ini, di mana sprite 32x32 terlihat sangat tidak pada tempatnya (terlalu tajam) di samping sprite 16x16.

masukkan deskripsi gambar di sini

Jadi saya bertanya-tanya, bagaimana Anda mencampur ukuran tanpa mendapatkan efek ini di mana satu gambar terlihat jauh lebih tajam daripada yang lain. Misalnya saya ingin karakter menjadi 16x32, atau nilai non-kuadrat, ketika ubin saya 16x16

Green_qaue
sumber
2
PPU tidak ada hubungannya dengan dimensi tekstur sprite Anda, itu hanya menentukan skala di mana mereka ditampilkan relatif terhadap sistem koordinat dunia Anda. Dua sprite dengan PPU yang sama akan menunjukkan kerapatan piksel yang sama (mis. Ukuran yang ditampilkan dari masing-masing blok piksel akan sama dari satu sprite ke sprite lainnya jika dilihat langsung), bahkan jika gambar memiliki ukuran yang sama sekali berbeda. Jadi saya tidak yakin apa yang Anda maksud dengan "bukankah itu akan membuatnya terlihat sedikit aneh" - dapatkah Anda menguraikan masalah visual apa yang telah Anda amati?
DMGregory
@DMGregory Tentu, izinkan saya mengunggah gambar
Green_qaue
1
Efek yang ditunjukkan dalam contoh tangkapan layar Anda akan terjadi jika Anda menempatkan dua gambar bersamaan dengan nilai PPU yang berbeda (atau jika satu gambar memiliki pikselnya dua kali lipat / tiga kali lipat dalam tekstur itu sendiri, atau Anda telah menerapkan skala pada satu gambar tetapi bukan yang lain) . Jika Anda tetap pada satu nilai PPU yang konsisten dan tidak menskalakan sprite Anda maka Anda akan tetap memiliki kerapatan piksel yang konsisten
DMGregory
@ DMGregory Jadi jika ubin saya 16x16, dan saya ingin karakter dengan lebih detail (seperti yang Anda lihat karakter 16x16 di atas memiliki detail yang sangat sedikit), misalnya 32x16, saya harus membuat sprite 32x16, dan menjaga PPU di 16 (sama sebagai ubin) ?. Atau misalnya jika saya ingin gajah, maka mungkin itu harus 64x128, apakah saya kemudian akan menetapkannya menjadi 16 PPU juga?
Green_qaue
1
PPU adalah berapa banyak piksel yang muat dalam satu unit dunia. Jika Anda selalu menginginkan piksel dengan ukuran yang sama, maka Anda harus selalu menggunakan satu nilai PPU yang konsisten. (Itu berarti semak 16x16 dan gajah 64x128 baik pada 16 PPU keduanya akan menunjukkan kerapatan piksel yang sama, dan gajah akan mencakup area layar 32 kali lebih banyak daripada semak tidak). Apakah hanya itu yang Anda pikirkan?
DMGregory

Jawaban:

16

Merangkum poin-poin di atas, yang penting untuk mencocokkan dua keping pixel art adalah bahwa kerapatan pikselnya (texels per area layar / unit dunia) adalah sama.

Dengan menggunakan beberapa sprite dari Stardew Valley sebagai contoh, kita dapat melihat bahwa meskipun sprite memiliki dimensi tekstur yang berbeda, mereka cocok pada grid yang konsisten karena setiap piksel digambar dengan ukuran yang sama.

Contoh menunjukkan dua sprite ukuran berbeda pada kerapatan piksel yang sama.

Jika kita menganggap ukuran tanaman sebagai satu ubin / satu unit ruang dunia, kita dapat melihat unit ini membentang 16 piksel secara horizontal dan vertikal. Karakter, memiliki dua kali ketinggian tanaman, juga mencakup dua kali jumlah ubin / unit dunia, sehingga kerapatan piksel tetap sama pada 16 piksel per unit dunia.

Khusus untuk Unity, ini memperlihatkan ini untuk Anda sebagai pengaturan Pixels Per Unit di inspektur pengaturan impor Sprite . Selama Anda menggunakan satu angka yang konsisten di sini untuk semua sprite Anda, Unity akan secara otomatis menangani penggambarannya pada ukuran yang tepat di dunia Anda untuk menjaga kerapatan piksel ini - bahkan jika itu ukuran ganjil dan bukan kekuatan dua atau tepatnya kelipatan ukuran ubin Anda. Jadi dalam contoh ini, baik semak dan karakter, dan semua hal lain dalam game akan menggunakan PPU 16.

Jumlah pasti yang Anda pilih bukan masalah besar, konsistensi yang paling penting. Jika kami ingin setiap ubin merentang 2 unit dunia, sehingga saat mengedit tingkat kami dapat dengan mudah mengambil sudut ubin (angka ganjil) dan pusat ubin (angka genap), maka kami akan menggunakan PPU 8 untuk semua sprite kami.

Hanya saja, jangan menolaknya terlalu rendah. Anda akan melihat beberapa artikel di luar sana merekomendasikan pengaturan PPU 1, yang berarti sprite 256-pixel akan menjangkau 256 unit dunia. Meskipun ini mungkin tidak terdengar mengkhawatirkan, sistem seperti fisika disetel dengan asumsi sebagian besar gameplay Anda akan terjadi pada skala sepersepuluh hingga puluhan unit, dan membuat skala Anda terlalu besar dapat menyebabkan mereka berperilaku buruk. Cobalah untuk memilih sejumlah piksel yang bermakna dalam gameplay Anda, seperti lebar karakter atau ubin Anda. Ini juga akan membuat matematika Anda lebih mudah untuk pemrograman & desain level (mis. "Saya ingin karakter ini berlari 3 ubin dengan benar, jadi itu x + 3.0f")

Perhatikan bahwa penskalaan sprite, gambar UI, atau orang tuanya yang menggunakan properti transformasi akan menjauhkan mereka dari kerapatan piksel yang konsisten ini, jadi berhati-hatilah dengan properti skala, dan simpan sebagian besar atau semua adegan Anda pada skala 1,0 untuk kesederhanaan.

Satu peringatan terakhir adalah bahwa semua ini tidak menentukan seberapa besar sprite Anda benar-benar berakhir di layar Anda - itu ditentukan oleh ukuran jendela permainan / layar Anda, dan ukuran / FoV / sudut kamera Anda. Untuk pixel perfect 2D, Anda juga perlu memastikan bahwa ketinggian jendela Anda adalah kelipatan angka-keseluruhan dari jumlah piksel sprite yang dilihat kamera Anda (tinggi ortografis kamera x 2 x PPU)

DMGregory
sumber