Bagikan melalui


Menggunakan UVAtlas (Direct3D 9)

Catatan

UVAtlas awalnya dikirim di pustaka utilty D3DX9 yang sekarang tidak digunakan lagi. Versi terbaru tersedia di UV Atlas Command-Line Tool (uvatlas.exe).

Banyak teknik penyajian dan pembuatan konten memerlukan peta unik yang tidak tumpang tindih dari sinyal 2D (seperti tekstur) ke jala. Teknik tersebut meliputi:

  • Pemetaan normal/perpindahan
  • Simulasi PRT ruang tekstur dan peta cahaya
  • Lukisan permukaan
  • Pencahayaan ruang tekstur

Menghasilkan pemetaan UV unik secara manual seringkali memakan waktu dan melelahkan; ini terutama berlaku ketika geometri input kompleks dan efisien/ pemanfaatan ruang tekstur distorsi rendah diinginkan. Ilustrasi berikut menunjukkan contoh jala dan atlas tekstur yang sesuai.

Memperlihatkan contoh jala dan atlas tekstur yang sesuai.

Contoh ini menunjukkan jala (di sebelah kiri) dan peta normal ruang UV yang sesuai (di sebelah kanan). Perhatikan bahwa atlas tekstur berisi beberapa grup atau kluster data; setiap kluster disebut bagan dan dalam contoh di atas, tampilan berisi data normal untuk sebagian jala.

API D3DX UVAtlas secara otomatis menghasilkan atlas tekstur yang optimal dan tidak tumpang tindih. API menyediakan parameter input yang memungkinkan Anda untuk:

  • Minimalkan peregangan tekstur, distorsi, dan undersampling.
  • Maksimalkan kepadatan pengemasan ruang tekstur untuk penggunaan memori yang efisien.
  • Berikan pengambilan sampel yang merata di seluruh jala, meminimalkan penghentian dalam frekuensi pengambilan sampel.

Cara Kerja UVAtlas

API UVAtlas (lihat Fungsi UVAtlas) menghasilkan atlas tekstur dengan mempartisi permukaan ke dalam bagan dan mengemas bagan ke dalam atlas tekstur. Gunakan D3DXUVAtlasPartition dan D3DXUVAtlasPack untuk melakukan langkah-langkah ini secara terpisah; atau gunakan D3DXUVAtlasCreate untuk mempartisi, membuat parameter, dan mengemas dalam satu panggilan.

Partisi dan Parameterisasi Jala

Pertama, jala dipartisi ke dalam bagan, kemudian setiap bagan diparameterkan menjadi ruang UV [0,1] sendiri. Silinder dapat diparameterkan oleh satu bagan; bola di sisi lain akan memerlukan dua bagan, seperti yang ditunjukkan dalam ilustrasi berikut.

ilustrasi sphere yang dipartisi menjadi dua bagan

Jala yang dapat diparameterkan dengan satu bagan diklasifikasikan sebagai "homeomorphic ke disk", yang berarti Anda dapat menyebarkan disk yang sangat fleksibel dan tak terbatas yang dapat direntangkan di atas bagan dan mencakup geometri dengan sempurna. Peregangan ini, yang disebut homeomorphism, adalah fungsi dua arah; yang berarti Anda dapat pergi dari satu parameterisasi ke parameterisasi lainnya tanpa kehilangan informasi.

Sangat sedikit jala dunia nyata yang dapat diparameterkan menjadi dua dimensi tanpa memisahkan jala menjadi kluster, atau bagan. Ilustrasi berikut menunjukkan contoh jala lain dan atlas tekstur yang sesuai.

Memperlihatkan contoh jala dengan bentuk yang berbeda dan atlas tekstur yang sesuai.

Ada dua parameter yang menentukan jumlah bagan yang dibuat:

  • Jumlah maksimum bagan yang diizinkan untuk atlas
  • Jumlah maksimum peregangan yang diizinkan untuk setiap bagan

Jumlah peregangan akan menentukan jumlah bagan yang dihasilkan, dan kualitas pengambilan sampel secara keseluruhan. Rentang peregangan dari 0,0 (tanpa peregangan) hingga 1,0 (jumlah peregangan apa pun). D3DXUVAtlasCreate dan D3DXUVAtlasPartition mengembalikan peregangan maksimum yang dihasilkan oleh algoritma. Ilustrasi berikut menunjukkan contoh jala lain dan atlas tekstur yang sesuai.

ilustrasi contoh jala dan atlas tekstur yang sesuai

Menggunakan Tensor Metrik Terintegrasi untuk Mengontrol Parameterisasi

Prioritas ruang tekstur dapat ditentukan berdasarkan per segitiga. Tensor Metrik Terintegrasi dapat disediakan untuk mengontrol bagaimana segitiga direntangkan dalam atlas ruang tekstur yang dihasilkan. IMT dapat ditentukan secara langsung atau dihitung berdasarkan sinyal input menggunakan fungsi komputasi IMT D3DX. Tensor metrik terintegrasi (atau IMT) adalah matriks 2x2 simetris yang menjelaskan bagaimana segitiga direntangkan di atlas. Setiap IMT didefinisikan oleh 3 float, sebut saja (a,b,c). Mereka dapat diatur dalam matriks simetris 2x2 seperti ini:

a b
b c

Kemudian IMT dapat digunakan untuk menemukan jarak antara dua vektor. Diberikan dua vektor v1 dan v2, di mana :

vector v1
vector v2 = v1 + (s,t)

Jarak antara v1 dan v2 dapat dihitung sebagai:

sqrt((s, t) * M * (s, t)^T)

Dengan kata lain, vektor (s,t) bisa menjadi besarnya peregangan ke arah arbitrer di ruang u-v. Dalam hal ini, vektor s adalah arah dari puncak pertama ke kedua, dan t adalah produk silang dari normal dan s. Contohnya:

(1,1) * (1,1) = (2,2)
        (1,1)
IMT(1,1,1) scales by 2
(1,-1) * (1,1) = (0,0)
         (1,1)
IMT(2,0,2) scales by 2 with no shearing

IMT dapat ditentukan secara langsung atau dihitung berdasarkan sinyal input menggunakan fungsi komputasi IMT D3DX: D3DXComputeIMTFromPerVertexSignal, D3DXComputeIMTFromPerTexelSignal, D3DXComputeIMTFromSignal, dan D3DXComputeIMTFromTexture_graphics.

Tentukan data IMT secara langsung jika Anda ingin mengontrol bagaimana ruang tekstur dialokasikan untuk segitiga individual. Dengan demikian, alokasikan lebih banyak area di atlas ke area penting jala (seperti wajah karakter atau logo dada, atau wilayah adegan di dekat jalur berjalan pemain). Dengan menentukan IMT yang merupakan kelipatan matriks identitas, segitiga yang dihasilkan akan diskalakan secara seragam dalam ruang tekstur.

Misalnya, mengingat peta normal resolusi tinggi, Anda dapat menghitung IMT untuk menyediakan lebih banyak ruang tekstur ke area sinyal frekuensi yang lebih tinggi di peta normal. Segitiga yang "datar" (yang dipetakan ke wilayah konstan dari peta normal asli) akan menerima lebih sedikit ruang tekstur. Segitiga yang berisi banyak detail peta normal akan menerima lebih banyak area tekstur dalam hasil akhir. Anda kemudian dapat mengambil sampel ulang peta normal menjadi tekstur yang lebih kecil tetapi mempertahankan detail, atau Anda dapat mengolah ulang peta normal dengan pemetaan UV yang lebih optimal.

Menggunakan Data Bersebelahan untuk Kredensi yang Ditentukan Pengguna

Informasi kedekatan yang ditentukan pengguna dapat diberikan ke fungsi partisi untuk menjelaskan kredensial yang telah ditentukan sebelumnya dalam jala, dan dengan demikian menentukan batas bagan antara wajah yang berdekatan. Ini adalah cara sederhana bagi pemanggil untuk menentukan partisi bagan mereka sendiri sebagai input ke dalam algoritma, yang akan lebih menyempurnakan bagan untuk membawa peregangan di bawah maksimum yang diizinkan.

Contoh

Contoh ini menggambarkan bagaimana Anda dapat menggunakan API UVAtlas dan Penampil DirectX (Dxviewer.exe) untuk menemukan dan memperbaiki penghentian dalam model Anda yang dapat secara dramatis memengaruhi ukuran atlas tekstur Anda. Anda bisa mendapatkan Dxviewer.exe dan mempelajarinya dari DirectX SDK. Dxviewer.exe dihapus dari DirectX SDK setelah versi Agustus 2009 sehingga untuk mendapatkannya, Anda memerlukan setidaknya SDK DirectX Agustus 2009. Untuk informasi tentang DirectX SDK, lihat Di mana DirectX SDK?.

Asumsikan Anda memulai dengan beberapa model dalam perangkat lunak pembuatan konten favorit Anda (contoh ini menggunakan model kepala kerdil yang dibuat di Maya). Ekspor model bertekstur ke file .x dan buat atlas tekstur dengan D3DXUVAtlasCreate. Atlas tekstur yang dihasilkan akan terlihat seperti ilustrasi berikut.

ilustrasi atlas untuk model kerdil

Atlas memiliki 22 bagan dan peregangan maksimum 0,994.

Sekarang lihat model bertekstur untuk melihat seberapa baik atlas tekstur memetakan ke geometri. Untuk melakukan ini, muat model ke alat penampil:

  • Buka alat penampil dari Utilitas DirectX.
  • Muat file .x dengan mengklik tombol Buka.
  • Mengaktifkan opsi tampilan gulir dengan mengklik tombol tampilan dan memilih Creases dari popup.

Ilustrasi berikut menunjukkan apa yang harus Anda lihat di alat penampil.

ilustrasi jala bertekskus di alat penampil

Setiap garis adalah gulung yang merupakan tepi yang berdekatan antara dua bagan dalam atlas tekstur. Jumlah bagan yang dihasilkan oleh algoritma disebabkan oleh sedikit perbedaan mungkin karena penghentian dalam normal. Perbedaan kecil ini dapat dikurangi dengan mengelas data, yaitu memaksa data yang hampir sama. Untuk mengelas normal dan kulit:

  • Jalankan alat DirectX Ops (dxops.exe) dengan baris perintah berikut pada jala (mengganti 'modelName.x' dengan nama model Anda):
    Dxops.exe -s "load 'modelName.x'; Optimize n:2.01 w:2.01 uv0:0.01;  save 'newModelName.x';"
    

Ini membandingkan normal dan skinweight, dan di mana mereka berbeda nilainya kurang dari 2,01, data dibuat sama. Ilustrasi berikut menunjukkan close up mata untuk melihat gulungan sebelum pengelasan (di sebelah kiri) dan gulungan setelah pengelasan (di sebelah kanan):

ilustrasi gulungan sebelum pengelasan ilustrasi gulungan setelah pengelasan

Gambar 7: Menghapus kredensial dengan mengelas

Dalam contoh ini, pengelasan menghapus 86 simpul dari jala input. Dengan lebih sedikit kredensial dalam jala, Anda dapat meregenerasi atlas, seperti yang ditunjukkan oleh ilustrasi berikut.

ilustrasi atlas baru dengan kredensial dihapus

Atlas hanya memiliki 7 bagan dan peregangan maksimum sekitar 0,0776. Atlas baru sekarang cocok dengan tekstur yang lebih kecil (sekitar 30% lebih kecil dalam contoh ini).

Mengemas Bagan Ke Dalam Atlas

Setelah jala dipartisi ke dalam bagan yang diparameterkan secara individual, bagan perlu dikemas secara efisien ke dalam satu peta tekstur. Ini dilakukan sebagai langkah kedua D3DXUVAtlasCreate atau dapat dipanggil secara eksplisit dengan memanggil D3DXUVAtlasPack.

Bagan yang dikemas dipisahkan oleh lebar gutter yang ditentukan pengguna. Lebar selokan adalah jumlah pemisahan antara bagan, dan memungkinkan interpolasi bilinear dan pemetaan mip untuk menghindari penyajian artefak pada batas bagan. D3DX menyediakan antarmuka untuk mengisi gutter ini secara otomatis - lihat ID3DXTextureGutterHelper untuk informasi selengkapnya.

Mengintegrasikan UVAtlas Ke Dalam Alur Anda

Selain dipanggil seniman sebelum lukisan tekstur, fungsi-fungsi ini dapat diintegrasikan ke dalam alur seni otomatis. Misalnya, panggilan UVAtlas dapat dikeluarkan secara otomatis setelah aset diperbarui, sebelum melakukan simulasi PRT atau pass pemetaan normal. Ini menghindari kebutuhan untuk memperbaiki pemetaan UV objek secara manual jika topologi jala telah dimodifikasi.

Lihat UV Atlas Command-Line Tool (uvatlas.exe) misalnya penggunaan fungsi UVAtlas.

Topik Tingkat Lanjut