Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. 3D Rendering
Gamedevelopment

Akhir dari Fixed-Function Rendering Pipelines (dan Cara Untuk Terus Maju)

by
Length:MediumLanguages:

Indonesian (Bahasa Indonesia) translation by Kholisa Nurrahmah (you can also view the original English article)

Fixed-function Pipelines tidak memiliki bisnis lebih banyak pada kartu video kami.  Inilah yang perlu anda ketahui tentang mereka-dan bagaimana cara beralih dari mereka, jika anda masih belum melakukannya.

Di Awal: Kebangkitan Perangkat Keras Grafis

Suatu saat, ketika pengembangan permainan (atau mengkodekan apa pun yang berhubungan dengan grafis real-time, sebenarnya) terbatas pada penulisan ke matriks intensitas warna yang relatif kecil (buffer frame) dan mengirimkannya ke perangkat keras, anda bisa melakukannya.  apapun yang anda inginkan dengan itu anda bisa menggambar ke gambar satu, sepuluh, atau seratus kali.  Anda bisa melewati buffer frame lagi untuk melakukan FX yang rapi.  Singkatnya, apapun yang mampu dilakukan prosesor anda, Anda bisa melakukannya pada gambar yang akan dikirim ke monitor.  Hal ini memungkinkan anda melakukan beberapa hal yang benar-benar hebat dan kreatif, namun orang tidak pernah (atau jarang) menggunakannya sampai batas tertentu.  Tapi kenapa?

Jawabannya: karena lamban.  Gambar 640 × 480px (resolusi umum saat itu) berisi 307.200 piksel.  Dan CPU jauh lebih lambat saat itu, sehingga anda tidak dapat benar-benar melakukan banyak hal dalam waktu singkat yang diberikan kepada anda untuk menggambar bingkai itu.  Bagaimanapun, jika anda ingin terus menggambar 30FPS, anda hanya memiliki sekitar 30ms untuk memperbarui logika permainan dan merender ke layar, dan itu harus mencakup overhead pergaulan dengan perangkat keras. Itu tidak banyak. Itu tidak banyak.

Kemudian datanglah bersama GPU yang keren dengan merender pipelines.  Anda, pengembang, akan mengurus pembaruan logika permainan dan mengirimkan tekstur dan segitiga anda ke GPU, dan akan melakukan pengetatan dan pengetesan berat pada mereka.  Itu adalah fixed-function rendering pipellines (FFPs): artinya anda tidak dapat mengkonfigurasi fungsi yang mereka lakukan.  Anda bisa mengatakan kepada mereka "membuat kabut abu-abu gelap" atau "jangan lakukan pencahayaan untuk saya!" dan anda bisa mengkonfigurasi banyak parameter lainnya, namun fungsinya tetap demikian.

Perangkat keras itu disambung dan dipersempit secara khusus sehingga menampilkan beberapa operasi standar pada data anda.  Dan karena kabel itu seperti itu, itu jauh lebih cepat daripada melakukannya pada prosesor anda.  Tapi satu kelemahan adalah bahwa anda membayar banyak untuk kecepatan itu: anda membayar dengan fleksibilitas.  Tapi jika anda ingin menggambar sesuatu yang rumit, CPU tidak cukup cepat, dan mengirimkan simpul Anda ke GPU adalah satu-satunya pilihan.

Ini kira-kira bagaimana cara kerja fixed-function bekerja.  Gambar tidak dimaksudkan sebagai representasi yang akurat, namun memberi petunjuk tentang bagaimana semuanya dilakukan.

Permintaan akan Realisme yang Lebih Baik

Dunia grafis pun masih berubah dengan cepat.  Sama seperti semua orang kreatif dan berbakat, pengembang game menyukai tantangan, dan salah satu tantangan bagi mereka adalah (dan akan tetap ada!),  Untuk waktu yang lama, untuk membuat gambar yang terlihat lebih baik dan realistis.

Pipeline fixed-function menyediakan beberapa fitur bagus, seperti beberapa mode blending, per-vertex Gouraud shading, efek kabut, stensil buffer (untuk volume bayangan) dan semacamnya, sehingga para pengembang menggunakan apa yang mereka bisa.  Segera, ada beberapa efek yang sangat mengesankan terjadi, semua berdasarkan fenomena kehidupan nyata yang disimulasikan dengan menggunakan beberapa trik murah (murah dalam standar jaman sekarang).

Ini semua berjalan dengan baik, tapi masih dibatasi oleh jumlah fungsi yang bisa dilakukan pipelines.  Bagaimanapun, dunia nyata memiliki begitu banyak bahan yang berbeda, dan untuk mensimulasikannya, satu-satunya variasi yang diizinkan dilakukan adalah mengubah beberapa mode campuran, menambahkan beberapa tekstur lagi, atau men-tweak warna pantulan cahaya.

Lalu terjadilah: GPU pertama yang bisa diprogram datang.  Mereka tidak datang dalam semalam, tentu saja, dan mereka pasti akan tiba suatu hari nanti, tapi ini tetap menciptakan kegembiraan.  GPU ini memiliki apa yang disebut pipa rendering yang dapat diprogram: Anda sekarang bisa menulis program, yang disebut shader, dalam bahasa perakitanyang terbatas, dan meminta mereka mengeksekusi untuk setiap simpul atau fragmen, pada kartu video.  Ini adalah lompatan besar ke depan, dan itu semakin membaik.

Segera bahasa perakitan meningkat dalam kompleksitas dan ekspresif, dan bahasa tingkat tinggi untuk pemrograman GPU muncul, seperti HLSL, GLSL, dan kemudian Cg.  Hari ini kita memiliki shader geometri yang bahkan dapat mengalirkan simpul baru, atau shader yang secara dinamis mengendalikan tessellation dan segitiga tessellated, dan di dalamnya mereka dapat mencicipi banyak tekstur, cabang dinamis dan melakukan berbagai macam matematika gila pada nilai masukan.

Bila anda memberi pengembang keunggulan ini, mereka menjadi liar; Segera mereka menulis shader untuk segala jenis barang: pemetaan paralaks, model pencahayaan khusus, pembiasan, sebutkan saja.  Nantinya, bahkan sistem pencahayaan custom pun muncul, seperti naungan yang ditangguhkan dan pratinjau cahaya, dan Anda dapat melihat efek pasca-pemrosesan yang kompleks seperti oklusi ambles ruang panggung dan cakrawala ambisi berbasis cakrawala.  Beberapa bahkan "menyalahgunakan" shader untuk melakukan tugas berulang-ulang, matematika-berat, seperti pemrosesan statistik atau pemotongan hash string.  (Ini sebelum komputasi umum di GPU mendapat dukungan utama.)

Singkatnya, grafis komputer meledak dengan diperkenalkannya shader, dan dengan alasan yang bagus: kemampuan memprogram apa yang sebenarnya terjadi pada simpul, fragmen, tekstur, dan sebagainya, dan melakukannya dengan cepat, memberikan kemungkinan yang hampir tak terbatas.

Sebuah representasi yang disederhanakan dari pipelines yang dapat diprogram.  Perhatikan bagaimana tahap transformasi, naungan atau tekstur yang spesifik digantikan oleh shader khusus.  (Tessellation dihilangkan untuk kejelasan.)

Switch Lengkap

Segera, fixed-function rendering tetap usang, setidaknya untuk pengembang game.  Lagi pula, mengapa repot-repot dengan kebun berdinding seperti itu ketika anda dapat memprogram dengan tepat apa yang terjadi pada data anda?  Mereka tetap menggunakannya lebih lama di beberapa aplikasi di mana realisme tidak menjadi masalah, seperti untuk CAD.  Tapi pada umumnya, mereka mulai diabaikan.

OpenGL ES 2.0, dirilis pada tahun 2007, tidak dipakai lagi atau dihapus dari jaringan fixed-function yang mendukung program yang dapat diprogram.  OpenGL 3.2, kembali pada tahun 2009, akhirnya menghapus semua gagasan tentang pemindaian dan pemrosesan fragmen fungsi tetap (bagaimanapun, tetap tersedia untuk penggunaan warisan melalui profil kompatibilitas).  Sudah jelas bahwa saat ini sangat tidak masuk akal bekerja dengan pipa terbatas saat Anda mendapatkan GPU yang hebat yang mampu melakukan hal-hal mengagumkan yang Anda inginkan.

Karena API ini memaksa anda untuk menggunakan shader (dan ini termasuk DirectX, yang, walaupun tidak secara eksplisit menghapus fungsinya, mencakup alat untuk membantu bermigrasi dari pendekatan lama, dan hampir tidak memiliki dokumentasi baru mengenai FFP), mereka sulit untuk mendapatkan yang benar.  untuk pemula Jika Anda hanya memulai sebagai rookie pemrograman 3D, jauh lebih mudah untuk memberi tahu API tentang matriks, parameter pencahayaan, dan yang lainnya, dan memilikinya melakukan semuanya untuk anda.

Tapi dalam jangka panjang, akan lebih menguntungkan anda jika anda belajar menulis program yang justru menggambarkan prosesnya.  Anda akan memahami dengan tepat apa yang sedang terjadi di bawah tenda, memahami beberapa konsep penting yang tidak dimiliki FFP, dan dapat member kebimbangan materi anda dengan sangat mudah untuk melakukan sesuatu yang kompleks fungsi tetap tidak akan pernah dapat melakukannya untuk anda (dan ini berguna untuk debugging juga!).

Saya telah menyebutkan OpenGL ES, dan biarkan saya membangunnya secara lebih rinci.  Sebagai game di ponsel menjadi lebih dan lebih populer, masuk akal untuk menciptakan dunia maya yang semakin meningkat dalam kompleksitas.  Sebagian besar pemanggilan fungsi tetap telah dihapus di ES 2.0 (yang tentu saja berarti mereka juga tidak ada dalam versi berikutnya).  Ini pada dasarnya berarti bahwa, untuk menggunakan fitur apa pun setelah ES 1.1, Anda perlu menggunakan shader.

ES 2.0 didukung oleh iPhone sejak 3GS, iPads sejak rilis pertama, dan perangkat iPod Touch generasi 3 dan lebih tinggi. Qualcomm Snapdragon, sebuah chip yang banyak digunakan pada produksi ponsel Android, juga mendukung OpenGL ES 2.0.  Itu dukungan yang sangat luas, karena ES 2.0 tidak persis "baru": sudah lebih dari 7 tahun sekarang.  Untuk mendapatkan hasil maksimal dari arsitektur ini, Anda perlu melepaskan jaringan fungsi tetap.

Saya berasumsi sebagian besar dari anda telah melakukannya sejak lama, tapi tidak sulit bagi saya untuk membayangkan beberapa mesin grafis 2D atau game warisan yang masih menggunakan fungsi tetap (karena tidak perlu lagi).  Ini semua baik-baik saja, tapi menggunakannya untuk proyek baru, atau melatih programmer di dalamnya, sepertinya buang-buang waktu.  Hal ini diperkuat oleh fakta bahwa banyak tutorial yang dapat anda temukan di Internet sangat ketinggalan zaman dan akan mengajarkan cara menggunakan FFP sejak awal - dan bahkan sebelum Anda menyadari apa yang sedang terjadi, Anda akan jauh di dalam sana.

Sikat pertama saya dengan grafis 3D adalah tutorial DirectX 7 kuno yang ditulis dalam Visual Basic.  Pada saat itu, menggunakan fixed-function pipeline umumnya masuk akal, karena perangkat keras tidak cukup maju untuk mencapai fungsi yang sama dengan shader pada tingkat yang sama.  Tapi hari ini, kita melihat API grafis mulai turun atau sangat menolak dukungan untuk itu, dan itu benar-benar menjadi hanya sebuah artefak masa lalu.  Ini adalah artefak yang bagus dan berguna yang membuat kita bernostalgia, tapi kita harus menjauh darinya.  Sudah tua dan tidak lagi digunakan.

Refleksi fresnel dan refraksi manis ini, yang dihasilkan oleh demo dari OGRE (Open-source Graphics Rendering Engine), tidak akan pernah bisa dilakukan jika anda berpegang pada cara yang disarankan oleh tutorial DirectX 8 atau OpenGL 1.1 yang lama.

Kesimpulan

Jika anda terlibat dalam pengembangan game yang serius, berpegang pada fixed-function pipeline adalah peninggalan masa lalu.  Jika anda berpikir untuk masuk ke grafis 3D, saran saya (dan saran dari banyak, banyak pengembang di luar sana) adalah menghindarinya.

Jika anda melihat melewati posisi pencahayaan ke grafis API (bukan sebagai parameter shader), atau fungsi API panggilan seperti glFogv, jalankan seperti angin dan jangan melihat ke belakang.  Ada dunia baru GPU yang bisa diprogram di luar sana, dan sudah lama sekali ada.  Ada lagi yang mungkin hanya menghabiskan waktu anda.

Bahkan jika anda hanya menjadi grafis 2D, tetap saja ide yang bijak untuk tidak bergantung pada FFP lagi.  (Tentu saja, itu asalkan anda baik-baik saja dengan tidak mendukung beberapa perangkat keras kuno.)  Shader dapat memberi anda beberapa efek kilat yang bagus.  Image blurring, sharpening, grid warp, rendering vektor, dan simulasi partikel atau fisika berskala besar semuanya bisa dilakukan di GPU, dan semuanya bisa menguntungkan game 2D dan 3D.

Jadi, sekali lagi, saran saya, biarpun anda tidak secara eksplisit belajar tentang pengembangan game 3D, adalah belajar menulis shader.  Mereka menyenangkan untuk diajak bekerja sama, dan saya jamin anda akan menghabiskan banyak waktu yang menyenangkan untuk menyempurnakan efek shader yang keren: skybox butty yang dinamis, cat mobil atau pemetaan bayangan paralel, atau apapun keinginan hati anda.  Setidaknya itu terjadi pada saya: setelah anda terbiasa bekerja dengan fixed-function pipelines karena beberapa batasan (seperti yang terpaksa saya lakukan, kembali pada siang hari, agar mendapatkan kinerja yang dapat diterima di 5200FX saya), memprogram GPU adalah ledakan, dan tumpukan kesenangan.

Saya harap saya telah menjelaskan kepada mereka apa saja yang belum jelas, bagaimana grafis 3D digunakan untuk bekerja sejak lama dan bagaimana cara kerjanya sekarang, dan saya harap saya telah meyakinkan beberapa dari anda yang berada di ambang mengikuti tutorial NeHe atau Swiftless untuk dilakukan. Jika tidak dan lihatlah sesuatu yang lebih modern.  Seperti biasa, saya mungkin telah membuat beberapa kesalahan, jadi jangan ragu untuk menunjukkannya di kolom komentar.  Sampai lagi lain waktu!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.