Dukungan Mesh di D3DX (Direct3D 9)

D3DX adalah pustaka utilitas yang menyediakan layanan pembantu. Ini adalah lapisan di atas komponen Direct3D.

Jala

D3DX mengimplementasikan konstruksi jala untuk memuat, memanipulasi, dan merender konten file .x. Jala pada dasarnya adalah kumpulan simpul yang menentukan beberapa geometri, dan satu set indeks yang menentukan wajah. Ada beberapa jenis jala.

ID3DXBaseMesh menyediakan dasar-dasarnya. ID3DXMesh mewarisi dari ID3DXBaseMesh, dan menambahkan pengoptimalan jala menggunakan cache vertex per chip. ID3DXSkinInfo memberikan dukungan jala berkulit.

ID3DXBaseMesh menyediakan metode untuk memanipulasi dan mengkueri objek jala ID3DXMesh , yang diwarisi dari jala dasar. Ini termasuk operasi yang berdekatan, pengambilan buffer geometri, operasi kunci/buka kunci (vertex dan indeks), dan penyalinan, penyajian, wajah, dan informasi verteks.

Catatan

Antarmuka ID3DXPMesh dan ID3DXSPMesh (untuk mendukung jala progresif dan disederhanakan, masing-masing) yang tersedia dalam rilis Direct3D 9 sebelumnya telah dihilangkan.

 

Arsitektur Jala

Jala berisi data untuk model kompleks. Ini adalah kontainer data abstrak yang berisi sumber daya seperti tekstur dan materi, dan atribut seperti data posisi dan data yang berdekatan. Ada beberapa operasi jala yang meningkatkan performa gambar dan penampilan permukaan. Selain itu, ada sejumlah konsep jala lainnya yang akan memengaruhi fungsionalitas operasi jala. Memahami konsep jala ini sehingga Anda dapat menerapkannya akan meningkatkan performa jala.

Data Objek Jala

Jala berisi buffer vertex, buffer indeks, dan buffer atribut.

  • Buffer vertex berisi data vertex, yang merupakan simpul jala.
  • Buffer indeks berisi indeks vertex untuk mengakses buffer vertex. Ini dapat mengurangi ukuran buffer vertex dengan mengurangi simpul duplikat. Hanya jala terindeks yang menggunakan buffer indeks. Jika jala terdiri dari daftar segitiga, misalnya, jala tidak menggunakan buffer indeks.
  • Buffer atribut berisi data atribut. Atribut adalah properti simpul jala, tanpa urutan tertentu. Jala D3DX menyimpan atribut dalam sekelompok DWORDS, untuk setiap wajah.

Tabel Atribut

Tabel atribut adalah representasi ringkas dari konten buffer atribut. Tabel atribut dapat dibuat dengan memanggil salah satu metode Optimize dengan D3DXMESHOPT_ATTRSORT, dengan mengunci buffer atribut dan mengisinya dengan data, atau dengan memanggil SetAttributeTable. Jala berisi tabel atribut saat jala disusun ulang menjadi grup. Ini terjadi ketika Optimize dipanggil, dengan asumsi opsi pengurutan atribut (D3DXMESHOPT_ATTRSORT atau lebih tinggi) disediakan. Jala D3DX menggunakan daftar segitiga terindeks, dan oleh karena itu digambar dengan IDirect3DDevice9::D rawIndexedPrimitive.

Tabel atribut dibuat sebagai hasil dari memanggil Optimize. Wajah tidak harus berdekatan, karena Optimize akan menyusun ulang agar berdekatan. Misalnya, tangan jala manusia dapat menggunakan atribut yang sama. Id membantu mengurutkan wajah ke dalam grup. Jala dari file .x telah secara otomatis menghasilkan atribut untuk properti material dan tekstur. Anda perlu memanggil Optimize (ATTRSORT) atau Optimize (VERTEXCACHE) yang lebih efektif untuk mendapatkan performa yang baik. Fungsi beban mencoba menyajikan data dalam bentuk yang tepat tempat data disimpan. Jika Anda menggunakan jala berbasis buffer/buffer indeks vertex, API jala menyediakan fungsi pengoptimalan dan transformasi pengulir dengan sedikit overhead.

Jenis pengoptimalan bersifat kumulatif, mulai dari yang paling tidak optimal (D3DXMESHOPT_COMPACT) hingga yang paling optimal (D3DXMESHOPT_IGNOREVERTS). D3DXMESHOPT_STRIPREORDER melakukan pemadatan dan pengurutan atribut. D3DXMESHOPT_VERTEXCACHE selalu disarankan, bahkan pada perangkat tanpa cache vertex sejati.

Data Aplikasi

Data aplikasi adalah data jala yang dikelola oleh aplikasi. Ada kopling ketat antara data verteks jala dan data yang dikelola oleh buffer ini.

Buffer bahan berisi n bahan. Materi dikembalikan oleh fungsi Load saat file .x dimuat. Setiap subset dapat memiliki bahan dan teksturnya sendiri. Buffer bahan bersifat statis.

Buffer yang berdekatan berisi informasi tentang tepi, wajah, dan wajah yang berdekatan. Beberapa operasi jala bergantung pada mengetahui wajah mana yang berdekatan satu sama lain. Informasi ini, yang disebut data yang berdekatan, disimpan dalam buffer yang berdekatan. Ini bukan bagian dari jala tetapi dikelola oleh aplikasi dan harus disediakan ke metode jala bila perlu.

Buffer instans efek berisi daftar instans efek. Instans efek menyimpan status. Informasi status ini digunakan untuk menginisialisasi alur. Instans efek berisi pasangan nilai nama dalam efek.

Topik Jala Tingkat Lanjut

Jala yang dioptimalkan dibangun pada fungsionalitas jala dasar dan menambahkan kemampuan pengoptimalan vertex-cache dengan dua metode: Optimalkan, yang membuat jala baru, dan OptimizeInPlace, yang memodifikasi jala asli.

D3DXGeneratePMesh menggunakan algoritma penyederhanaan D3DX untuk menghasilkan jala progresif dari jala input. D3DXSimplifyMesh menghasilkan jala standar dari tingkat detail yang diberikan dari jala input menggunakan algoritma penyederhanaan yang sama. Pengguna memiliki kontrol atas metrik kesalahan yang digunakan melalui bobot yang ditentukan per-vertex komponen dan bobot yang ditentukan per vertex. Bobot per komponen dikalikan dengan bagian komponen kesalahan yang dihitung per runtuh tepi. Bobot per vertex dikalikan terhadap nilai metrik kesalahan yang ditentukan untuk penghapusan verteks tersebut. Misalnya, jika Anda tidak pernah ingin puncak dihapus, atur berat simpul tertentu ke nilai besar. Sebaliknya, jika Anda ingin menghapusnya sebelumnya, atur ke nilai kecil (kurang dari 1).

ID3DXSkinInfo mendukung karakter berkulit. Karakter berkulit didefinisikan oleh sekumpulan jala dan satu set tulang yang mempengaruhi simpul jala. Tulang direpresentasikan sebagai hierarki transformasi. Untuk setiap jala, ada matriks untuk setiap tulang yang mempengaruhinya, yang mengubah jala menjadi ruang koordinat tulang lokal. Matriks ini adalah transformasi ruang tulang tulang untuk jala. Ini didefinisikan pada saat kerangka dikaitkan dengan jala dalam proses penulisan.

Menguliti

Skinning adalah teknik untuk mengubah simpul jala menggunakan tulang. Tulang biasanya diatur dalam kerangka hierarkis, seperti tulang dalam tubuh manusia. Simpul objek kemudian dikaitkan dengan tulang, seperti menempelkan kulit ke tulang. Ketika tulang berubah, kulit juga diubah.

Jala berkulit menggunakan tulang untuk memengaruhi sejumlah simpul. Data transformasi tulang disediakan oleh pengguna, untuk memengaruhi cara melakukan SRT pada tulang. Jala menggunakan tulang yang diubah untuk memengaruhi simpul yang terkait dengan tulang. Palet adalah array transformasi SRT. Palet sering diimplementasikan sebagai matriks, tetapi dapat berisi nilai SRT.

Pemangkasan Jala Progresif

Area detail rendah mampu kehilangan simpul yang tidak mengubah penampilan permukaan yang dirender. Ini terutama berlaku untuk objek saat bergerak lebih jauh dari kamera. Ini disebut sebagai tingkat detail. Pengguna memiliki kontrol render tingkat API untuk mengatur tingkat detail untuk memaksimalkan efisiensi penyajian.

Objek jala progresif dimulai dengan sejumlah besar wajah dan menggunakan penyederhanaan untuk mengurangi jumlah wajah. Jala progresif yang terlihat independen disebut sebagai jala progresif independen tampilan (VIPM).

Cara lain untuk mengurangi jumlah wajah adalah dengan memangkas. Ini benar-benar menghilangkan simpul dan wajah dari jala. Pemangkasan dapat dilakukan di ujung atas (untuk membatasi jumlah maksimum wajah) atau di ujung bawah (untuk membatasi jumlah minimum wajah.) Pemangkasan meningkatkan performa gambar, namun, perawatan harus digunakan untuk mempertahankan kualitas visual. Pemangkasan ditunjukkan dalam Sampel SDK Mesh Progresif.

Untuk area visibilitas tinggi, resolusi dapat ditingkatkan menggunakan tingkat detail progresif (PLOD). Ini adalah teknik untuk memecah satu wajah menjadi dua wajah.

Patch Meshes

Dua jenis jala patch khusus juga didukung: patch persegi panjang dan segitiga. Jala patch persegi panjang adalah jala patch yang titik kontrolnya diletakkan dalam urutan persegi panjang yang berliku. Patch persegi panjang dan segitiga digunakan untuk membuat permukaan berurutan tinggi. Jala ini tidak biasa digunakan sebagai jala segitiga.

D3DX