Pengantar Tekstur di Direct3D 11

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

Ada beberapa jenis tekstur: 1D, 2D, 3D, yang masing-masing dapat dibuat dengan atau tanpa mipmap. Direct3D 11 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. Tekstur 1D diwakili oleh antarmuka ID3D11Texture1D .

ilustrasi 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.

ilustrasi 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 11 juga mendukung array tekstur. Array tekstur 1D juga diwakili oleh antarmuka ID3D11Texture1D . Array tekstur 1D terlihat secara konseptual seperti ilustrasi berikut.

ilustrasi 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. Tekstur 2D diwakili oleh antarmuka ID3D11Texture2D . Sumber daya tekstur 2D yang terisi penuh terlihat seperti ilustrasi berikut.

ilustrasi 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). Array tekstur 2D juga diwakili oleh antarmuka ID3D11Texture2D . Ini memiliki tata letak yang sama dengan array tekstur 1D kecuali bahwa tekstur sekarang berisi data 2D, seperti yang ditunjukkan dalam ilustrasi berikut.

ilustrasi 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.

ilustrasi 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.

Catatan

Perangkat yang Anda buat dengan tingkat fitur 10_1 ke atas dapat mendukung array kubus tekstur di mana jumlah tekstur sama dengan jumlah kubus tekstur dalam array enam kali. Perangkat yang Anda buat dengan tingkat fitur 10_0 hanya mendukung satu kubus tekstur enam wajah. Selain itu, Direct3D 11 tidak mendukung kubus parsial.

 

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 diwakili oleh antarmuka ID3D11Texture3D . Tekstur 3D yang diisi sepenuhnya terlihat seperti ilustrasi berikut.

ilustrasi 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, dengan mendeklarasikan komponen skalar data output sebagai SV_RenderTargetArrayIndex nilai sistem.

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

Tekstur