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.

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.
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.

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.

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.

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)