TahapAn Piksel Shader

Tahap pixel-shader (PS) memungkinkan teknik bayangan yang kaya seperti pencahayaan per piksel dan pasca-pemrosesan. Shader piksel adalah program yang menggabungkan variabel konstan, data tekstur, nilai per vertex terinterpolasi, dan data lainnya untuk menghasilkan output per piksel. Tahap rasterizer memanggil shader piksel sekali untuk setiap piksel yang dicakup oleh primitif, namun, dimungkinkan untuk menentukan shader NULL untuk menghindari menjalankan shader.

Piksel Shader

Saat melakukan multisampling tekstur, shader piksel dipanggil sekali per piksel tertutup sementara pengujian kedalaman/stensil terjadi untuk setiap multisample yang tercakup. Sampel yang lulus uji kedalaman/stensil diperbarui dengan warna output shader piksel.

Fungsi intrinsik shader piksel menghasilkan atau menggunakan turunan kuantitas sehubungan dengan ruang layar x dan y. Penggunaan yang paling umum untuk turunan adalah untuk menghitung perhitungan tingkat detail untuk pengambilan sampel tekstur dan dalam kasus pemfilteran anisotropik, memilih sampel di sepanjang sumbu anisotropi. Biasanya, implementasi perangkat keras menjalankan shader piksel pada beberapa piksel (misalnya kisi 2x2) secara bersamaan, sehingga turunan kuantitas yang dihitung dalam shader piksel dapat diperkirakan secara wajar sebagai delta nilai pada titik eksekusi yang sama dalam piksel yang berdekatan.

Input

Ketika alur dikonfigurasi tanpa shader geometri, shader piksel dibatasi hingga input 16, 32-bit, 4 komponen. Jika tidak, shader piksel dapat memakan waktu hingga 32, 32-bit, input 4 komponen.

Data input shader piksel mencakup atribut vertex (yang dapat diinterpolasi dengan atau tanpa koreksi perspektif) atau dapat diperlakukan sebagai konstanta per primitif. Input shader piksel diinterpolasi dari atribut vertex primitif yang dirasterisasi, berdasarkan mode interpolasi yang dideklarasikan. Jika primitif terpotong sebelum rasterisasi, mode interpolasi juga dihormati selama proses kliping.

Atribut vertex diinterpolasi (atau dievaluasi) di lokasi pusat shader piksel. Mode interpolasi atribut shader piksel dideklarasikan dalam deklarasi register input, berdasarkan per elemen baik dalam argumen atau struktur input. Atribut dapat diinterpolasi secara linear, atau dengan pengambilan sampel sentroid. Evaluasi sentroid hanya relevan selama multisampling untuk mencakup kasus di mana piksel dicakup oleh primitif tetapi pusat piksel mungkin tidak; Evaluasi sentroid terjadi sedekat mungkin dengan pusat piksel (tidak tercakup).

Input juga dapat dideklarasikan dengan semantik nilai sistem, yang menandai parameter yang dikonsumsi oleh tahap alur lainnya. Misalnya, posisi piksel harus ditandai dengan semantik SV_Position. Tahap IA dapat menghasilkan satu skalar untuk shader piksel (menggunakan SV_PrimitiveID); tahap rasterizer juga dapat menghasilkan satu skalar untuk shader piksel (menggunakan SV_IsFrontFace).

Output

Shader piksel dapat menghasilkan hingga 8, 32-bit, warna 4 komponen, atau tanpa warna jika piksel dibuang. Komponen register output shader piksel harus dideklarasikan sebelum dapat digunakan; setiap register diperbolehkan masker output-write yang berbeda.

Gunakan status depth-write-enable (dalam tahap output-merger) untuk mengontrol apakah data kedalaman ditulis ke buffer kedalaman (atau gunakan instruksi buang untuk membuang data untuk piksel tersebut). Shader piksel juga dapat menghasilkan nilai kedalaman 32-bit, 1-komponen, floating-point, opsional untuk pengujian kedalaman (menggunakan semantik SV_Depth). Nilai kedalaman adalah output dalam register oDepth, dan menggantikan nilai kedalaman terinterpolasi untuk pengujian kedalaman (dengan asumsi pengujian kedalaman diaktifkan). Tidak ada cara untuk mengubah secara dinamis antara menggunakan kedalaman fungsi tetap atau oDepth shader.

Shader piksel tidak dapat menghasilkan nilai stensil.

Alur Grafik

Tahapan Alur (Direct3D 10)