Pelatihan teknologi ray-casting, bagian 1

2D indie ... Proyek AAA 3D ​​... Atau mungkin ada sesuatu di antaranya?



Salam untuk semua pembaca. Saya memutuskan untuk meringkas dan menerjemahkan serangkaian artikel yang bagus "Tutorial Ray-Casting Untuk Pengembangan Game Dan Tujuan Lainnya" oleh F. Permadi tentang studi teknologi ray-casting.



gambar


Publikasi ini menyentuh dan menggabungkan artikel asli What is Ray-Casting dan Ray-Casting vs Ray-Tracing For Game Development .



Perlu dicatat bahwa dalam upaya membuat mesin pseudo-3D (yang juga dapat Anda tulis artikelnya), saya mempelajari tutorial ini secara menyeluruh. Saya harap saya pikir ini membantu saya menemukan kata-kata yang paling sukses saat menerjemahkan dan juga tidak kehilangan arti dari apa yang telah tertulis.



Baiklah ... Ayo mulai!



Apa itu ray-casting?



Ray-casting (selanjutnya disebut casting) adalah teknologi yang mengubah sekumpulan data terbatas (peta yang paling sederhana, atau denah lantai) menjadi proyeksi 3D dengan "mentransmisikan sinar" dari sudut pandang di seluruh bidang pandang. Misalnya, gambar di bawah ini menunjukkan bagaimana melempar mengubah sesuatu yang 2D A menjadi sesuatu yang hampir 3D B.



gambar


Ray-casting dan ray-tracing



Seperti ray-casting, ray-tracing "mendefinisikan bagian yang terlihat dari suatu permukaan dengan memancarkan sinar imajiner cahaya dari sudut pandang ke suatu objek dalam pemandangan."



Dua definisi sebelumnya menunjukkan bahwa melempar dan menjiplak adalah hal yang sama. Faktanya, beberapa buku menggunakan kedua istilah tersebut secara bergantian. Namun demikian, dari sudut pandang programmer gamedev, melempar sinar harus dianggap sebagai kasus khusus implementasi penelusuran.



Melempar lebih cepat dari pada menjiplak. Ini dimungkinkan karena fakta bahwa ia menggunakan beberapa batasan geometris untuk mempercepat proses rendering. Misalnya, dinding selalu tegak lurus dengan lantai (ini bisa dilihat di game seperti Doom atau Wolfenstein 3D). Jika bukan karena pembatasan seperti itu, teknologi lempar tidak akan mungkin dilakukan.



Paragraf berikut memberikan perbandingan global tentang melempar dan menjiplak. Hal utama yang harus diingat adalah bahwa "melempar menggunakan lebih sedikit sinar daripada menjiplak, karena batasan geometris tertentu." Atau bahwa "melempar adalah implementasi khusus dari penelusuran."



Prinsip



Melempar : Sinar dilempar dan bergerak dalam kelompok berdasarkan beberapa batasan geometris. Misalnya, pada layar dengan resolusi 320x200, "generator sinar" hanya akan merilis 320 buah (kita mendapatkan angka ini dari akibat wajar bahwa layar dengan lebar 320 piksel memiliki 320 kolom vertikal).



Trace : setiap sinar dihitung secara terpisah, yaitu setiap titik pada layar monitor (biasanya piksel) dilacak oleh salah satu sinarnya. Misalnya, pada layar dengan resolusi 320x200, kita membutuhkan 64 ribu (320 * 200 = 64000) sinar, yang 200 kali lebih lambat dibandingkan dengan melempar.



Rumus



Sebagai aturan, saat melempar, kesalahan dalam penghitungan diperbolehkan. Saat merutekan, semuanya harus seakurat mungkin.



Kecepatan



Melempar jauh lebih cepat daripada menjiplak dan cocok untuk proses waktu nyata. Tracing tidak cocok dengan cara apapun (kecuali kita memiliki PC dengan frekuensi 500 GHz).



Kualitas



Saat dijatuhkan, kami mendapatkan gambar dengan kualitas sedang / buruk. Anda dapat melihat pembagian menjadi elemen blok. Saat menjiplak, gambar dibuat serealistis mungkin - terkadang bahkan terlalu berlebihan.



gambar


Adegan dari Wolfenstein 3D. Perhatikan gambar terbagi menjadi balok persegi panjang. Objek (senjata) dan musuh (anjing) hanyalah bitmap transparan yang diskalakan dan digambar di atas latar belakang.



gambar


Sebuah adegan dari game 7th Guest. Hasil renderingnya luar biasa. Namun, pergerakan pemain terbatas pada jalur yang ditentukan sebelumnya (ini disebabkan oleh fakta bahwa jumlah gambar yang dirender sebelumnya terbatas).



Dunia luar



Saat melempar, kami dibatasi secara geometris dan hanya bentuk sederhana yang tersedia. Saat menjiplak, bentuk apa pun dapat dirender.



Penyimpanan



Melempar : Gambar yang dirender tidak disimpan ke disk. Biasanya, hanya peta pemandangan itu sendiri yang disimpan di medianya, dan gambar yang sesuai dibuat dengan cepat.



Trace : Gambar yang dirender disimpan ke disk dan dimuat dari sana saat diperlukan. Saat ini, belum ada bagian perangkat keras yang dapat menampilkan hasil penelusuran sinar dengan cepat.



Contoh dari



Pelemparan:



  • Wolfenstein 3D (Perangkat Lunak iD)
  • Shadow Caster (Raven)
  • Arena (Bethesda)
  • Doom (Perangkat Lunak iD)
  • Kekuatan Gelap (LucasArts)


Jejak:



  • Tamu ke-7 (Trilobyte)
  • Jalur Kritis (Mechadeus)
  • Jam 11 (Trilobyte)
  • Myst (Cyan)
  • Cyberia (Xatrix)


Akhir dari bagian pertama




All Articles