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 sampel 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 alur. Tidak seperti buffer, tekstur dapat difilter oleh sampel 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 ditik atau tanpa jenis ketika sumber daya dibuat selama jenis sepenuhnya ditentukan menggunakan tampilan saat tekstur terikat ke alur.

Jenis Tekstur

Direct3D mendukung beberapa representasi floating-point. Semua komputasi floating-point beroperasi di bawah subset yang ditentukan dari aturan floating-point presisi tunggal IEEE 754 32-bit.

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

Tekstur 1D

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

Ilustrasi berikut ini memperlihatkan tekstur 1D:

tekstur 1d

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

tekstur 1d dengan tingkat mipmap

Tingkat mipmap adalah tekstur yang memiliki kekuatan dua lebih kecil dari tingkat di atasnya. Tingkat paling atas berisi detail terbanyak, 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 yang lebih rendah 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. Array tekstur 1D terlihat secara konseptual seperti ilustrasi berikut.

array tekstur 1d

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 3 lapisan.

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 berisi kisi texel 2D. Setiap texel dapat diatasi oleh vektor u, v. Karena ini adalah sumber daya tekstur, ini mungkin berisi tingkat mipmap, dan subsumber daya. Sumber daya tekstur 2D yang terisi penuh 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 homogen tekstur 2D; artinya, setiap tekstur memiliki format dan dimensi data 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.

array tekstur 2d

Array tekstur ini berisi tiga tekstur; setiap tekstur adalah 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 terisi penuh terlihat seperti ilustrasi berikut.

array tekstur 2d yang mewakili 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 ditujukan dari shader dengan vektor 3D yang menunjuk dari tengah kubus tekstur.

Tekstur 3D

Sumber daya tekstur 3D (juga dikenal sebagai tekstur volume) berisi volume texel 3D. Karena ini adalah sumber daya tekstur, ini mungkin berisi tingkat mipmap. Tekstur 3D yang diisi sepenuhnya terlihat seperti ilustrasi berikut.

sumber daya tekstur 3d

Saat irisan mipmap tekstur 3D terikat sebagai output target render (dengan tampilan target render), tekstur 3D berperilaku identik dengan array tekstur 2D dengan n irisan. Ikatan render tertentu dipilih dari tahap geometry-shader.

Tidak ada konsep array tekstur 3D; oleh karena itu, 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 diimbangi oleh (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 sejajar layar sepele, karena sistem koordinat piksel selaras dengan sistem koordinat texel.

diagram sistem koordinat texel

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 # = floor(U * Width)
  • Pengambilan sampel linear: Texel Kiri # = lantai(U * Lebar), Texel Kanan # = Texel Kiri # + 1

Untuk koordinat berskala:

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

Di mana lebar, adalah lebar tekstur (dalam texel).

Pembungkusan alamat tekstur terjadi setelah lokasi texel dihitung.

Tekstur