Apa logika di balik adegan 'Memuat' dalam game?


8

Saya membuat game pertama saya, ini adalah jenis game menara pertahanan, menggunakan mesin game Unity dan mengambil Fieldrunners sebagai referensi. Saya ingin tahu lebih banyak tentang fungsi di balik layar 'Memuat' dalam game.

Sampai sekarang saya instantiating / membuat objek saat run time dan saya tidak menghadapi penundaan atau masalah serupa melakukannya. Jadi untuk apa adegan 'Memuat' di game lain? Apakah ada fungsionalitas atau instantiasi objek tertentu untuk putaran atau tahap selanjutnya? Jika ya mengapa saya membutuhkannya jika saya tidak mendapatkan penundaan?


6
Sumber daya yang dibutuhkan oleh game lain mungkin jauh lebih tinggi daripada kebutuhan Anda sendiri. Karenanya pemuatan adegan diperlukan untuk menutupi periode saat sumber daya ini dimuat (mungkin dari HDD yang lambat).
decaviatedcaviar

2
Apa "semua game" yang Anda maksud? Ada banyak game yang tidak memiliki layar pemuatan sama sekali.
Nicol Bolas

Jawaban:


10

Pada dasarnya, saya akan mengatakan bahwa selama proses "Memuat" permainan mencoba memuat dan melakukan precompute semua operasi yang tidak dapat dilakukan dalam runtime. Misalnya, mengambil gambar (untuk digunakan sebagai tekstur) untuk hard drive biasanya merupakan proses yang lambat. Pada langkah "Memuat" gambar-gambar ini dapat disalin ke memori RAM, yang berarti Anda lebih cepat mengakses penyimpanan, memungkinkan akses waktu-nyata ke gambar-gambar pada saat dijalankan.


1

Layar pemuatan juga dapat digunakan sebagai "cut scene" (http://en.wikipedia.org/wiki/Cutscene) untuk memberi pengguna kesempatan untuk mengatur napas, untuk mempelajari lebih lanjut tentang kisah & fitur permainan Anda, atau untuk mencoba menjualnya versi pembelian berbayar / dalam aplikasi


1

Saya pikir game modern seharusnya bisa membuang layar.

Saya menduga alasan sebenarnya bahwa kami masih memiliki layar pemuatan adalah bahwa sebagian besar game dirancang untuk berjalan pada perangkat keras Xbox 360. Dengan demikian mereka akan dibatasi dalam jumlah ram yang dapat mereka masukkan barang dan berapa banyak threading yang bisa mereka lakukan. Jika Anda tidak memiliki ram yang cukup maka Anda harus membuang banyak hal dari memori dan kemudian memuatnya kembali dari disk. Juga lebih mudah untuk memuat semuanya sekaligus.

Ada juga saat-saat ketika harddisk mungkin macet. Apa yang terjadi jika pengguna menjalankan antivirus di latar belakang. Jika barang-barang Anda tidak preloading maka Anda mungkin harus menghentikan permainan sementara itu menunggu untuk memuat atau memiliki hal-hal yang muncul secara spontan.

Gim seperti Skyrim dapat memberi Anda dunia terbuka luas yang dapat Anda lewati sebanyak yang Anda inginkan, tetapi segera setelah Anda membuka pintu untuk memuat ruang bawah tanah yang relatif kecil, Anda terjebak dengan layar pemuatan.

Tentang satu-satunya alasan saya bisa melihat layar beban penjara bawah tanah yang diperlukan adalah jika mereka menggunakan beberapa pencahayaan prebaked ekstra berat yang digunakan untuk adegan dalam ruangan yang jika cukup besar untuk memuat (terbuat dari 1 mesh raksasa atau memiliki lightmaps terperinci) atau perlu perhitungan yang harus dilakukan saat runtime. Saya percaya ruang bawah tanah Skyrim hanya dibangun dari jaring modular daripada satu jaring raksasa (setidaknya saya pikir di mana Oblivion).

Tidak ada alasan nyata untuk memuat lebih dari hal-hal yang benar-benar dapat Anda lihat ketika memasuki level. Dengan cara yang sama gim tidak membuat hal-hal yang dapat Anda lihat, Anda dapat menyisihkan apa yang sebenarnya perlu dimuat langsung. Anda juga bisa menempel di banyak benda dummy place-holder. Kemudian Anda dapat menggunakan threading untuk memuat objek secara tidak sinkron di area sekitarnya, jeratnya, tekstur dan sebagainya saat pemain bergerak di sekitar lingkungan.

Cara saya akan membuang layar pemuatan adalah sebagai berikut:

  1. Muat properti dunia game dasar. Script global.

  2. Muat posisi pemain.

  3. Load node gridcell / BSP dari posisi itu.

  4. Muat hanya kotak pembatas objek di sel itu.

  5. Cari tahu apa yang sebenarnya akan diberikan (tes pada kotak pembatas, mungkin tes rendering oklusi)

  6. Memuat jerat hal-hal yang diberikan.

  7. Muatkan bahan tekstur dari jerat.

  8. Buat lebih banyak tes untuk melihat apakah lebih banyak wilayah yang terlihat dan perlu dimuat (mis. Permintaan render seluruh sel grid sebagai kubus raksasa).

  9. Setelah semuanya terlihat dimuat mulai render.

  10. Muat sisa barang di dalam sel dan Muat lebih banyak barang sesuai kebutuhan. Muat wilayah terdekat dan lakukan beberapa prediksi dasar pada pergerakan pemain untuk memilih wilayah mana yang perlu dimuat terlebih dahulu. Terus sampai memori terisi.

Ada beberapa hal lain yang perlu diperhitungkan. Misalnya beberapa barang perlu dimuat meskipun tidak terlihat. Misalnya musuh yang berdiri di belakang pemain di luar wilayah itu harus aktif sehingga mereka dapat berlari ke arah pemain dan menyerang mereka. Mungkin hal-hal tes oklusi tidak penting karena Anda akan segera ingin memuat apa pun di dekat sehingga ada ketika pemain bergerak dan itu menjadi terlihat tetapi bisa mencukur satu detik untuk langsung ke render (tetapi jika waktu sedekat itu maka Anda kemungkinan akan mendapatkan masalah dengan hal-hal yang muncul).

Jika memungkinkan, langkah-langkah tersebut harus dimulai sebelum diminta, utas di latar belakang. Misalnya jika Anda berada di menu utama gim maka harus mulai memuat terlebih dahulu area awal setelah Anda memilih "Gim Baru" (atau segera setelah menu muncul) dan simpan terakhir untuk melanjutkan. Penghematan lainnya dapat dimuat sebelumnya saat Anda menggerakkan mouse di atasnya. Ketika Anda mendekati pintu ruang bawah tanah, itu harus mulai memuat tingkat berikutnya (walaupun jika Anda bisa melakukannya maka Anda tidak perlu pintu ruang bawah tanah khusus karena mereka benar-benar hanya untuk memicu layar pemuatan). Muat di latar belakang saat video diputar. Dengan begitu Anda bahkan tidak perlu layar pemuatan awal yang pendek.

Anda dapat melewatkan banyak hal jika Anda tidak keberatan hal 'muncul' menjadi ada. Sesuatu seperti Second Life hanya membuat Anda muncul dengan hal-hal, karena diambil dari internet tidak banyak yang dapat Anda lakukan tentang itu. Pengakuan Assassin memiliki efek di mana barang-barang berbunyi masuk ke dalam adegan sehingga Anda mungkin bisa lolos dengan barang-barang karena alasan artistik.


2
Sayangnya, itu tidak layak untuk banyak game. Satu area mungkin memiliki tekstur yang cukup untuk pas dengan memori video GPU mid-range, sehingga Anda tidak dapat memuat sebelumnya area mulai dan area penyimpanan terakhir (dan bagaimana dengan simpanan lain yang mungkin dipilih pengguna?). Bahkan dengan streaming dunia yang terus menerus seperti di Skyrim, apa yang terjadi dengan portal atau skrip yang hanya memindahkan pemain ke area lain? Pada 8GB data terkompresi - banyak yang merupakan data tekstur - bahkan PC gaming modern kelas atas tidak dapat memuat semuanya.
Sean Middleditch

1
Terlebih lagi, saya berpendapat bahwa game memiliki kepentingan untuk tidak dapat memuat banyak area ke dalam memori; itu membuat mereka tidak menempatkan konten sebanyak yang mereka bisa ke setiap area yang diberikan. Bagi banyak game, ini bukan masalah, tetapi untuk judul dunia terbuka yang ingin memberikan pengalaman yang layak sebanyak mungkin, setiap keadaan di mana Anda tidak menabrak keterbatasan Anda adalah salah satu di mana Anda tidak memberikan sebanyak untuk pemain yang Anda bisa.
Steven Stadnicki

0

Di Unity, adegan adalah kombinasi dari beberapa objek game. Jadi, jika Anda tidak ingin menentukan semua objek game secara terpisah dan memuatnya satu per satu, Anda cukup memuat adegan yang lengkap .

Saat memuat adegan di Unity, objek yang sudah ada dibuang ke tempat sampah dan karenanya seluruh level baru dimuat. Anda dapat menunjukkan objek mana yang ingin Anda simpan dengan metode DontDestroyOnLoad .

Dalam pengaturan build Anda saat menerbitkan game, Anda juga dapat menunjukkan adegan mana yang digunakan dalam game Anda dan memasukkannya dalam build Anda saat ini . Ini memungkinkan untuk membuat perbedaan antara beberapa platform yang berisi level berbeda, tetapi logika kode yang sama.

Pertanyaan spesifik kesatuan dapat ditanyakan di forum jawaban kesatuan juga. Pengguna ini lebih ditentukan untuk Persatuan, alih-alih pertanyaan keseluruhan pada mesin game.


Jawaban ini tampaknya tidak menjawab pertanyaan: bukan "bagaimana cara memuat level?", Tetapi "mengapa pemain melihat 'Memuat ...'?"
Kevin Reid

@KevinReid Ah ya, Anda mungkin benar tentang itu. Saya mungkin tidak menangkap tanda tanya dengan baik.
Marnix

0

Adegan grafik 3D membutuhkan waktu untuk mengatur, dan mempertahankannya dapat mendorong komputer melampaui batasnya. Isi membutuhkan memori yang luas. Konten yang terlihat membutuhkan waktu yang lama. Dan ketika pengamat memperbesar dan melihat cakrawala, banyak sekali konten total yang dapat terlihat. (Pernah perhatikan bagaimana beberapa game bekerja lebih baik jika Anda tidak memperkecil tampilan terlalu jauh? Pernah memperhatikan bagaimana beberapa game tidak membiarkan Anda memperkecil terlalu jauh atau melihat cakrawala?)

Solusinya adalah mengatur adegan individual dengan konten terbatas. Sekarang permainan bekerja dengan baik sampai pengamat meninggalkan satu adegan untuk yang lain. Pada titik itu, adegan lama dibuang dan adegan baru diatur, yang membutuhkan waktu (dan layar pemuatan untuk menjaga agar pengguna tidak bosan). Mesin 3D biasanya mencoba melakukan pekerjaan sebanyak mungkin selama pengaturan untuk membuat grafik sehalus mungkin nanti.

Saya telah melihat permainan yang memungkinkan gerakan cepat dan zoom gratis ke seluruh dunia. Mungkin ada banyak kejeniusan dan banyak pemrograman dan kesenian yang melelahkan di sana; mereka tidak hanya mengunduh beberapa perangkat lunak grafik gratis.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.