Untuk game sprite 2D, saya dapat memahami bahwa sprite bergerak pada sumbu X dan Y. Namun, untuk game 3D, bagaimana mesin game menghitung cara membuat lingkungan 3D ke monitor komputer 2D datar?
Math.PI
banyak.
Untuk game sprite 2D, saya dapat memahami bahwa sprite bergerak pada sumbu X dan Y. Namun, untuk game 3D, bagaimana mesin game menghitung cara membuat lingkungan 3D ke monitor komputer 2D datar?
Math.PI
banyak.
Jawaban:
Sprite 3D mendapatkan sumbu Z baru yang menyimpan kedalaman, ukuran penskalaan dan gerakan di bidang X / Y. Sprite yang lebih jauh memiliki nilai Z yang lebih besar. Sekarang, bagi ukuran sprite dan gerakan sumbu X / Y dengan sumbu Z. Seperti yang telah dicatat orang lain, ini adalah proyeksi perspektif 3D . Inilah ilustrasi terbaik yang bisa saya temukan:
Ini masuk akal secara konseptual karena hal-hal yang lebih jauh terlihat lebih kecil. Gerakan mereka yang tampak juga terlihat lebih kecil.
Selain itu, objek dekat harus digambar di atas objek jauh. Sekali lagi, ini masuk akal secara konseptual karena objek dekat menghalangi pandangan objek di belakangnya.
Teknik-teknik ini dapat diimplementasikan pada tingkat sprite. Namun, untuk proyeksi paling realistis, setiap sprite memiliki model 3D dan ditampilkan pada tingkat piksel.
Ini mirip dengan bagaimana Anda dapat mengambil gambar 2D dunia kami di kamera. Lingkungan 3D dijelaskan dalam hal koordinat X, Y, dan Z, tetapi pada akhirnya Anda perlu memetakannya ke layar 2D dengan hanya sumbu X dan Y. Ini dilakukan dengan proyeksi , di mana setiap titik 3D diproyeksikan ke bidang tampilan 2D.
Sederhananya, Anda dapat membayangkan garis proyeksi dari kamera virtual dalam ruang 3D ke setiap titik 3D dengan melewati bidang tampilan. Titik di mana garis proyeksi memotong bidang 2D adalah proyeksi titik 3D. Dalam proyeksi ortografis, garis proyeksi ini semuanya paralel; jarak antara objek dan kamera tidak membuat perbedaan untuk bentuk yang diproyeksikan. Jenis proyeksi ini tidak realistis tetapi berguna dalam kasus-kasus tertentu seperti menggambar grafik 2D menggunakan mesin 3D (HUD misalnya). Jenis proyeksi lainnya adalah proyeksi perspektif di mana garis-garis ini bertemu membuat objek yang lebih jauh tampak lebih kecil dan memberikan hasil yang lebih realistis. Halaman ini memiliki beberapa angka yang dapat membantu Anda memvisualisasikan proses.
Proyeksi adalah salah satu dari beberapa objek transformasi yang dialami dalam pipa grafik , dan biasanya dilakukan dengan menggunakan matriks proyeksi . Perhatikan bahwa meskipun proyeksi menyiratkan membuang koordinat Z, pada kenyataannya nilai Z yang ditransformasikan masih menggunakan ukuran kedalaman layar sehingga kita dapat mengetahui objek mana yang terlihat dan mana yang terhalang oleh objek lain. Ini dikenal sebagai z-buffering .
Ini semua tentang proyeksi , operasi geometris yang memungkinkan Anda menentukan ruang dari ruang lain dengan dimensi superior (pada dasarnya, dalam kasus Anda, Anda menggambarkan gambar 2D dari lingkungan 3D).
Sederhananya, ini adalah bagaimana mesin rendering 3D menghasilkan gambar (diberikan adegan 3D & proyeksi):
Untuk setiap piksel dari gambar yang dihasilkan
Tentu saja ini adalah model yang sederhana, saya tidak berbicara tentang objek reflektif / bias / tembus efek khusus seperti asap ...
Matriks . Atau lebih tepatnya, banyak matrik matematika.
Ini hal yang menakutkan bagi yang belum tahu. Biasanya ada tiga matriks 4x4 yang terlibat dalam mengubah sekelompok koordinat 3D dalam ruang menjadi koordinat 2D di layar (termasuk kedalaman ke layar sebagai Z).
Matriks 3D adalah seperangkat 16 nilai floating point yang diatur dalam kisi 4x4. Algoritma digunakan untuk menghasilkan nilai-nilai yang dibutuhkan dan kemudian menggunakan perkalian matriks-vektor, angka-angka ini mentransformasikan vektor 3 dimensi (X, Y, Z).
[ 1, 0, 0, 0 ]
[ 0, 1, 0, 0 ]
[ 0, 0, 1, 0 ]
[ 0, 0, 0, 1 ]
Ini adalah matriks identitas . Ini pada dasarnya tidak melakukan apa pun terhadap koordinat vektor.
Yang pertama adalah dunia atau matriks model . Matriks ini mengambil simpul dalam model individual (seperti peti) yang dimodelkan di sekitar titik asal (0, 0, 0) dan mentransformasikannya menjadi koordinat titik dunia. Ini mungkin termasuk penskalaan objek, memutarnya di sekitar asalnya dan akhirnya menerjemahkannya ke tempat ia berada di tempat kejadian.
Matriks kedua adalah view matrix. Ini mengambil koordinat dunia dan mengubahnya sehingga mereka berada dalam konteks tampilan. Konsep kamera biasanya digunakan untuk menghasilkan matriks ini.
Kamera biasanya berisi vektor posisi , vektor arah atau target , dan vektor atas . Ini sampai vektor menggambarkan 'berputar' kamera.
Vektor ini digunakan untuk menghasilkan apa yang disebut dengan melihat matriks.
Pengaruh yang dimilikinya mirip dengan matriks dunia dalam kenyataan bahwa ia pada dasarnya memutar dan menerjemahkan dunia di sekitar kamera untuk "memposisikan" kamera.
Kamera yang 10 unit di sepanjang sumbu X akan menerjemahkan koordinat dunia 10 unit ke arah lain.
Bagian terakhir dari teka-teki adalah matriks proyeksi . Dalam proyeksi perspektif seperti kamera, matriks mentransformasikan hampir layar koordinat untuk memberikan ilusi perspektif dengan bidang pandang x derajat.
Jika Anda berpikir tentang sudut-sudut layar (untuk game 640x480), ini adalah bagaimana proyeksi "meluruskan" koordinat di sepanjang sumbu Z dalam koordinat 2D layar. Untuk proyeksi ortografis, tidak ada penskalaan yang terjadi di sepanjang sumbu Z ke layar. Untuk perspektif, semakin jauh objek, semakin kecil hubungannya dengan luasan layar.