Butuh saran untuk mesin grafis berbasis 3D BSP [ditutup]


8

Saya telah memberi kode pada diri saya seorang penampil OpenGL BSP untuk format game lama. Ini sangat mirip dengan format file Quake 3. Karena minat saya mengembangkan mesin grafis, saya ingin berkembang sambil melihat menggunakan teknologi saat ini. Jadi saya berpaling kepada Anda, para ahli pada subjek untuk arahan apa yang harus fokus. Saya ingin ini secepat mungkin dan mengingat format file lama sangat sederhana dan memiliki beberapa poligon, saya pikir ini harus bisa dilakukan. Ini pertanyaan saya:

  1. Pencahayaan a. Apakah masuk akal bagi saya untuk belajar pencahayaan sudut atau haruskah saya menerapkan pencahayaan per piksel saja? b. Saya tahu OpenGL memiliki batas 8 cahaya. Haruskah saya secara realistis hanya menggunakan salah satu dari itu untuk cahaya sekitar dan komputer lainnya melalui shader? Jika tidak, apa yang harus saya lakukan?

  2. Menyortir / Memusnahkan a. Algoritma apa yang paling cepat digunakan untuk menyortir permukaan agar diurai. Kompleksitas sebenarnya bukan masalah. Saya ingin mempelajari apa yang sedang digunakan dan cara untuk benar-benar hanya memberikan hal-hal yang dapat saya lihat. Saya telah melihat sejumlah algoritma yang dijelaskan seperti algoritma pelukis dan saya bertanya-tanya apa yang paling masuk akal untuk geometri berbasis BSP. b. Jika saya memiliki tekstur dengan masker alpha, saya diberitahu bahwa penyortiran memiliki semacam keterlibatan dengan proses ini. Bagaimana cara saya mengizinkan mereka membuat dengan benar dalam ruang 3d?

  3. Pipa Grafik a. Haruskah saya mengirim data geometri saya melalui VBO? Apakah ini standar yang digunakan saat ini? b. Jika saya memiliki sejumlah "wilayah", mungkin 200-300, haruskah saya menemukan cara yang lebih baik untuk mengirimnya ke GPU tanpa mengirim 200-300 bongkahan. Haruskah saya menggabungkan mereka menjadi satu dan menyimpan referensi yang terkait dengan masing-masing.

Adakah tips lain untuk rendering berbasis BSP dan hal-hal semacam itu?

Juga, jika saya mengatakan sesuatu yang tidak benar, tolong perbaiki saya. Saya adalah orang yang lebih suka dikoreksi dan sedikit malu daripada bodoh dan tidak sadar.

Terima kasih atas waktu Anda. Saya sangat menghargainya.


Apakah Anda berencana untuk menempatkan semua segitiga adegan Anda ke dalam BSP, juga yang dinamis seperti karakter animasi atau objek bergerak? BSP tidak terlalu bagus dalam hal objek dinamis.
Maik Semder

Tidak punya waktu untuk komentar penuh saat ini, tetapi periksa icculus.org/twilight/darkplaces/technotes.html dan jangan ragu untuk naik #darkplaces di irc.anynet.org dan tanyakan pada LordHavoc / orang lain pertanyaan Anda .
user_123abc

Jawaban:


1

Jika Anda - seperti yang Anda katakan - tertarik dengan teknologi saat ini :

1) Pencahayaan: pencahayaan Per-pixel, pasti. Jika Anda ingin melihat rendering gen saat ini, Anda akan melihat penulisan vertex- dan pixelshaders. Sederhana seperti itu. Mereka menawarkan fleksibilitas yang hampir tidak terbatas dan tidak jauh lebih sulit untuk digunakan daripada pipa fungsi tetap, jika Anda mulai mempelajarinya dengan benar. Batas 8 cahaya OpenGL hanya berlaku untuk pengaturan pipa fungsi tetap kuno. Jangan pergi rute itu, pelajari OpenGL Core dan lupakan semua hal tanggal glBegin / glEnd.

2) Penyortiran / Pemusnahan: Untuk memulai: hanya mengurutkan jika Anda perlu transparansi. Hanya menyisihkan objek yang berada di luar view-frustum.

3) Jika Anda menggunakan OpenGL, gunakan VBO dan VAO.

-

Tidak diminta: jika Anda membuat pemirsa untuk format BSP kuno (saya curiga ada sesuatu dari ould Valve / ID engine?), Anda harus bisa meloloskan menggambar seluruh level tanpa ada optimasi (culling / bsp) ) sama sekali dan masih mendapatkan framerate penuh pada perangkat keras modern;)

Tip OpenGL: Dapatkan OpenGL Superbible edition ke-5. Ini akan mengajarkan Anda bagaimana melakukan OpenGL modern dan tidak akan mengaburkan pikiran Anda dengan hal-hal yang nantinya akan Anda ketahui sudah usang.


-3

1.a pencahayaan Per-vertex lebih mudah daripada pencahayaan per-pixel (pencahayaan per-vertex terintegrasi ke dalam OpenGL, pencahayaan perpixel membutuhkan shader khusus).

1.b Jika Anda memiliki delapan lampu, gunakan! Anda harus menghitung lampu mana yang terlihat.

3.a Gunakan VBOS. Jangan pernah gunakan glBegin / glEnd (kecuali jika Anda menggunakan daftar tampilan, tetapi dalam situasi Anda VBO adalah solusi yang lebih baik)

3.b Anda tidak perlu khawatir tentang kinerja saat program masih dalam pengembangan. Apalagi dengan perangkat keras todays. Jadi, kirim 200-300 potongan Anda.

Saya tidak tahu peta BSP dengan cukup baik untuk membantu Anda dengan pertanyaan Anda yang lain.


3
-1 untuk 3.b. Saya benci mantra "jangan khawatir tentang kinerja" yang diterapkan secara salah pada semuanya. Ini memiliki tempatnya, karena jangan menghabiskan 50% dari waktu pengembangan untuk membuat sesuatu berjalan 2% lebih cepat. Tetapi ketika merancang sistem yang lebih besar, ada baiknya memiliki rencana yang efisien. Data yang dikirim ke GPU dalam 200-300 potongan mungkin akan menyebabkan CPU dan GPU bekerja lebih sulit daripada jika semua itu dikirim sebagai satu potongan.
AttackingHobo

@AttackingHobo +1
Jonathan Connell
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.