Apakah ada proyeksi 3D selain ortografi dan perspektif? [Tutup]

22

Pertanyaannya cukup banyak pada judulnya. Apakah ada proyeksi 3D yang penting selain ortografis dan perspektif yang dapat digunakan dalam sistem 3D seperti OpenGL?

Secara khusus, apakah ada yang memiliki kegunaan tertentu dalam desain game?

Ya ampun
sumber

Jawaban:

23

Ya, Untuk beberapa nama:

Proyeksi Pannini, misalnya, dapat menangkap bidang pandang yang luas dengan cara yang baik . (benar-benar hanya pendapat saya)

Saya pikir detail implementasi akan berada di luar cakupan pertanyaan khusus ini.


EDIT: Terima kasih atas komentarnya, saya salah mengeja Pannini. Dan untuk membuat pengeditan ini bermanfaat di sini ada beberapa lagi:

  • Paraboloid / Dual-Paraboloid (Berguna untuk refleksi, bayangan, kaca patri)
  • Equirectangular (Dapat menghasilkan tampilan peta dunia bola)
  • Bulat
  • Sinusoidal
MickLH
sumber
4
+1 untuk proyeksi Panini; Saya belum pernah mendengar itu sebelumnya. BTW, selama kita berbicara proyeksi non-linear, dual-paraboloid adalah salah satu yang kadang-kadang digunakan untuk peta lingkungan dan peta bayangan.
Nathan Reed
Menjadi sangat pemilih, tetapi tampaknya proyeksi "Pannini", bukan "Panini".
aardvarkk
Sangat keren! Saya menduga ini semua non-linear, seperti yang dikatakan Nathan Reed?
jmite
Saya percaya begitu, Anda kemungkinan besar harus menggunakan perangkat keras tessellation atau pemrosesan gambar untuk mencapainya dalam praktik. Saya mengalami kesulitan memikirkan proyeksi lain yang memetakan garis lurus menjadi garis lurus tetapi saya akan menambahkannya ke jawaban ini jika saya menemukan sesuatu.
MickLH
Mungkin tidak ada, ini adalah jenis pemikiran yang saya pikirkan!
jmite
15

Itu tergantung pada apa yang Anda maksud dengan "yang dapat digunakan dalam sistem 3D seperti OpenGL". :)

Secara sempit, perangkat keras grafis 3D dan API seperti OpenGL hanya berurusan dengan benar dengan proyeksi linier - proyeksi yang memetakan garis lurus di ruang dunia ke garis lurus pada gambar. Mereka tidak pernah mengubah sesuatu menjadi bentuk melengkung (kecuali jika itu melengkung). Ini karena GPU bergantung pada segitiga yang memiliki tepi lurus untuk merasternya dengan benar di layar.

Jika kita membatasi diri pada proyeksi linier, tidak ada terlalu banyak pilihan. Selain orto dan perspektif standar, ada juga variasi "off-center" yang diperoleh dengan menggeser tampilan frustum.

  • Proyeksi ortho off-center disebut proyeksi miring dan sering digunakan untuk diagram teknik tetapi tidak muncul banyak dalam permainan.
  • Proyeksi perspektif off-center digunakan dalam rendering 3D stereo , karena ternyata pandangan mata kiri dan kanan lebih baik bersatu di otak jika Anda menggeser frustum alih-alih memutarnya untuk fokus pada objek.

Proyeksi ini dapat direpresentasikan dengan matriks proyeksi 4 × 4 yang biasa dan digunakan dalam API 3D tanpa masalah.

Lalu ada proyeksi nonlinear, yang tidak memiliki batasan pemetaan garis lurus ke garis lurus; mereka diizinkan untuk mengubah sesuatu menjadi kurva. Ada banyak dari ini, termasuk silindris, bola, berbagai jenis mata ikan, dan lainnya.

Dengan proyeksi nonlinear, Anda tidak bisa hanya menggunakan matriks proyeksi; Anda harus entah bagaimana mengimplementasikan proyeksi sendiri menggunakan shader. Salah satu caranya adalah dengan menulis custom vertex shader untuk melakukan proyeksi per vertex. GPU masih akan menggambar segitiga dengan garis lurus di antara simpul, jadi sementara segitiga kecil akan cukup dekat untuk dikoreksi, segitiga yang lebih besar akan terasa salah. Ini dapat menyebabkan masalah , dan geometri mungkin perlu dibagi lagi dengan sangat halus agar dapat dirender dengan benar.

Pendekatan kedua untuk mendapatkan proyeksi nonlinier adalah membuat adegan menggunakan proyeksi perspektif reguler terlebih dahulu (mungkin ke cubemap, yang memiliki proyeksi perspektif untuk setiap permukaan kubus), kemudian menerapkan pixel shader pasca-proses untuk mengubah sampel ke yang diinginkan proyeksi nonlinier. Ini memiliki keuntungan karena tidak memerlukan modifikasi geometri, tetapi ini bisa lebih mahal karena pekerjaan rendering tambahan yang diperlukan, dan hasilnya bisa buram di beberapa area jika render first-pass tidak memiliki resolusi yang cukup. Pendekatan pasca-proses digunakan oleh game Oculus Rift, misalnya, untuk mengimplementasikan proyeksi nonlinear yang dibutuhkan Rift untuk bekerja dengan lensanya.

Nathan Reed
sumber
1

Saya tidak percaya tapi tidak ada yang menyebutkan Proyeksi Isometrik yang dulunya sangat umum.

Roy T.
sumber
11
Sejauh yang saya tahu, proyeksi isometrik adalah kasus penggunaan khusus dari dua jenis proyeksi lainnya, ortografis dan perspektif. Misalnya proyeksi orto dengan tampilan di sudut tertentu memberi Anda kamera isometrik.
Grimshaw