Thursday, July 12, 2012

real time shading language

Real-Time Shading Bahasa
Munculnya kuat kartu grafis 3D di pasar konsumen selamanya mengubah cara grafis dilakukan. Algoritma yang sangat populer dari masa lalu segera terdegradasi, sebagai fokus bergeser dari precomputed untuk real-time grafis. Tahun 1990-an pasti saat yang menarik untuk programmer grafis. Evolusi ini telah besar, menempatkan Hukum Moore ke kali banyak pertanyaan. Kecepatan telah meningkat astronomis, dan GPU saat ini mungkin lebih kompleks daripada CPU.
Tapi ini pencarian untuk kecepatan baku memiliki fase nya juga. Semuanya dimulai dengan rasterizers sederhana yang tidak sedikit di luar menggambar segitiga di layar. Multitexturing kemudian diperkenalkan, terutama sebagai cara untuk menghitung item seperti peta lampu dan peta benjolan. Kedatangan multitexturing ditandai pergeseran dalam pikiran sebagian besar pengembang. Texturemaps tidak lagi "gambar material kami ingin genteng pada mesh": Mereka array data yang kita bisa melakukan operasi matematika. Contoh yang baik adalah peta yang biasa digunakan untuk mengkodekan pemetaan bump. Dengan perubahan sikap, API diperlukan cara yang lebih kuat dari aritmatika menentukan tekstur, dengan kata lain, tahap tekstur bagaimana berbeda berhubungan satu sama lain. Mekanisme seperti combiners mendaftar dirancang untuk tujuan ini. Jika Anda berpikir tentang hal ini, ini adalah langkah pertama dalam bidang jaringan pipa diprogram.
Sebagai iterasi perangkat keras telah berlalu, vendor chip grafis telah menyadari potensi jaringan pipa diprogram dan telah memasukkan fungsionalitas lebih dan lebih ke sistem mereka. Konsep program dhuwur dibandingkan pixel didirikan sejak awal, dan dari sana itu semua masalah penambahan programabilitas ke sistem. Bahasa-bahasa shading pertama kali muncul, pada dasarnya sebagai cara untuk menyediakan lebih
fleksibilitas untuk mekanisme combiners mendaftar. Sintaksnya adalah bahasa assembly sangat kasar. Tanaman saat bahasa, seperti C Grafis (Cg) atau bahasa tingkat tinggi bayangan (HLSL) tidak lain hanyalah antarmuka untuk prosesor ini perakitan yang memungkinkan pemrogram untuk bekerja dalam skenario tingkat tinggi, intuitif.
Ada pembagian yang jelas dalam cara kita dapat mengakses pipa. Kita masih bisa mengirim data dan membiarkan API mengurus semuanya dengan menggunakan pipa tetap berfungsi. Dengan cara ini perhitungan seperti transformasi, pencahayaan, proyeksi, shading, dan texturing secara otomatis diproses. Di ujung spektrum, kita memiliki pipa diprogram, yang merupakan ranah shader vertex dan pixel. Perhatikan bahwa saya telah menjelaskan kedua sebagai alternatif yang saling eksklusif. Keduanya memiliki efek samping tak terduga. Di bawah pipa diprogram, kita harus mengurus segala sesuatu, tidak hanya efek tertentu kami. Ini adalah situasi hitam orwhite. Dalam fungsi tetap, semuanya dilakukan oleh API. Dalam pipa diprogram, API tidak apa-apa dengan sendirinya (selain menjalankan shader), dan kita harus melaksanakan rutinitas seperti proyeksi di dalam kode shader kami. Untungnya, beberapa rutinitas utilitas ada untuk membantu kita keluar dalam hal ini.
Sekarang Bahasa
Sayangnya, tidak ada standar universal untuk real-time bahasa shading pada hari ini (meskipun saya berharap masalah ini diselesaikan dalam waktu dekat). Vendor yang berbeda yang mendorong maju bahasa yang berbeda, yang, pada akhirnya, memiliki perbedaan minimal. Ini menyakitkan komunitas pengembang dan, sebagai hasilnya, para pengguna, karena kurangnya standar terbuka shader mencegah dari mencapai penerimaan yang luas. Pengembang tidak ingin kode versi yang berbeda dari perangkat lunak mereka, dan pengguna yang berbeda memiliki kartu yang mungkin tidak kompatibel dengan shader. Mari kita lihat apa yang saat ini tersedia.
Cg
Cg adalah tingkat tinggi shading bahasa diperkenalkan oleh NVIDIA untuk keluarga GeForce atas akselerator. Cg memiliki sintaks yang sangat dekat dengan C dan memungkinkan penciptaan efek prosedural yang berjalan secara langsung pada perangkat keras. Compiler Cg mendeteksi jenis akselerator dan menghasilkan perangkat keras khusus microcode untuk kartu grafis Anda.
Cg shaders dapat bekerja pada simpul untuk melakukan proses pengolahan geometri kustom, membuat efek prosedural texturing, atau postprocesses layar. Mereka bahkan dapat digunakan dalam algoritma animasi dan menguliti untuk mengurangi beban CPU. Kelemahannya, pada saat ini, adalah bahwa Cg hanya didukung oleh kartu NVIDIA. Meskipun compiler adalah open-source, produsen lain belum memeluk, jadi shader ditulis dalam Cg akan, setidaknya untuk saat ini, terbatas pada GeForce kelas kartu.Cg dapat digunakan dalam DirectX dan OpenGL, jadi setidaknya bahasa ini merupakan upaya standarisasi lintas API.
HLSL 
HLSL adalah Microsoft mengambil bahasa shading dalam konteks DirectX. Dengan demikian, adalah bahasa API-spesifik.
Kebetulan, HLSL dan Cg sintaks identik. Microsoft dan NVIDIA mencapai kesamaan bahwa mereka menghormati keduanya, setidaknya untuk hari ini. Jadi, shader dalam HLSL dapat dikompilasi dengan kompilator Cg, dan sebaliknya.
HLSL didukung oleh ATI kartu di bawah DirectX juga.
GL2 Shading Bahasa
Untuk beberapa waktu, panitia telah bekerja pada proposal untuk OpenGL 2.0, yang akan menjadi revisi besar pertama ke OpenGL. Revisi ini akan mencoba untuk meng-upgrade API untuk generasi sekarang dan berikutnya akselerator. OpenGL tetap tidak berubah pada tingkat global selama lebih dari 10 tahun sekarang. Salah satu komponen dari spesifikasi ini baru adalah penambahan bahasa shading, yang akan membuat pipa diprogram bagian dari standar GL2. Bahasa shading meminjam sebagian besar sintaks dari RenderMan, yang merupakan langkah yang sangat baik menuju standar industri-lebar. Bahasa shading GL2 didukung oleh semua vendor yang terlibat dalam upaya GL2. Dengan demikian, perusahaan seperti ATI dan 3D Labs telah mengumumkan dukungan mereka untuk itu.


No comments:

Post a Comment