Apa cara yang dapat dicapai untuk mengatur anggaran konten (mis. Jumlah poligon) untuk konten level dalam judul 3D?

13

Dalam menjawab pertanyaan ini untuk swquinn , jawabannya mengangkat pertanyaan yang lebih relevan yang ingin saya dengar jawabannya. Saya akan memposting strategi kami sendiri (berjanji saya tidak akan menerimanya sebagai jawaban), tetapi saya ingin mendengar orang lain.

Khususnya: bagaimana Anda menetapkan anggaran yang masuk akal untuk tim konten Anda. Biasanya salah satu pertanyaan pertama yang diajukan dalam suatu pengembangan adalah: berapa anggaran poligon kita? Tentu saja, hari-hari ini jarang bahwa vertex / jumlah poli saja adalah faktor pembatas, bukan kompleksitas shader, fill-rate, kompleksitas pencahayaan, semua ikut bermain.

Yang diinginkan tim konten adalah angka / batasan yang sulit untuk dikerjakan sedemikian rupa sehingga mereka memiliki harapan yang masuk akal bahwa konten mereka, begitu benar-benar masuk ke mesin, tidak akan terlalu berat. Mengingat bahwa 'itu tergantung' bukanlah jawaban yang sangat berguna, saya ingin mendengar strategi yang memungkinkan saya memberi mereka batasan yang bisa diterapkan tanpa a) menyesatkan, atau b) salah.

MrCranky
sumber
1
Ini lebih "pra-produksi" daripada hal "produksi".
Patrick Hughes

Jawaban:

5

Dari pemahaman saya, jauh lebih mudah untuk mengurangi kompleksitas model daripada menambahkan detail untuk model yang telah dikuliti dan dicurangi. Saya tahu beberapa perusahaan mengambil keuntungan dari ini dengan mengumpulkan aset yang sangat rinci dan menurunkannya tergantung pada situasinya.

Valve melakukan ini dengan NPC mereka. NPC dimodelkan dalam detail ekstrem tanpa pemetaan apa pun dan kemudian menurunkan detail ke tingkat yang dapat diterima oleh teknologi dan trik saat ini seperti berbagai teknik pemetaan yang diterapkan berdasarkan model terperinci (atau bahkan dibuat secara otomatis).

Ini juga membantu dengan pembuktian di masa depan karena Anda tidak perlu membuat ulang aset, hanya tweek mereka untuk setiap proyek baru. Ini juga memiliki keuntungan bahwa tidak perlu menunggu tim untuk melakukan pembandingan yang bersifat khusus sebelum aset dapat mulai dikembangkan. Para seniman dapat sepenuhnya terlibat sejak hari pertama.

Klasik
sumber
2
Itu tidak benar-benar menyediakan anggaran: "buatlah menjadi serumit yang Anda butuhkan dan kemudian kita akan turunkan nanti" adalah strategi produksi. : - /
MrCranky
16

Oke, jadi strategi kami adalah:

  • Buat beberapa geometri penampung, kira-kira skala yang tepat untuk konten akhir. Itu bisa berupa bangunan atau karakter. Itu tidak harus terlihat seperti konten akhir, itu bisa berupa kotak / bola / dll., Tetapi harus ditessellated sehingga memiliki jumlah poligon yang layak. Jika Anda membuat karakter, buat mereka memiliki jumlah tulang yang representatif.
  • Atau, gunakan geometri orang lain. Jika Anda memiliki judul dengan tingkat kualitas yang ingin Anda cocokkan, temukan beberapa cara untuk mengambil model mereka (mungkin menggunakan pengambil adegan DirectX).
  • Pastikan geometri Anda memiliki shader yang representatif di atasnya. Jika Anda mengharapkan untuk mencampur beberapa tekstur, lakukan itu, bahkan jika teksturnya semuanya berwarna tunggal. Pastikan teksturnya adalah resolusi yang tidak sepele, meskipun semuanya satu warna.
  • Masukkan sejumlah lampu yang masuk akal.
  • Letakkan kamera di tempat yang realistis, sambil menunjuk pada jumlah geometri terbesar yang Anda bisa (mis. Berdiri di puncak bukit memandangi level)
  • Muat adegan pada perangkat keras target paling lambat dan tercepat, dan ukur FPS.
  • Variasikan jumlah geometri / lampu / bayangan / resolusi tekstur ke atas atau ke bawah untuk memahami apa yang menjadi trade-off (mis. Anda dapat memiliki selusin lampu tambahan tetapi Anda harus memotong jumlah poli menjadi dua).

Akhirnya: bersikap konservatif dengan angka-angka Anda. Rendering bukan satu-satunya hal yang harus dilakukan gim Anda, jadi tentukan satu proporsi bingkai yang ingin Anda habiskan untuk rendering, dan jadikan itu sebagai target Anda. Misalnya jika Anda ingin menghabiskan dua pertiga dari frame Anda pada rendering 30fps, maka targetkan 1s / 22ms (45 fps) dalam pengujian Anda.

Dari semua itu, Anda harus bisa memberikan contoh adegan. Misalnya, ini adalah adegan dengan 200 ribu poligon, 5 lampu statis dan tidak lebih dari 3 lampu dinamis per model, dengan 15 karakter polys 50K dan 30 tulang, dan beroperasi pada 60fps dan menempati 30MB dalam memori.

MrCranky
sumber
2
tl; dr: Benchmark it yourself;)
Nicol Bolas
+1 Ini benar-benar satu-satunya cara, membangun, dan mengukur.
Patrick Hughes
Betulkah? Saya berharap akan ada solusi yang lebih cerdas / lebih murah yang tidak kami pikirkan.
MrCranky
@MrCranky sayangnya, ya. Jika Anda menggunakan mesin yang sudah ada, Anda dapat langsung memulai proses dengan mengukur data sampel yang ada dan menggunakannya sebagai baseline Anda untuk menyesuaikan angka untuk gim Anda secara khusus - setiap gim berbeda.
Patrick Hughes
4

Hitungan Vertex

Saya telah meneliti "Hitungan Poligon" selama lebih dari 15 tahun. Tidak ada cara ketat untuk mengetahui berapa batasan Anda, terutama dengan perangkat lunak dan perangkat keras yang lebih modern. Batas jauh lebih berguna pada mesin yang hanya mendukung 4.000 segitiga untuk seluruh level. Sekarang, Anda akan menemukan sebagian besar objek di lingkungan permainan akan melebihi itu secara individual.

Yang terpenting adalah apa yang dilakukan mesin dengan strip poligon.

Saat mesin membuat setiap model, dibutuhkan koordinat UV yang dipetakan, tekstur / bahan yang ditampilkan pada segitiga, dan membuat strip segitiga. Dalam kebanyakan kasus, kipas segitiga dipecah menjadi strip segitiga terpisah per segitiga. Ini meningkatkan jumlah strip segitiga, menurunkan kinerja.

Contoh utama untuk memperbaiki ini adalah bagian atas datar silinder. Paket 3D umumnya mengatur kipas segitiga dengan simpul di tengah. Saya menghapus tepi dan simpul tengah, lalu membuat paha depan. Ini kemudian harus melakukan triangulasi menjadi strip segitiga tunggal alih-alih beberapa strip wajah tunggal, tanpa mengubah jumlah poligon.

Ambil hitungan poligon sebagai panduan, dan perhatikan bagaimana Anda membuat model, dan UV Map mesh. Kurang perpecahan di jala ketika Pemetaan UV sering kali bisa lebih bermanfaat.

Selanjutnya, pertimbangkan apa yang bisa dipalsukan dengan peta normal. Wajah datar dengan banyak detail case biasanya dipetakan secara normal. Kurva hanya perlu bulat di mana Anda dapat melihat siluet. Saat melihat wajah melengkung ke depan, Anda tidak akan melihat perbedaan antara assett resolusi tinggi Anda, dan assett resolusi game. Siluet inilah yang membuat perbedaan dalam model Anda ketika peta normal terlibat. Silhouette sekarang dapat dimodifikasi dengan DirectX 11, menggunakan pemetaan tessellation dan perpindahan.

Desain permainan

Pertimbangkan hal berikut saat merancang game Anda:

  1. Tentukan jenis permainan (mis. Aksi / petualangan / balap / scroller)
  2. Tentukan jenis tampilan (mis. Orang pertama / orang ketiga / ortografis)
  3. Tentukan kekuatan komputasi untuk pasar Anda. (mis. penggemar / gamer kasual)
  4. Buat gaya visual yang ingin Anda capai. Apakah Anda ingin terlihat seperti, misalnya, Crysis 2, Borderlands, Bloodforge atau Gears of War?
  5. Tentukan objek penting untuk pemain. Apakah alat peraga Anda akan menjadi pusat fokus atau hanya latar belakang?
  6. Apakah jerat visual juga merupakan tabrakan?

Dengan menggunakan gim dan jenis tampilan, tentukan kedalaman tampilan seperti apa. Apakah Anda akan melihat objek yang jauh, dan dengan kejelasan apa? Apakah Anda membuat sesuatu dengan tampilan terbatas, seperti penembak koridor? (mis. Gears of War) Apakah Anda membuat sesuatu bebas berkeliaran dengan lanskap terbuka? (mis. Skyrim)

Setelah Anda tahu seperti apa tampilannya, Anda dapat meneliti game yang serupa.

Animasi kemudian akan membatasi kemampuan Anda untuk meningkatkan jumlah poligon. Sambungan statis, apa pun yang tetap berada di posisi yang sama paling murah pada GPU dan CPU. Apalagi jika mereka bukan benda fisika. Untuk objek fisika, Anda sering dapat membuat lambung tabrakan sederhana, dan jerat visual yang kompleks. Tidak ada interaksi yang cukup di sebagian besar game untuk melihat perbedaannya. Animasi menggerakkan model Anda 3-Dimensi, dengan beberapa tulang per titik, memadukan antara bobot masing-masing. Ini bisa mahal pada waktu CPU, yang dapat berbenturan dengan AI dan fisika berbasis perangkat lunak. Semakin banyak simpul yang dipengaruhi oleh jumlah tulang di seluruh model akan menurunkan kinerja CPU. Ini adalah alasan lain mengapa karakter permainan dianggap "seni". Sangat sulit untuk menentukan batas poligon.

Teladan saya

Saya menggunakan UDK, membuat penembak orang ketiga yang berjalan lambat, dengan jumlah pemain dan NPC terbatas di layar setiap saat. Untuk ini, saya menargetkan sekitar 10.000 segitiga per pemain, 5.000 segitiga untuk tipikal, musuh generik, dan jika saya membuat karakter gaya "bos", sekitar 15.000. Selain itu, senjata untuk orang ketiga sekitar 4.000 segitiga akan muncul sangat rinci. Kendaraan sekitar 10.000 segitiga. Semuanya akan membutuhkan Level of Detail, karena saya memerlukan jarak tampilan yang jauh.

Jika membuat orang pertama, saya akan mendasarkan lengan pada sekitar 2.000 segitiga, senjata sekitar 5.000 segitiga, dengan pemetaan normal untuk masing-masing.

Kesimpulan

Inilah yang mungkin berarti "Itu tergantung", tetapi saya pikir itu mungkin mengklarifikasi beberapa hal yang orang sering bertanya-tanya.

  1. Gunakan jumlah poligon sebagai panduan.
  2. Lihatlah area yang bisa dipetakan secara normal alih-alih dimodelkan.
  3. Hati-hati saat menempatkan kipas segitiga, jika mungkin, buat strip.
  4. Gunakan sedikit split pada mesh saat memetakan UV, perhatikan strip.
Markham Ward
sumber
2

Salah satu metode yang dapat saya pikirkan adalah menggunakan adegan yang dibuat secara otomatis untuk menghasilkan data statistik dari mana Anda dapat menguraikan informasi yang Anda cari.

  1. Dapatkan volume aset yang besar (berpotensi dihasilkan secara otomatis).

  2. Buat alat untuk menghasilkan adegan yang bisa dimuat oleh mesin Anda menggunakan kumpulan aset.

  3. Jalankan bot yang akan memindahkan kamera Anda di sekitar tempat kejadian. Anda mungkin juga ingin menjalankan beberapa bot lain untuk membuat adegan lebih dinamis, termasuk lampu.

  4. Kumpulkan informasi sebanyak mungkin dan lemparkan ke dalam basis data; fps, hitungan poli, perubahan shader, jumlah lampu, panggilan, dll.

  5. Buat / dapatkan beberapa alat untuk menampilkan data dalam database Anda sebanyak mungkin.

Tautan ini dapat memberikan beberapa ide lagi: Dead Rising Tools

OriginalDaemon
sumber
Saya suka jawaban ini, karena menangani bagian paling mahal dari strategi kami sendiri: seseorang harus mengambil upaya untuk membangun adegan yang representatif. Generasi algoritma, atau skrip untuk menempatkan sejumlah besar aset berukuran masuk akal dengan cepat akan sangat mempercepat penciptaan adegan yang dapat diuji. Saya akan menerima jawaban yang lebih populer, tetapi saya pikir ini sepadan dengan karunia.
MrCranky