Fixed-Function vs Shaders: Yang untuk pemula?


16

Saat ini saya akan kuliah untuk ilmu komputer. Meskipun saya berencana untuk menggunakan mesin yang ada di beberapa titik untuk membuat game kecil, tujuan saya saat ini adalah mempelajari dasar-dasarnya: yaitu pemrograman 3D. Saya sudah melakukan beberapa penelitian mengenai pilihan antara DirectX dan OpenGL, dan sentimen umum yang muncul adalah bahwa apakah Anda memilih OpenGL atau DirectX sebagai platform roda pelatihan Anda, banyak pengetahuan dapat ditransfer ke platform lain. . Karena itu, karena OpenGL didukung oleh lebih banyak sistem (mungkin alasan konyol untuk memilih apa yang harus dipelajari), saya memutuskan bahwa saya akan belajar OpenGL terlebih dahulu.

Setelah saya membuat keputusan untuk mempelajari OpenGL, saya melakukan penelitian lebih lanjut dan menemukan tentang dikotomi yang entah bagaimana tidak saya ketahui selama ini: fungsi tetap OpenGL vs OpenGL modern berbasis shader yang dapat diprogram. Pada awalnya, saya pikir itu adalah pilihan yang jelas bahwa saya harus memilih untuk belajar OpenGL berbasis shader karena itulah yang paling umum digunakan dalam industri saat ini. Namun, saya kemudian menemukan Pemrograman Grafis 3D Pembelajaran Modern yang sangat populer oleh Jason L. McKesson, yang berlokasi di sini: http://www.arcsynthesis.org/gltut/

Saya membaca bagian-bagian pengantar, dan di bagian "Tentang Buku Ini", penulis menyatakan:

"Pertama, banyak hal yang dipelajari dengan pendekatan ini harus ditinggalkan ketika pengguna menemukan masalah grafis yang harus diselesaikan dengan kemampuan program. Kemampuan program menghapus hampir semua pipa fungsi tetap, sehingga pengetahuan tidak mudah ditransfer."

namun pada saat yang sama juga membuat kasus bahwa fungsi-tetap menyediakan kurva belajar yang lebih mudah dan lebih langsung untuk pemula dengan menyatakan:

"Secara umum dianggap paling mudah untuk mengajar pemrogram grafis orang baru menggunakan pipa fungsi tetap."

Secara alami, Anda dapat melihat mengapa saya mungkin berkonflik tentang paradigma mana yang harus dipelajari: Apakah saya menghabiskan banyak waktu untuk belajar (dan kemudian tidak mempelajari) cara-cara memperbaiki fungsi, atau apakah saya memilih untuk memulai dengan shader? Perhatian utama saya adalah bahwa shader modern yang dapat diprogram, entah bagaimana, membutuhkan programmer untuk sudah memahami pipeline fungsi tetap, tapi saya ragu itulah masalahnya.

TL; DR = Sebagai seorang programmer grafis yang bercita-cita tinggi, apakah saya tertarik mempelajari pemrograman 3D melalui fungsi tetap atau pemrograman berbasis shader modern?


Ada beberapa pertanyaan serupa untuk ini juga ...
not not

"namun pada saat yang sama juga membuat kasus bahwa fungsi-tetap menyediakan kurva belajar yang lebih mudah dan lebih langsung untuk pemula dengan menyatakan:" Saya ingin tahu. Bagaimana tepatnya hal itu membuat kasus itu? Karena kutipan itu dengan jelas mengatakan, "Ini umumnya dianggap paling mudah ..." (penekanan ditambahkan). Seperti dalam, itu mungkin dianggap benar, tetapi itu tidak berarti itu benar.
Nicol Bolas

Ya itu cara canggung untuk mengucapkannya.
Rob Hays

Pipeline fungsi-tetap telah ditinggalkan dalam OpenGL dan DirectX, jadi saya tidak akan membuang waktu Anda dengannya. Shader dasar cukup mudah, dan tentu saja tidak lebih rumit dari cukup memahami untuk membuat konteks rendering bekerja.
3Dave

Jawaban:


30

Saya tidak membeli argumen bahwa lebih mudah untuk memulai dengan hal-hal fungsi tetap. Mungkin saja fungsi tetap memungkinkan Anda melakukan hal-hal tertentu dengan kode lebih sedikit - dalam OpenGL fungsi tetap, misalnya, Anda bisa mendapatkan pencahayaan / bayangan yang sangat mendasar dengan melakukan glEnable(GL_LIGHTING)dan beberapa panggilan lainnya. Masalahnya adalah segera setelah Anda menginginkan sesuatu yang sedikit berbeda - pencahayaan per-pixel, katakanlah, alih-alih pencahayaan per-vertex - Anda harus meninggalkan hal-hal fungsi-tetap sepenuhnya dan menulis shader untuk mengimplementasikan kedua fungsi tetap apa pun yang Anda gunakan sebelumnya, ditambah apa pun yang ingin Anda ubah.

Sepertinya itu akan lebih sederhana dan kurang membingungkan untuk menggunakan shader sepanjang waktu. Shader memang membutuhkan sedikit lebih banyak pekerjaan pengaturan karena Anda memiliki file sumber terpisah yang perlu dimuat dan dikompilasi, beberapa panggilan C tambahan untuk mencari dan mengatur parameter, dll. Namun begitu Anda mendapatkan shader, itu adalah hal termudah. untuk mengkode beberapa efek yang berbeda, cobalah ide-ide yang berbeda, dll. Dan Anda tidak perlu peduli di mana batas-batas sistem fungsi tetap dan apakah itu dapat atau tidak dapat melakukan apa yang Anda inginkan; shader dapat melakukan apa pun yang Anda bisa menulis kode, modulo batas kinerja dan memori yang biasa.


Keren, terima kasih atas tanggapannya. Kemungkinan besar saya akan berakhir tepat untuk shader.
Rob Hays

3
+1 - ini juga agak seperti "Learning C ++" vs "Learning BASIC". Ini akan membawa Anda lebih lama untuk belajar C ++ tetapi Anda akan belajar lebih banyak dalam jangka panjang.
Jonathan Dickinson

3
Saya ingin merekomendasikan opengl-tutorial.org . Situs ini menjelaskan dasar-dasarnya dengan sangat baik dan hanya menggunakan shader.
Exilyth

3

Saya akan mengatakan untuk memulai dengan fungsi tetap pada GLUT. Saya tidak akan mengatakan banyak tentang ini, tetapi ide - ide di balik shader cukup rumit dan pengetahuan yang diperlukan adalah pemrograman 3d dasar (yaitu pembuatan vertex dan matriks transformasi dll). Ada lebih banyak tempat Anda dapat mengacaukan menggunakan shader, ada banyak lagi yang bisa dikodekan.

Lihat tutorial saya , dan ini lighthouse3d yang


2

Saya kedua lurus untuk shader. Ini tidak benar-benar yang jauh lebih sulit untuk mengatur, dan ketika Anda melewati rintangan pertama Anda memiliki kekuatan penuh di ujung jari Anda.

Lebih penting lagi, Anda akan menemukan bahwa pemrograman shader lebih cocok dengan persamaan matematika yang Anda lihat dalam buku dan kuliah grafik di perguruan tinggi.


0

Saya akan menyarankan menggunakan pipa fungsi tetap sebagai tulang punggung program Anda. Saya merasa lebih mudah untuk memiliki sesuatu yang muncul menggunakannya bukan murni shader. Kemudian, ketika Anda tahu Anda belum mengacaukan simpul atau normals Anda, Anda dapat perlahan-lahan tapi pasti masuk ke dunia teduh.

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.