Bagaimana cara memilih faktor penskalaan dunia game 3D?

9

Saya membuat prototipe game tangki 3D dengan beberapa simulasi fisika, saya menggunakan C ++. Salah satu keputusan yang perlu saya buat adalah skala dunia game dalam kaitannya dengan kenyataan. Sebagai contoh, saya bisa mempertimbangkan 1 unit pengukuran dalam game yang sesuai dengan 1 meter pada kenyataannya. Ini terasa intuitif, tetapi saya merasa saya mungkin kehilangan sesuatu.

Saya dapat memikirkan hal-hal berikut sebagai masalah potensial:

  1. Kompatibilitas program pemodelan 3D. (?)
  2. Akurasi numerik. (Apakah ini penting?) Terutama pada skala besar, bagaimana game seperti Battlefield memiliki peta besar: Bagaimana mereka tidak kehilangan akurasi numerik jika mereka menggunakan pemetaan 1: 1 dengan skala dunia nyata, karena representasi floating point cenderung kehilangan lebih presisi dengan yang lebih besar angka (misal dengan pengecoran sinar, simulasi fisika)?
  3. Gameplay. Saya tidak ingin pergerakan unit terasa lambat atau cepat saat menggunakan nilai dunia yang hampir nyata seperti -9.8 m/s^2untuk gravitasi. (Ini mungkin subyektif.)
  4. Apakah boleh menaikkan / menurunkan aset impor atau paling cocok dengan dunia dengan skala aslinya?
  5. Kinerja rendering. Apakah jerat besar dengan jumlah simpul yang sama lebih lambat untuk diurai?

Saya ingin tahu apakah saya harus membagi ini menjadi beberapa pertanyaan ...

concept3d
sumber

Jawaban:

3

Umumnya Anda harus melakukan apa pun yang berhasil.

  1. Karena Anda memiliki objek kehidupan nyata, masuk akal untuk mencocokkan skalanya (aplikasi pemodelan 3D biasanya memiliki pengaturan satuan pengukuran, meter, kaki, dll.), Tetapi begitu Anda menjauh dari tank dan ke pohon dan objek pemandangan lainnya - mereka mungkin perlu untuk disesuaikan skala agar sesuai dengan gaya permainan Anda (sehingga Anda memodelkan pohon dan memiliki cara untuk menskalanya di editor permainan agar terlihat bagus, berkali-kali Anda akan menggunakan kembali pohon yang sama tetapi dengan skala berbeda untuk menambah variasi).

  2. Jangan pindahkan kamera jauh dari asal dunia, tetapi pindahkan dunia di sekitar kamera yang ditempatkan di dekat asal dunia. Dengan cara ini Anda menghindari banyak masalah presisi yang muncul ketika GPU / fisika harus secara tepat membandingkan nilai-nilai yang memiliki presisi rendah. Jika Anda memindahkan tangki dan kamera 10km dari asal, presisi Anda akan berada dalam fraksi milimeter dengan float32 dan itu dapat menyebabkan efek yang mirip dengan Z-fighting antara model yang diubah.

  3. Anda harus mengubah konstanta global untuk membuat game Anda terasa nyaman. Ini adalah cara yang sama ketika Anda mengubah skala relatif dunia untuk melewati bagian yang membosankan dan mengemas lebih banyak hal menarik menjadi area 4x4 km kecil (kota, sungai, gunung, dll.) Yang jauh dari satu sama lain di dunia nyata.

  4. Jika mereka terlihat lebih baik - skala mereka. Jika mereka cocok apa adanya - simpan itu. Game dan film lebih merupakan seni daripada tentang realitas penyalinan buta. Jadi, Anda telah menemukan pohon yang tampak bagus, yang baru saja dimodelkan dengan ketinggian 2m, tentu saja Anda menskalakan dan mengadaptasi permainan Anda dengan cara lain (mengubah palet, detail tekstur, dll.)

  5. Saya ragu ada perbedaan selama mereka mengambil jumlah piksel yang sama di layar untuk ditampilkan.

Kromster
sumber
8

Ini dia.

  1. Program pemodelan 3D cenderung membiarkan Anda memilih skala unit. Mungkin terbatas pada Imperial atau Metric, tetapi itu hanya angka. Angka dapat dikonversi / diubah / disesuaikan dengan mudah. Ini tidak benar-benar peduli apa sistem satuan yang Anda gunakan, selama Anda menggunakan satu . Tetap konsisten, jadi 1 meter tidak menjadi 1 kaki.

    Sunting: Buku: Pengodean Game Selesai, Tambahan Ketiga, Bab 15, hal. 525, "Meter, Kaki, Hasta, atau Kellicams?"

  2. Game dengan potongan besar dari simpul dapat melakukan beberapa hal. Untuk satu, mereka dapat membaginya menjadi potongan kecil, dan kemudian data yang mengacu pada potongan itu dapat menentukan offset. Agak mirip dengan menggunakan Octrees, yang merupakan optimasi rendering untuk menghindari rendering sebagian besar simpul tak terlihat. Atau, double dapat menyimpan 1,79769e + 308 , yang merupakan angka yang cukup besar, namun terperinci. Float dapat menyimpan 3.40282e + 038, yang juga tidak kumuh.

    Sunting: Pengodean Game Selesai, Tambahan Ketiga, Bab 13, hal. 410, "Sistem Koordinasi dan Koordinasi" (Tabel ditambahkan ke bagian bawah pos)

  3. Anda mungkin ingin menggunakan sistem metrik, atau mengubahnya ke sistem unit Anda sendiri. Perlu dicatat, adalah bahwa Anda mungkin akan mengubah nilai itu sedikit. Tentu, nilai tweak Anda tidak akan akurat secara fisik. Tetapi mungkin terasa lebih akurat pada, katakanlah -9.3 m/s^2,.

  4. Anda dapat melakukannya dengan cara apa pun. Meskipun saya akan mengatakan untuk skala aset. Jika Anda skala dunia, Anda harus melalui dan mengubah gravitasi, perhitungan kecepatan, dan segala macam hal lainnya. Ketika mengimpor aset ke Unity3D saya biasanya harus menyesuaikan skala model di pengaturan impor, jadi saya menganggap Unity menskala itu. Jika Anda menginginkan sesuatu yang lebih dari itu.

  5. Besar atau kecil, ukuran poligon / jala tidak masalah DEKAT sebanyak berapa banyak poligon. Saya kira mungkin ada sedikit perubahan kinerja tergantung pada berapa banyak piksel model mengambil, tetapi hanya itu. Selain itu, angka menjadi 10 atau 100 tidak mengubah apa pun di ujung komputer. Masih jumlah bit yang sama untuk diproses, hanya saja bit yang berbeda adalah 0.

Sunting: Tabel fallowing mengasumsikan nomor floating-point IEEE 32-bit.

Game Coding Complete, Third Addition, Table 13.2, pg. 411
Smallest unit         Smallest Representable object  Upper Range    Description of
                      (As a textured polygon)                       largest area

100m                  A group of redwood trees       1.67x10^9      Earth/Moon System
1m                    A Human Being                  1.67x10^7      North and South America
1cm                   A coin                         1.67x10^6      California
1mm                   A flea                         1.67x10^5      San Francisco Bay Area
100 micrometer        A grain of pollen              1.67x10^4      Downtown San Francisco

Semua informasi ini, dan banyak lagi, di Game-Coding Lengkap. Ditulis oleh Mike McShaffry. Seorang profesional industri yang mengerjakan permainan mulai dari Black Jack, hingga Thief: Deadly Shadows.

Wolfgang Skyler
sumber
Saya tidak puas dengan jawaban ini karena tidak benar-benar menambah banyak pertanyaan awal dan tidak benar-benar memberikan contoh nyata. mengenai poin 2 Saya tidak benar-benar bertanya tentang penentuan Visibilitas atau paging geometri atau tentang angka floating point maksimum .. tapi apa yang saya maksudkan adalah bagaimana ketidaktepatan numerik ditangani dengan geometri besar karena floating point kehilangan keakuratan dengan angka yang lebih besar, itu sebenarnya dapat menyimpan angka yang sangat besar tetapi dengan presisi buruk.
concept3d
Apakah hasil edit sesuai dengan keinginan Anda lebih baik?
Wolfgang Skyler
baik, ya walaupun saya terutama bertanya tentang stackoverflow.com/questions/872544/precision-of-floating-point ini , terutama dalam simulasi fisika tapi saya pikir itu perlu pertanyaan yang terpisah.
concept3d