Bagikan melalui


Pengantar tekstur

Sumber daya tekstur adalah struktur data untuk menyimpan texel, yang merupakan unit terkecil dari tekstur yang dapat dibaca atau ditulis. Saat tekstur dibaca oleh shader, tekstur dapat difilter oleh penyaring tekstur.

Sumber daya tekstur adalah kumpulan data terstruktur yang dirancang untuk menyimpan texel. Texel mewakili unit terkecil dari tekstur yang dapat dibaca atau ditulis oleh jalur pemrosesan. Tidak seperti buffer, tekstur dapat difilter oleh penyampel tekstur saat dibaca oleh unit shader. Jenis tekstur memengaruhi bagaimana tekstur difilter. Setiap texel berisi 1 hingga 4 komponen, disusun dalam salah satu format DXGI yang ditentukan oleh enumerasi DXGI_FORMAT.

Tekstur dibuat sebagai sumber daya terstruktur dengan ukuran yang diketahui. Namun, setiap tekstur dapat bertipe atau tanpa tipe ketika sumber daya dibuat selama tipe sepenuhnya ditentukan melalui tampilan ketika tekstur dihubungkan ke jalur.

Jenis Tekstur

Direct3D mendukung beberapa representasi floating-point. Semua komputasi floating-point dilakukan sesuai dengan subset yang telah ditentukan oleh aturan floating-point presisi tunggal 32-bit IEEE 754.

Ada beberapa jenis tekstur: 1D, 2D, 3D, yang masing-masing dapat dibuat dengan atau tanpa mipmaps. Direct3D juga mendukung larik tekstur dan tekstur multisampel.

Tekstur 1D

Tekstur 1D dalam bentuk paling sederhana berisi data tekstur yang dapat ditangani dengan satu koordinat tekstur; ini dapat divisualisasikan sebagai array texel, seperti yang ditunjukkan dalam ilustrasi berikut.

Ilustrasi berikut menunjukkan tekstur 1D:

sebuah tekstur 1d

Setiap texel berisi sejumlah komponen warna tergantung pada format data yang disimpan. Untuk menambah kompleksitas, Anda dapat membuat tekstur 1D dengan beberapa tingkat mipmap, seperti yang ditunjukkan dalam ilustrasi berikut.

sebuah tekstur 1d dengan tingkat mipmap

Tingkat mipmap adalah tekstur yang ukurannya pangkat dua lebih kecil daripada tingkat di atasnya. Tingkat paling atas berisi detail terperinci, setiap tingkat berikutnya lebih kecil. Untuk mipmap 1D, tingkat terkecil berisi satu texel. Selain itu, tingkat MIP selalu berkurang menjadi 1:1.

Ketika mipmap dihasilkan untuk tekstur berukuran ganjil, tingkat bawah berikutnya selalu berukuran genap (kecuali ketika tingkat terendah mencapai 1). Misalnya, diagram mengilustrasikan tekstur 5x1 yang tingkat terendah berikutnya adalah tekstur 2x1, yang tingkat mip berikutnya (dan terakhir) adalah tekstur berukuran 1x1. Tingkat diidentifikasi oleh indeks yang disebut LOD (tingkat detail) yang digunakan untuk mengakses tekstur yang lebih kecil saat merender geometri yang tidak sedekat kamera.

Array Tekstur 1D

Direct3D juga mendukung array tekstur. Sebaris tekstur 1D secara konseptual terlihat seperti ilustrasi berikut.

array dari tekstur 1 dimensi

Array tekstur ini berisi tiga tekstur. Masing-masing dari tiga tekstur memiliki lebar tekstur 5 (yang merupakan jumlah elemen di lapisan pertama). Setiap tekstur juga berisi mipmap tiga lapis.

Semua array tekstur di Direct3D adalah array tekstur yang homogen; ini berarti bahwa setiap tekstur dalam array tekstur harus memiliki format dan ukuran data yang sama (termasuk lebar tekstur dan jumlah tingkat mipmap). Anda dapat membuat array tekstur dengan ukuran yang berbeda, selama semua tekstur dalam setiap array cocok dalam ukuran.

Tekstur 2D dan Array Tekstur 2D

Sumber daya Texture2D mengandung bujur sangkar texel 2D. Setiap texel dapat diakses melalui vektor u, v. Karena ini adalah sumber daya tekstur, mungkin berisi tingkat mipmap dan subsumber daya. Sumber daya tekstur 2D yang diisi sepenuhnya terlihat seperti ilustrasi berikut.

sumber daya tekstur 2d

Sumber daya tekstur ini berisi tekstur 3x5 tunggal dengan tiga tingkat mipmap.

Sumber daya array tekstur 2D adalah array tekstur 2D yang homogen; artinya, setiap tekstur memiliki format data dan dimensi yang sama (termasuk tingkat mipmap). Ini memiliki tata letak yang sama dengan array tekstur 1D kecuali bahwa tekstur sekarang berisi data 2D, seperti yang ditunjukkan dalam ilustrasi berikut.

sebuah array tekstur 2D

Array tekstur ini berisi tiga tekstur; setiap tekstur berukuran 3x5 dengan dua tingkat mipmap.

Menggunakan Array Tekstur 2D sebagai Kubus Tekstur

Kubus tekstur adalah array tekstur 2D yang berisi 6 tekstur, satu untuk setiap wajah kubus. Kubus tekstur yang diisi sepenuhnya terlihat seperti ilustrasi berikut.

array tekstur dua dimensi yang merepresentasikan kubus tekstur

Array tekstur 2D yang berisi 6 tekstur dapat dibaca dari dalam shader dengan fungsi intrinsik peta kubus, setelah terikat ke alur dengan tampilan tekstur kubus. Kubus tekstur diakses dari shader dengan vektor 3D yang menunjuk keluar dari tengah kubus tekstur.

Tekstur 3D

Sumber daya tekstur 3D (juga dikenal sebagai tekstur volume) berisi volume tiga dimensi yang terdiri dari texel. Karena merupakan sumber daya tekstur, sumber daya tersebut mungkin berisi tingkat mipmap. Tekstur 3D yang diisi sepenuhnya terlihat seperti ilustrasi berikut.

menggunakan sumber daya tekstur 3D

Ketika irisan mipmap tekstur 3D terikat sebagai output target render (dengan tampilan target render), tekstur 3D berperilaku identik dengan array tekstur 2D dengan n irisan. Potongan render tertentu dipilih dari tahap shader geometri.

Tidak ada konsep array tekstur 3D; jadi, subsumber daya tekstur 3D adalah tingkat mipmap tunggal.

Sistem koordinat untuk Direct3D didefinisikan untuk piksel dan texel.

Sistem Koordinat Piksel

Sistem koordinat piksel di Direct3D menentukan asal target render di sudut kiri atas, seperti yang ditunjukkan pada diagram berikut. Pusat piksel digeser sebesar (0,5f; 0,5f) dari lokasi bilangan bulat.

diagram sistem koordinat piksel dalam direct3d 10

Sistem Koordinat Texel

Sistem koordinat texel memiliki asalnya di sudut kiri atas tekstur, seperti yang ditunjukkan pada diagram berikut. Ini membuat penyajian tekstur yang disesuaikan dengan layar menjadi mudah, karena sistem koordinat piksel selaras dengan sistem koordinat texel.

sistem koordinat texel diagram

Koordinat tekstur diwakili dengan angka yang dinormalisasi atau diskalakan; setiap koordinat tekstur dipetakan ke texel tertentu sebagai berikut:

Untuk koordinat yang dinormalisasi:

  • Pengambilan sampel titik: Texel # = lantai(U * Lebar)
  • Pengambilan sampel linier: Texel Kiri # = lantai(U * Lebar), Texel Kanan # = Texel Kiri # + 1

Untuk koordinat berskala:

  • Pengambilan sampel titik: Texel # = floor(U)
  • Pengambilan sampel linier: Texel Kiri # = lantai(U - 0,5), Texel Kanan # = Texel Kiri # + 1

Lebar tersebut adalah lebar tekstur (dalam texel).

Pembungkusan alamat tekstur dilakukan setelah lokasi texel dihitung.

Tekstur