Gim-gim yang tidak cukup beruntung untuk dijalankan pada platform yang dikunci, seperti handheld, perlu dijalankan di berbagai format resolusi dan rasio aspek.
Dalam gim 3D, Anda mungkin memiliki HUD atau GUI menu berdasarkan grafik raster, dan dalam gim 2D Anda mungkin memiliki banyak paha depan yang merupakan wadah untuk sprite.
Jadi pertanyaan saya adalah, bagaimana Anda mendekati merancang dan mengoperasikan konten di berbagai resolusi dan rasio aspek? Mari kita asumsikan Anda memiliki karakter sprite yaitu 300x400 piksel sprite dan dikelilingi oleh level yang terbuat dari ubin. Pada resolusi / rasio aspek yang berbeda, Anda akan melihat FOV yang berbeda sama sekali. Atau jika Anda memiliki menu HUD atau GUI, Anda ingin menyimpan beberapa barang pada posisi yang sama dan ukuran yang relatif sama dengan layar. Namun, sumber grafis adalah bitmap raster, bukan vektor.
Jelas, masalah telah diatasi beberapa kali. Saya tertarik mendengar beberapa pendekatan yang berhasil untuk Anda sejauh ini. Apakah Anda menyimpan unit 'piksel' agnostik dimensi sewenang-wenang yang secara ajaib Anda ubah menjadi dimensi yang dibutuhkan melalui rumus berdasarkan resolusi dan rasio aspek atau pendekatan lain?
edit:
Jadi, kesimpulannya adalah untuk menghitung rasio aspek Anda. Kombinasi terendah dari aspek: resolusi adalah yang Anda gunakan untuk mendesain hal-hal penting. Area aman jika Anda mau. Rasio aspek yang sama, tetapi resolusi yang lebih tinggi adalah masalah penskalaan sederhana. Konten seni dirancang untuk resolusi tertinggi. Rasio aspek yang lebih besar hanya menunjukkan lebih banyak level / FOV dengan informasi yang disajikan yang tidak kritis seperti yang ada di daerah aman. Sesuatu seperti di gambar ini saya buat .
Jawaban:
Jika resolusi Anda mirip satu sama lain, Anda bisa menggunakan seni yang sama di semua dari mereka dengan mungkin beberapa downscaling saat runtime untuk layar yang lebih kecil. Jika mereka berbeda lebih dari katakan faktor 2x, Anda harus membuat (atau setidaknya memiliki tweak artis) aset yang terpisah untuk resolusi yang berbeda.
Dengan 2D, resolusi memiliki pengaruh besar pada bagaimana Anda mendesain gambar. Sprite yang terlihat sangat detail dan realistis pada resolusi tinggi akan menjadi berlumpur dan tidak dapat diuraikan. Demikian juga, sprite yang bersih dan tajam pada resolusi rendah akan terlihat murah dan terlalu sederhana pada resolusi tinggi.
sumber
Salah satu caranya adalah dengan membuat aset gambar dalam format vektorial (SVG, Illustrator, dll) dan mengubahnya menjadi gambar raster sesuai kebutuhan oleh versi permainan yang berbeda.
sumber
Ketika mempertahankan layar penuh pada resolusi yang berbeda, jika Anda menginginkan pixel-perfection (yaitu "Saat artis memproduksinya"), maka masalahnya adalah tidak ada cara yang sepenuhnya otomatis untuk skala sprite naik atau turun (atau untuk memutarnya) yang tidak t membutuhkan persetujuan manusia. Pada akhirnya itu karena penempatan piksel adalah hal yang subyektif. Algoritma rendering melakukan beberapa penskalaan, atau rotasi, dan harus menggunakan beberapa teknik perkiraan untuk melakukan ini, misalnya. penyaringan bilinear. Jika Anda masih ingin tepi keras pada piksel untuk memiliki bahwa "pixel kesempurnaan" (yaitu tidak menggunakan AA atau BF), maka Anda akan harus menerima bahwa skala oleh beberapa non-power-of-2 derajat akan ke menghasilkan beberapa artefak yang tidak diinginkan.
Pendekatan menarik untuk masalah serupa ditemukan di RotSprite , aplikasi / algoritma yang dirancang untuk melakukan rotasi "otomatis" sprite. Maksud saya, itu menghasilkan sejumlah hasil akhir yang mungkin diinginkan setelah pemrosesan intensif, untuk dipilih oleh operator manusia. Sprite yang dipilih sendiri akhirnya masuk ke dalam game, artinya ini adalah langkah pembuatan konten, dan bukan runtime.
Satu jawaban yang memungkinkan untuk pertanyaan "pixel agnostik dimensi arbitrer" Anda: OpenGL (yang mungkin ingin Anda gunakan jika Anda akan lintas platform) bekerja dengan cara yang sama sekali berbeda dari renderer raster perangkat lunak. Ini mempertimbangkan lebar dan tinggi layar dalam rentang floating-point 0,0-> 1,0, dan memetakan piksel sesuai pada GPU. Tentu saja ini dapat dengan sendirinya menghasilkan artefak, kecuali misalnya. BF dihidupkan untuk tekstur (yang merupakan sprite Anda di OpenGL).
sumber