Bagaimana keadaan seni dalam LOD geometris dalam game?

15

Bagaimana permainan modern melakukan geometri level-of-detail untuk jerat objek seperti karakter, medan, dan dedaunan? Ada dua bagian dari pertanyaan saya:

  1. Seperti apa tampilan pipa aset? Apakah seniman membuat model poli-tinggi yang kemudian dihancurkan? Jika demikian, algoritma penipisan apa yang paling populer? Apakah jerat LOD terkadang dilakukan dengan tangan?
  2. Bagaimana mesin melakukan transisi antara objek LOD yang berbeda pada saat dijalankan? Apakah ada transisi yang lancar atau progresif?

Jawabannya mungkin "studio yang berbeda menggunakan teknik yang berbeda." Jika demikian, harap identifikasi beberapa praktik yang paling umum. Akan lebih bagus jika Anda bisa mengarahkan saya ke whitepaper / slide yang mencakup contoh-contoh spesifik.

ap_
sumber
1
Kemajuan SIGGRAPH 2014 dalam perenderan waktu nyata memiliki pembicaraan yang sangat menarik atas permintaan dari subdivisi permukaan tugas. Anda harus memeriksanya. Alih-alih memiliki mesh poli tinggi yang membuat poli lebih rendah, mereka mendefinisikan bentuk secara analitis dan menambahkan lebih banyak segitiga sesuai kebutuhan
Alan Wolfe
Kita dapat berbicara tentang keadaan terkini dalam algoritma LOD dan struktur data di sini, tetapi jika pertanyaannya adalah tentang bagaimana game modern melakukannya secara khusus, Anda mungkin lebih beruntung bertanya di gamedev.se: gamedev.stackexchange.com
Pseudonim
3
Saya meragukan itu. Game dev sangat ringan grafis. Sebagian besar pertanyaan persatuan dan java dengan beberapa penemuan jalur dan pertanyaan tingkat bingkai tetap dilemparkan ke dalam: p
Alan Wolfe
1
@Alan, Activision menggunakan banyak algoritma canggih untuk membuat game strategis 3D nyata bukan sn isometrik basis Sprite yang saya setuju dengan itu, tetapi mereka melakukan pekerjaan yang hebat di COD namun masih sedikit lamban dan malas bahkan pada tingkat awal dengan sejumlah kecil aset (saya berbicara tentang game mobile mereka pada iPhone 5s). Saya pikir Anda perlu mempelajari fitur-fitur ahli OpenGLES dan lapisan yang mendasari untuk berhasil menulis game seperti itu.
Iman
Saya sedang berbicara tentang versi konsol tugas mereka jika seandainya hal itu jelas.
Alan Wolfe

Jawaban:

22

Untuk LOD geometri, sebagian besar game cukup beralih di antara sejumlah jerat LOD yang telah ditentukan. Misalnya "Infamous: Second Son" menggunakan 3 jerat LOD ( Adrian Bentley - "inFAMOUS: postmortem engine Second Son", GDC 2014 ) dan "Killzone: Shadow Fall" menggunakan 7 jerat LOD per karakter ( Michal Valient - "Killzone: Shadow fall: Shadow fall demo postmortem ", Devstation2013 ). Sebagian besar dihasilkan, tetapi yang lebih penting (seperti karakter utama) dapat dibuat dengan tangan. Jerat sering dibuat menggunakan middleware Simplygon yang populer, tetapi kadang-kadang dihasilkan oleh seniman grafis dalam paket 3D favorit mereka.

Game dengan jarak pengundian besar juga menggunakan penipu untuk dedaunan, pohon, dan gedung tinggi ( Adrian Bentley - "inFAMOUS: postmortem mesin Second Son", GDC 2014 ). Mereka juga menggunakan LODs hirarkis, yang menggantikan satu set objek dengan satu. Sebagai contoh dalam "Just Cause 2" pohon pertama-tama diberikan secara individual sebagai jerat LOD normal, kemudian secara individual sebagai penipu dan akhirnya sebagai satu jaring hutan yang digabung ( Emil Persson, Joel de Vahl - "Mempopulasikan Massive Game World", Siggraph2013 ) dan dalam "Sunset Overdrive" bagian yang jauh di dunia digantikan oleh jala tunggal yang dihasilkan secara otomatis offline ( Elan Ruskin - "Streaming Sunset Opendrive's Open World", GDC2015 ).

Komponen lain dari sistem LOD adalah penyederhanaan bahan dan shader. Misalnya "Killzone: Shadow Fall" menonaktifkan ruang singgung dan pemetaan normal untuk LOD yang jauh ( Michal Valient - "Killzone: Shadow fall demo postmortem", Devstation2013 ). Ini biasanya diimplementasikan dengan menonaktifkan secara global seperangkat fitur shader per LOD, tetapi untuk mesin dengan grafik shader, di mana seniman dapat membuat custom shader, ini perlu dilakukan secara manual.

Untuk transisi LOD, beberapa permainan cukup mengganti jerat dan beberapa menggunakan dithering untuk transisi LOD yang lancar - pada saklar LOD, dua jerat dirender: pertama secara bertahap memudar dan memudar kedua di ( Blog Simon schreibt - "Assassins Creed 3 - LoD Blending" ). Teknik mesh progresif CPU klasik tidak digunakan karena membutuhkan pembaruan mesh yang mahal dan mengunggah ke GPU. Hardware Tessellation digunakan dalam beberapa judul, tetapi hanya untuk penyempurnaan LOD yang paling rinci, karena lambat dan secara umum tidak dapat menggantikan LODs geometri yang telah ditentukan.

LOD terrain ditangani secara terpisah untuk mengeksploitasi sifat spesifiknya. Terrain geometry LOD biasanya diimplementasikan menggunakan clipmaps ( Marcin Gollent - "Pembuatan lansekap dan rendering dalam REDengine 3" ). Materi terrain LOD ditangani dengan cara yang sama dengan LOD mesh atau menggunakan semacam tekstur virtual Ka Chen - "Adaptive Virtual Texture Rendering In Far Cry 4 .

Akhirnya jika Anda tertarik untuk melihat pipa LOD game nyata maka cukup telusuri dokumentasi dari salah satu mesin game modern: Unreal Engine 4 - "Menciptakan dan Menggunakan LOD " , CryEgnine - Static LOD dan Unity - LOD .

Krzysztof Narkowicz
sumber
1
mesin gim biasanya memiliki seperangkat metode yang telah ditentukan sebelumnya dan Anda tidak bisa masuk ke inti untuk benar-benar mengubah algoritma LOD. Apakah saya benar? Saya berbicara tentang kasus Anda menulis game sendiri dengan kerangka OpenGL atau SpriteKit, saya tidak tahu apakah seseorang dapat menyesuaikan algoritma LOD di Unity atau Unreal, apakah mungkin?
Iman
3

LOD (Level of Detail) berarti mengelola objek dalam skala tampilan yang berbeda, yang dapat dibagi menjadi dua bagian. Namun, Anda dapat menggunakan salah satunya dan itu sudah cukup untuk sebagian besar kasus.

  1. Tampilkan / sembunyikan lapisan (kelompok objek dengan tipe yang sama) tergantung pada besarnya (skala tampilan).

  2. Metode berbasis Aljabar Geomery, yang disebut Generalisasi (yang merupakan algoritma untuk menyederhanakan poligon). lihat gambar berikut

    generalisasi

Metode yang paling terkenal dan efisien untuk menggeneralisasi (menyederhanakan) sebuah poligon dikenal sebagai teorema polyhedron Descartes-Euler (Persamaan 4.5, maaf jika saya merujuk pada sebuah buku, itu yang terbaik yang bisa saya lakukan) dan digunakan oleh sebagian besar basis data spasial misalnya modul PostGIS di PostgreSQL. Ini hanya menghilangkan sisi yang lebih kecil dari poligon dan membuat yang sangat bulat. (Gambar di atas)

Untuk menerapkan LOD dalam game, Anda perlu menyimpan dan mengelola skala peta Anda (adegan) selama operasi zoom in / out. Skala berubah dari nol hingga tak terbatas dan Anda harus membaginya menjadi sejumlah rentang tertentu, misalnya, seperti ini:

  1. 1 / nol = tak terbatas hingga 1/50
  2. 1/50 hingga 1/100
  3. 1/100 hingga 1/1000
  4. 1/1000 hingga 1 / infinity = 0

Maka Anda perlu menentukan jenis objek Anda (lapisan) yang harus terlihat atau tidak terlihat di masing-masing rentang di atas. Misalnya jenis objek kecil seperti katup hidran seharusnya tidak terlihat ketika pengguna berada di kisaran keempat karena akan sangat kecil pada skala itu dan tidak dapat didiskriminasi sehingga tidak masalah jika Anda melewatkan menggambarnya pada layar.

Jadi, ketika pengguna menggunakan zoom in dan zoom out untuk mengubah pembesaran, ia bergerak melalui batas di atas dari satu ke rentang lainnya, dan game Anda menggunakan skala tampilan ini untuk mengelola level detail dengan menunjukkan atau menyembunyikan objek di tempat kejadian. Ini membuat solusi terpisah yang tiba-tiba objek memudar selama operasi zoom out Anda, namun memiliki skala tampilan dan rentang perbesaran yang ditentukan dengan cermat, pengguna tidak akan merasakan apa-apa.

Kelompok 4 rentang di atas hanyalah sebuah contoh dan Anda perlu menemukan yang terbaik untuk kasus Anda sendiri dengan coba-coba. Tidak ada aturan untuk itu.

Kadang-kadang permainan menggunakan metode LOD mereka sendiri, Subway Surfer untuk instan, menunjukkan kecil, tanpa tekstur persegi panjang untuk menunjukkan bangunan di kejauhan, dan dengan mendekat tiba-tiba mendapat tekstur, gamer merasakannya. Anda tidak berbicara tentang sistem proyeksi Anda yang sangat penting juga tidak berbicara tentang jenis permainan yang Anda buat.

Namun misalkan Anda mengimplementasikan game 3D lengkap dengan openGl dan Anda ingin memfilter beberapa mesh sebelum mentransfernya ke perangkat keras grafis, saya yakin ini akan membantu Anda mengurangi operasi yang mengikat / tidak mengikat dengan objek buffer dan array vertex (VBO, VAO) sementara berurusan dengan OpenGl.

Hanya menggunakan manajemen lapisan atau hanya menerapkan Generalisasi Euler

Dalam kebanyakan kasus, tidak perlu menerapkan algoritma generalisasi, dan memfilter objek hanya berfungsi dan membawa Anda ke efisiensi (refresh rate) yang Anda butuhkan, namun sangat tergantung, kasus per kasus. Meskipun ini adalah algoritme yang mudah yang hanya menghilangkan sisi kecil poligon, Anda perlu menentukan ambang yang merupakan produk besarnya dan angka konstan, sehingga sisi yang lebih besar bisa difilter dalam sudut pandang yang lebih jauh.

Melupakan penilaian lapisan dan hanya menerapkan algoritma generalisasi Eulers, menyediakan metode yang sangat rapi dan berkesinambungan di mana Anda hanya memeriksa setiap sisi dan garis terhadap ambang yang telah ditentukan sebelumnya dan menunjukkannya hanya jika mereka cukup besar untuk didiskriminasi di layar.

PS: perbesaran adalah angka float> 0 yang sama dengan 1 / skala dan skala biasanya <1 karena skala 1: 1 berarti Anda memiliki panjang dunia nyata dalam gim Anda.

Iman
sumber
Turun pemilih, harap pertimbangkan Anda memilih lagi, jika masih -1, Pertimbangkan meninggalkan komentar untuk saya. Terima kasih
Iman
Saya tidak downvote tetapi bagian dari saya bertanya-tanya apa sate seni di sini Jadi saya tidak bisa memilih.
joojaa
1
Saya telah downvoted karena sulit untuk membaca dan IMHO itu tidak relevan dengan LOD di game. Setelah mempertimbangkan kembali, saya memutuskan untuk membatalkan donwvote saya dengan melakukan upwoting dan cukup menambahkan jawaban saya sendiri.
Krzysztof Narkowicz
Keadaan seni seharusnya berarti pekerjaan yang sangat luar biasa tetapi metode yang berbeda menghasilkan berbeda pada berbagai kasus, misalnya Call of duty memiliki manajemen Layer dan mipmaping, namun Yang terhormat menghantui (DH 2014) menggunakan latar belakang dengan paralaks dan mipmaping yang telah dibuat umum tekstur. Subway surfer benar-benar cerita yang berbeda, dan saya katakan seni untuk mereka semua, meskipun Subway Surfer secara diam-diam menggambar bangunan dan objek perkotaan lainnya atau Call of duty agak lamban saat zooming atau panning. Saya pikir mereka semua yang terbaik dalam kasus mereka.
Iman
3

Iman sudah menyiapkan jawaban yang lengkap tetapi saya ingin menambahkan sesuatu padanya

LOD dapat dilakukan dengan dua cara berbeda

  1. Continous yang disebut CLOD dan merupakan optimasi poligon mesh
  2. Diskrit yang hampir setiap algoritma selain optimasi mesh poligon, dianggap berada di grup ini.

Misalnya mipmaping adalah yang bagus, cepat tapi berat yang dimiliki grup sekursi di atas

di sini Anda dapat menemukan penjelasan yang bagus untuk mipmaping dan kode implementasi dengan OpenGl.

Imzich
sumber