Mengapa game modern menggunakan pendekatan render-to-tekstur untuk cermin?

40

Saat melihat game-game lama seperti Mario64 atau DukeNukem3D, semua mirror dalam game pada dasarnya hanya lubang di dinding dengan salinan geometri cermin di depan cermin yang diletakkan di belakangnya. Dalam kasus DukeNukem3D, seseorang bahkan dapat mengaktifkan tanpa klip dan berjalan ke ruang cermin itu.

Sebaliknya, game modern menggunakan pendekatan render-to-tekstur untuk cermin. Hal ini menyebabkan cermin menjadi terlihat pixel ketika mendekati mereka. Salah satu game pertama yang saya perhatikan pendekatan ini adalah Luigi's Mansion, tetapi tampaknya digunakan di hampir semua game modern.

Perubahan apa dalam perangkat keras atau mesin yang membuat pendekatan kedua menjadi begitu dominan akhir-akhir ini dan apa manfaatnya? Dalam hal visual murni pendekatan pertama tampaknya lebih unggul, karena tidak menderita masalah pixelation.

Grumbel
sumber
14
Bagaimana jika Anda ingin cermin di pintu antara dua kamar?
Hebat

Jawaban:

37
  1. Menggunakan RTT (render-to-tekstur) memungkinkan untuk dengan mudah skala kualitas render (resolusi, LOD, kompleksitas pencahayaan) untuk kinerja yang dapat disesuaikan. RTT juga memudahkan untuk mengganti permukaan dengan cubemap pada jarak tertentu di mana sulit untuk melihat pantulan secara tepat.
  2. Karena output adalah tekstur, ada lebih banyak pilihan mengenai apa yang dapat dilakukan dengannya setelah itu (pencahayaan, bayangan, pencampuran, distorsi, dll.).
  3. Jika versi geometri cermin ditempatkan di tempat kejadian, itu akan membutuhkan pemusnahan yang lebih rumit ketika bersinggungan dengan geometri nyata dan dapat dilihat di belakang sudut. Di game yang lebih lama, level dirancang untuk menghindari ini. Belum lagi seseorang harus melakukan mirroring yang sebenarnya.
  4. Jika geometri tidak secara manual dicerminkan, rendering harus dilakukan dengan mengubah view matrix dan mode culling (untuk mengimbangi inversi ruang dalam matriks), dan menggunakan buffer stensil untuk memotong cermin. Mesin modern lebih suka membuat semua status render di muka, sehingga akan ada masalah kecil dengan membuat salinan dari setiap adegan membuat kondisi dengan perubahan yang diperlukan untuk rendering cermin.

Jadi pada dasarnya menggunakan RTT memberi lebih banyak kebebasan untuk semua orang.

snake5
sumber
Pada tanggal 3: Sebagian besar mesin game FPS menggunakan algoritme pembelahan (seperti DOOM "engine" yang terkenal) yang sudah melakukan kliping pada (kemungkinan besar quad) poligon untuk pemusnahan visibilitas. Mesin seperti itu dapat dengan mudah menginjak quad "cermin" sebagai portal penglihatan ke sebuah ruangan di belakang cermin tanpa khawatir tentang geometri cermin di luar cermin.
dronus
@dronus Apa? Daripada mengapa repot-repot membuat "cermin" di tempat pertama? Buka saja lubang di dinding.
S. Tarık Çetin
Karena geometri nyata mungkin tidak meninggalkan ruang di belakang dinding cermin, seperti cermin nyata tidak perlu memiliki ruang di belakang untuk bekerja.
dronus
29

Tidak, Anda salah - bukan itu cara cermin Duke Nukem 3D bekerja sama sekali.

DN3D menggunakan mesin portal . Sambungan antara dua sektor mana pun semena-mena, dan ketika mesin rendering datang ke portal, ia tahu bahwa ia harus mulai merender sektor lain di dalamnya. Sektor di belakang cermin pada dasarnya adalah tempat dudukan untuk berurusan dengan kekhasan dalam mesin - satu-satunya titik sektor ini adalah lebih besar dari apa pun yang Anda butuhkan "tercermin". Itu tidak mengandung geometri nyata. Bahkan, ia bekerja dengan cara yang hampir sama dengan "portal" bekerja di Portal - kecuali bahwa Portal (itu sendiri didasarkan pada mesin portal) menciptakan portal saat runtime, dan memiliki batas berapa kali portal dapat berulang (yaitu A -> B -> A -> B -> A ...), sedangkan Build (DN3D) akan hancur saat tumpukannya meluap jika Anda mengarahkan cermin ke cermin lain.

Sudah jelas betapa sederhananya menerapkan cermin dengan itu - membuat portal yang menunjuk kembali ke ruangan. Ini berarti bahwa rendering cermin biayanya persis sama seperti rendering ruangan itu sendiri, memberikan kinerja dan konsistensi yang hebat. Selama Anda tidak mengarahkan cermin ke cermin lain, itu saja. Jika Anda melihat melalui kode sumber mesin Bangun, Anda akan melihat tidak ada cermin penanganan kode sama sekali - tidak harus ada satu, karena itulah cara kerja portal CATATAN: sebenarnya, ada kode untuk membalik piksel yang diberikan - itu hanya saja tidak membalik geometri dan semua berbagai sprite dan efek. Editor harus bisa membuat portal "palsu" ini, meskipun - melihat ke belakang pada dirinya sendiri. Jika Anda ingin tahu lebih banyak tentang Build engine yang cukup pintar, ada analisis hebat dari Fabien Sanglard di internal Build engine . Seluruh mesin telah open source dan porting ke platform modern juga, meskipun yang lama masih bekerja dengan sempurna pada Windows 10 (diuji untuk Anda: P). Banyak game berbasis Build juga bersumber terbuka dan / atau dibuat ulang.

Mengapa ini tidak lagi digunakan? Beberapa mesin tidak lagi menyukai portal. Sulit untuk menerapkan banyak peretasan grafis dan pengoptimalan - Saya tidak bisa mengarahkan Anda ke hal yang spesifik, tetapi banyak pemrosesan pasca tergantung pada peretasan yang tidak akan bekerja di mesin portal yang sebenarnya (mereka membuat banyak asumsi yang tidak lagi ditahan). Ini pada dasarnya adalah jenis masalah yang sama dengan permainan ini dengan citra stereoskopis - peretasan tidak lagi berfungsi.

Yang terpenting, mirror menjadi lebih rumit. Mereka dapat memiliki bentuk yang kompleks, tekstur, mereka mungkin berada di tanah (juga dikenal sebagai "air") dll. Sementara semua masalah tersebut dapat dipecahkan dalam mesin portal, RTT menjadi pilihan yang lebih sederhana di beberapa titik, dan GPU cukup cepat untuk menanganinya.

Namun, bahkan dengan semua itu, ada banyak game dengan akselerasi perangkat keras 3D yang melakukan hal-hal "nyata". Dari game yang lebih tua, Quake 3 atau Alien vs Predator, misalnya. Sejauh yang saya tahu, Source engine game masih menggunakan mirror "asli". Jika Anda berharap orang akan mendekati cermin, dan Anda dapat menjamin bahwa tidak ada terlalu banyak permukaan reflektif pada saat yang sama (misalnya melalui desain level), portal mirror masih sangat menarik.

Luaan
sumber
Rupanya alasan untuk kepercayaan umum bahwa Duke Nukem 3D bekerja dengan cara ini adalah kenyataan bahwa dalam desain tingkat sebenarnya, ruang di belakang cermin adalah sebesar ruang yang dipantulkannya, meskipun mesin rendering sebenarnya tidak memerlukannya.
Random832
Juga, portal non-mirror tidak, well, mirror hal-hal, jadi saya tidak tahu bagaimana "tidak ada cermin penanganan kode" adalah mungkin.
Random832
5
@ Random832 Itu semacam keharusan - ada beberapa artefak visual jika beberapa sektor muncul di tempat di mana ruang cermin seharusnya. Itulah salah satu bagian di mana sebagian besar asumsi tidak berbahaya sangat penting untuk kinerja. Jika Anda pernah bermain-main dengan Build, Anda mungkin memperhatikan bahwa ketika dua sektor melintas pada ketinggian yang sama, mereka tidak akan menghasilkan dengan baik. Sedangkan untuk mirroring, ia bekerja dengan cara yang sama seperti cermin kehidupan nyata bekerja. Apakah Anda pernah bertanya-tanya mengapa mirror hanya "flip" pada sumbu y? Itu alasan yang sama mengapa Anda tidak perlu membalik portal yang menghubungkan Anda kembali ke ruangan yang sama.
Luaan
Intinya adalah, seorang yang normal portal yang mengarah ke sebuah ruangan yang wajah dalam arah yang berlawanan akan memiliki hal-hal rotate 180 derajat bukannya mencerminkan mereka. Jadi memiliki kemampuan untuk tidak melakukannya dianggap sebagai penanganan khusus untuk cermin. (Tidak memiliki kemampuan untuk melakukannya akan berarti bahwa portal tidak berfungsi sebagai portal dan hanya cocok untuk mirror, dalam hal ini seluruh sistem adalah penanganan khusus untuk mirror). Dan, ya, saya tahu mengapa mirror "hanya" flip "pada sumbu y". Bahkan, mereka membalik sumbu z. Tetapi fakta bahwa mereka membalik jumlah kapak yang aneh membuat mereka berbeda dari portal.
Random832
@ Random832 Tergantung pada apa yang Anda sebut sumbu y, tentu saja :) Dan ya, Anda benar, ada penanganan khusus. Tapi ini sangat menarik - membalik data yang diberikan, bukan geometri (dan sprite dan semuanya ... sebenarnya sedikit kerja, sebenarnya). Kerangka portal dibalik, portal dirender seperti biasa, dan kemudian semuanya dirender mundur, baris demi baris.
Luaan
3

RTT akan digunakan jika itu mungkin tetapi pipa render perangkat keras adalah salah satu cara.

Perangkat keras yang lebih lama juga memiliki keterbatasan yang mencegah render ke tekstur. Menulis ke RAM berarti tidak dapat dibaca pada saat bersamaan. Untuk meningkatkan kinerja rendering, buffer tujuan dikunci hanya untuk menulis, hanya perangkat keras layar yang dapat membacanya. Anda dapat meminta membaca, tetapi itu mengunci RAM dan render harus menunggu kunci untuk menghapus sebelum dapat memulai frame berikutnya. RTT akan menyebabkan hambatan besar pada pipa dan dengan demikian solusi lain digunakan.

Anda akan menemukan bahwa sebelum pipa render Hardware adalah norma RTT digunakan karena menyediakan cara untuk mengurangi beban rendering. 3D dirender ke sprite untuk menyediakan konten 3D semu. Rendering tekstur terlalu mahal (CPU) untuk digunakan saat itu, terlepas dari mesin khusus yang berada di luar pasar konsumen umum.

Blindman67
sumber
1

Duke Nukem mengatasinya dengan merender ulang geometri di belakang cermin, jawaban lain sebagian benar. Ada area di belakang mirror yang sebenarnya tidak mengandung geometri (dalam file data game), geometri di-render kembali pada saat run time infact, alasan area-area tersebut ada adalah untuk menghindari penempatan tanpa sengaja sepotong level di sana saat mengedit level :

karena ada area yang ditandai Anda tidak akan menempatkan geometri secara tidak sengaja di sana.

GameDeveloper
sumber