Cara mengenakan pakaian pada model 3D
Oleh Oleg Sidorkin, CTO dan Co-Founder Cinevva

Anda memiliki karakter dan aset pakaian. Bagaimana cara mengubah keduanya menjadi karakter berpakaian yang dapat bergerak?
Menempatkan kaus di atas torso adalah langkah pertama. Kaus tersebut juga harus sesuai dengan proporsi karakter, mengikuti sendi yang tepat, mempertahankan materialnya, dan tidak menembus tubuh selama animasi. Semua itu adalah masalah yang terpisah, dan menyelesaikan satu masalah tidak otomatis menyelesaikan masalah lainnya.
Kami mengeksplorasi alur kerja ini untuk auto-rigger Cinevva menggunakan sweter yang dapat digunakan kembali dan karakter ber-rig yang sudah ada. Di bawah ini, Anda dapat memeriksa tahapan sebenarnya dari eksperimen tersebut. Ini adalah prototipe berpanduan manual dengan sebuah sweter, ditambah baseline celana panjang dan celana pendek, pada satu katak humanoid; pakaian otomatis untuk unggahan sembarang masih menjadi pekerjaan di masa depan.
Jelajahi prosesnya dalam 3D
Penampil dibuka dengan model yang telah disesuaikan dan diberi skin. Aktifkan Bandingkan sebelum/sesudah untuk menampilkan tahap sebelumnya di sebelah kiri, dimulai hanya dengan skala dan penempatan. Ukuran dan posisi sweter telah disesuaikan agar berada di dekat karakter, tetapi sweter masih mempertahankan pose lengan aslinya dan belum terpasang pada kerangka. Sisi kanan telah disesuaikan dan diberi skin, sehingga mengikuti animasi karakter.
Setelah perbandingan diaktifkan, gunakan Tahap perbandingan untuk beralih dari penempatan ke penyelarasan tubuh, lalu ke versi awal yang telah disesuaikan dan diberi skin. Mulailah dari Istirahat untuk membandingkan bentuk. Tekan Putar untuk melihat mengapa penyesuaian dan pemasangan merupakan dua langkah yang berbeda. Seret salah satu tampilan untuk mengorbitkan kedua kamera, atau periksa karakter dari belakang.
Ini adalah tahap-tahap tersimpan dari eksperimen, bukan animasi “buruk” yang dibuat-buat. Pada dua tahap pertama, pakaian tanpa skin tetap di tempat saat tubuh bergerak. Pada tahap ketiga, kedua pakaian sudah disesuaikan dan diberi skin, sehingga perbedaan yang tersisa lebih kecil. Tampilan jarak dekat selanjutnya memeriksa detail tersebut.
Gunakan Cari gerakan untuk menelusuri paket universal berisi 260 gerakan, lalu pilih Animasi untuk memulai pemutaran secara otomatis. Gunakan Jeda untuk berhenti. Coba Berjalan, Melompat, Diam Berjongkok, atau Diam Duduk. Klip dimuat sesuai permintaan dan menggunakan kode retargeting yang sama dengan Rigger. Kedua figur pembanding menggunakan linimasa klip serta aturan root-motion dan pijakan berbasis skin yang sama dari meja kerja. Kisi lantai tetap diam; kamera seluruh tubuh mengikuti perpindahan horizontal tanpa membatalkan gerakan vertikal pelvis. Anda dapat mempertahankan gerakan tersebut saat mengganti pakaian atau tahap penyesuaian.
Pilih Pose diagnostik untuk kembali ke kontrol pose asli dan mereproduksi kasus pengukuran dalam artikel. Gerakan universal ditujukan untuk pemeriksaan visual; jumlah tabrakan yang dilaporkan di sini tidak membuktikan bahwa pakaian bebas dari tubuh selama gerakan tersebut. Pada tahap persiapan tanpa skin, pakaian tetap diam saat tubuh bergerak.
Browser memutar dan melakukan retargeting pada aset animasi yang telah disiapkan. Browser tidak menyesuaikan pakaian atau menyimulasikan kain secara real-time.
1. Pilih pakaian yang benar-benar dapat digunakan kembali
Ada dua titik awal yang berguna: pakaian yang dirancang untuk keluarga avatar tertentu, dan mesh pakaian independen yang akan Anda adaptasikan ke tubuh baru. Pilihan pertama menyediakan tubuh, pose, dan sering kali konvensi pemasangan yang sudah diketahui. Pilihan kedua menawarkan lebih banyak kebebasan, tetapi menambah beban kerja pipeline penyesuaian.
Untuk eksperimen ini, kami memilih sweter nelayan buatan MargaretToigo dari koleksi MakeHuman Shirts01. Aset tersebut secara khusus tercantum sebagai CC0. Aset ini mencakup mesh OBJ, tekstur UV, deskripsi material, dan berkas korespondensi untuk templat tubuh MakeHuman. Pakaian tersebut memiliki 2.126 verteks dan 4.164 segitiga.
Periksa hak dan isi aset yang sebenarnya sebelum menganggap unduhan sebagai item lemari pakaian yang dapat digunakan kembali. Gambar pratinjau tidak membuktikan bahwa Anda mendapatkan mesh pakaian terpisah, tekstur yang dapat digunakan, atau izin untuk mendistribusikan model yang telah dikenakan pakaian.
Korespondensi templat sweter kami berguna, tetapi tidak universal. Korespondensi ini mengacu pada topologi tubuh MakeHuman. Katak kami memiliki mesh dan kerangka yang berbeda, sehingga mengimpor OBJ tidak menerapkan korespondensi tersebut secara otomatis. Bobot korespondensi templat tubuh juga berbeda dari bobot skin kerangka.
Coba juga celana panjang dan celana pendek
Sweter menguji bahu dan lengan. Celana panjang menambahkan masalah penyesuaian yang berbeda: ban pinggang yang mengelilingi pinggul, dua kaki yang bergerak secara independen, serta selangkangan yang harus menghubungkan keduanya. Celana pendek memiliki masalah pinggul yang sama, tetapi berakhir sebelum lutut.
Pilih Celana kargo atau Celana pendek denim. Penampil menampilkan prototipe yang telah disesuaikan dan diberi skin secara manual. Aktifkan Bandingkan sebelum/sesudah untuk menambahkan tahap skala dan penempatan di sebelah kiri. Coba Lutut kiri ditekuk dan Kedua lutut ditekuk, lalu orbitkan tampilan ke belakang karakter. Tampilkan lutut menandai sendi lutut kiri dan kanan yang sama pada kedua tampilan; Sembunyikan pakaian memperlihatkan tubuh untuk membandingkan kuda-kuda secara langsung. Posisi sendi lutut sama persis dalam keenam pose yang diperiksa. Kontur celana yang disesuaikan secara berbeda dapat membuat lutut tampak lebih berdekatan. Ini adalah dua mesh berbeda yang dapat digunakan kembali dengan tekstur aslinya, bukan sekadar pewarnaan ulang sweter.
Kedua aset dibuat oleh Cortu dan tercantum sebagai CC0 dalam paket celana MakeHuman. Untuk eksperimen ini, kami melakukan subdivisi pada mesh beresolusi rendah, memetakan area pinggul dan kaki ke sendi katak, menerapkan koreksi jarak bebas lokal, dan mentransfer bobot dari segitiga tubuh terdekat. Kontrol tersebut memutar ulang gerakan diagnostik tubuh bagian bawah yang telah dibuat secara khusus.
Contoh pakaian ini masih berupa prototipe. Sweter, celana panjang, dan celana pendek memiliki hasil validasi yang berbeda; pelajaran penyesuaian di bawah ini menjelaskan apa yang telah membaik dan apa yang masih salah.
2. Tetapkan tubuh dan pose istirahatnya
Sistem penyesuaian perlu mengetahui apa yang seharusnya dikelilingi oleh pakaian. Dalam kasus ini, katak ber-rig lokal kami memiliki mesh tubuh terbuka, lengan panjang, tangan besar, dan kerangka humanoid dengan 22 sendi. Hal ini memberi kami permukaan target yang dapat digunakan serta tengara bahu, siku, pergelangan tangan, pinggul, dan leher yang bermakna.
Karakter yang sudah mengenakan mantel mungkin hanya memiliki permukaan luar mantel. Karakter tersebut mungkin tidak memiliki torso lengkap di bawahnya. Dalam situasi itu, pilihan praktisnya adalah menyesuaikan lapisan luar di atas geometri yang ada, menggunakan proksi tubuh yang secara eksplisit bersifat perkiraan, atau memperoleh tubuh dasar yang sesuai. Nama sendi saja tidak dapat memulihkan permukaan yang hilang.
Sebelum menyesuaikan, tempatkan pakaian dan tubuh dalam kerangka koordinat yang sama. Selaraskan skala, orientasi, transformasi objek, dan pose istirahatnya. Pakaian yang dibuat dengan posisi lengan menurun tidak akan cocok dengan T-pose hanya karena bounding box keduanya memiliki tinggi yang sama.
Inilah juga alasan retargeting animasi bukan merupakan penyesuaian pakaian: mentransfer gerakan antar-kerangka tidak membentuk ulang kaus agar mengelilingi dada baru atau mengubah ukuran lengannya.
3. Sesuaikan bentuk pakaian dengan tubuh
Demo pertama memisahkan penempatan sederhana dari penyelarasan yang lebih terarah. Prototipe kami membaca tengara target dari kerangka dan menggunakan tengara pasangan yang ditetapkan secara eksplisit pada sweter. Deformasi torso dan pemetaan lengan menghasilkan penyesuaian awal, dengan blending berkelanjutan di antara segmen lengan.
Langkah berikutnya menerapkan koreksi jarak bebas permukaan terbatas sambil menghaluskan perpindahan. Tujuannya adalah menggeser kain yang tumpang tindih ke luar tanpa merusak bentuk pakaian. Ini adalah baseline penyesuaian statis sederhana, bukan solver kain.
Kontrak input yang berbeda memerlukan pendekatan yang berbeda:
| Titik awal | Jalur penyesuaian praktis | Hal yang masih perlu diperiksa |
|---|---|---|
| Pakaian yang dibuat untuk templat tubuh yang sama | Terapkan korespondensi templat yang telah diketahui atau kontrol bentuk tubuh yang didukung | Pose, proporsi, dan asumsi khusus aset |
| Pakaian terpisah dan tubuh yang berbeda | Selaraskan tengara atau cage penyesuaian, deformasi pakaian, lalu atasi tumpang tindih | Jahitan, siluet, jarak bebas, dan regangan lokal |
| Pakaian longgar atau berlapis | Gunakan proksi dan penyesuaian yang mempertimbangkan tabrakan; pertimbangkan simulasi kain offline | Urutan lapisan, kontak dengan diri sendiri, dan pemeliharaan volume |
Tabel ini menjelaskan pilihan alur kerja yang memungkinkan. Eksperimen kami menggunakan jalur kedua: penyesuaian tengara untuk sweter dan celana panjang, diikuti dengan cage deformasi untuk celana pendek. Eksperimen ini tidak memvalidasi setiap metode atau kategori pakaian.
Pertahankan maksud desain selama penyesuaian. Mantel longgar tidak boleh menempel pada tubuh seperti permukaan yang dicat. Rok memerlukan ruang di sekitar kedua kaki. Jahitan UV dan lapisan terpisah tidak boleh dilas menjadi satu secara sembarangan hanya untuk memudahkan input optimizer.
4. Pasang pakaian yang telah disesuaikan ke rig
Setelah disesuaikan, pakaian masih memerlukan jawaban atas pertanyaan yang berbeda: tulang mana yang harus menggerakkan setiap verteks?
Menjadikan seluruh sweter sebagai child dari karakter akan membuatnya berpindah bersama karakter, tetapi tidak membuat lengan sweter menekuk di siku. Skeletal skinning memberi setiap verteks kombinasi berbobot dari transformasi sendi. Untuk pakaian yang dekat dengan tubuh, medan bobot tubuh yang sudah ada merupakan titik awal yang berguna.
Untuk sweter, prototipe kami mentransfer bobot permukaan yang andal dan mengisi area yang tidak pasti dari tetangga tepercaya, mengikuti pendekatan yang dijelaskan dalam Robust Skin Weights Transfer via Weight Inpainting. Kecocokan disaring berdasarkan geometri, dan maksud pemasangan eksplisit menangani area yang ambigu. Untuk lengan baju, tangan terdekat belum tentu merupakan sumber bobot yang tepat. Untuk sarung tangan, mungkin saja tepat.
Celana panjang dan celana pendek menggunakan transfer barycentric dari segitiga tubuh terdekat yang lebih sederhana, dengan batas empat pengaruh sendi per verteks. Metode tersebut masih perlu diperiksa dengan cermat di sekitar selangkangan dan setiap bukaan kaki.
Hasilnya adalah pakaian yang mengikuti animasi yang ada. Pakaian tersebut belum memiliki gerakan kain independen. Simulasi kain, gerakan sekunder berbasis pegas, dan animasi kain baked adalah pilihan tambahan, bukan sifat yang muncul hanya karena mesh memiliki bobot skin.
Dalam demo utama, bandingkan Atur skala dan tempatkan dengan Sesuaikan dan transfer bobot selama pemutaran. Itulah perbedaan antara pakaian yang sekadar berada di sekitar karakter dan pakaian yang ikut bergerak dalam posenya.
5. Uji karakter berpakaian saat bergerak
Penyesuaian pada pose istirahat dapat menyembunyikan pemasangan yang buruk atau perpotongan yang muncul saat sendi ditekuk. Uji karakter dari depan, samping, dan belakang, lalu jalankan gerakan yang memberi tekanan pada pakaian: lengan terangkat, siku tertekuk, gerakan pergelangan tangan, serta—jika pakaian mencapainya—pinggul dan lutut.
Percobaan pertama kami dengan pakaian nyata menunjukkan mengapa beberapa pengukuran diperlukan:
| Tahap dalam penyesuaian awal | Segitiga pakaian yang menembus tubuh |
|---|---|
| Penskalaan sederhana | 352 |
| Penyelarasan tengara | 495 |
| Koreksi jarak bebas permukaan | 33 |
Tahap tengara membuat penempatan pakaian lebih terarah, tetapi meningkatkan perpotongan. Koreksi permukaan memperbaiki jumlahnya secara signifikan, tetapi masih belum memenuhi aturan bebas tabrakan.
Pengujian hanya pada verteks bahkan lebih menyesatkan. Pengujian tersebut melaporkan nol verteks pada sisi negatif normal permukaan tubuh terdekatnya, sementara pemeriksaan segitiga masih menemukan penembusan. Sebuah segitiga dapat menembus tubuh meskipun sudut-sudutnya tampak tidak menyentuh permukaan di dekatnya.
Pelajaran dari celana panjang dan celana pendek
Eksperimen tubuh bagian bawah mengungkap kegagalan yang tidak dapat terdeteksi hanya melalui skor tabrakan: pakaian dapat lebih sedikit berpotongan tetapi tetap terlihat salah.
Celana panjang kehilangan bentuknya. Koreksi yang hanya mempertimbangkan jarak bebas mempertahankan pinggul yang terlalu besar. Menarik kain ke arah tubuh menghilangkan bagian melebar tersebut, tetapi menyeret selangkangan ke bawah dan membuat celana menyerupai permukaan ketat yang terdistorsi. Kecocokan posisi sendi lutut pada kedua figur tidak membuktikan bahwa pakaian telah disesuaikan dengan benar.
Kami kemudian menetapkan tinggi ban pinggang, selangkangan, lutut, dan pergelangan kaki serta membatasi koreksi jarak bebas hanya pada gerakan horizontal. Hal itu memulihkan rise celana, tetapi tampilan dekat dari depan, samping, dan belakang masih memperlihatkan jepitan di selangkangan, lutut bersudut, manset tidak rata, dan hilangnya siluet kargo. Celana panjang saat ini masih memiliki 53 segitiga terdampak saat istirahat dan 50–92 pada enam pose sampel. Versi yang melorot memiliki lebih sedikit perpotongan—21 saat istirahat—tetapi bukan hasil penyesuaian yang dapat diterima.
Celana pendek memerlukan batasannya sendiri. Penerapan baseline penyesuaian sebelumnya menghasilkan pinggang melebar, selangkangan terlipat, dan bukaan kaki yang terlalu lebar. Kami mengganti gerakan verteks independen dengan cage deformasi 5 × 5 × 5: kisi kasar yang gerakannya mendeformasi kain di sekitarnya secara bersamaan. Cage tersebut mempertahankan mesh sumber dan jahitan UV sekaligus menjaga rise vertikal tetap. Metode ini mengurangi lipatan bergerigi, tetapi pada awalnya membuat ban pinggang menjauh dari torso.
Koreksi berikutnya mengidentifikasi loop batas dengan 136 verteks yang sebenarnya pada ban pinggang dan menyesuaikannya dengan penampang torso. Hal ini memperbaiki siluet samping. Pemeriksaan dari belakang kemudian mengungkap clipping yang tidak terdeteksi oleh pemeriksaan batas dan jarak bebas verteks: segitiga kain dapat memotong tubuh di antara verteks yang sebenarnya tidak bersentuhan. Bagian belakang ban pinggang memerlukan koreksi pada tingkat segitiga. Kami memperketat batasan batas, memeriksa seluruh lajur ban pinggang, dan hanya menggeser keluar muka-muka pakaian yang berpotongan terhadap bidang segitiga tubuh yang diterobosnya. Tinggi ban pinggang tetap dipertahankan.
| Revisi celana pendek | Seluruh pakaian: segitiga terdampak saat pose istirahat | Ban pinggang belakang: segitiga terdampak saat pose istirahat |
|---|---|---|
| Baseline fitting awal | 143 | Tidak diukur secara terpisah |
| Fitting cage dengan batasan ban pinggang pertama | 28 | 9 |
| Koreksi ban pinggang belakang saat ini | 19 | 0 |
Pemeriksaan akhir menemukan nol perpotongan pada ban pinggang belakang dalam keenam pose sampel, dengan 19 segitiga terdampak di bagian lain pada setiap pose. Area belakang ditentukan berdasarkan centroid segitiga pakaian sumber; ini merupakan hasil regional, bukan persetujuan untuk keseluruhan celana pendek. Pengukuran celana pendek mencakup revisi ban pinggang sebelumnya dan koreksi saat ini.

Tampilan belakang saat ini. Clipping pada ban pinggang telah dikoreksi dalam pose yang diperiksa; cacat jahitan belakang bawah masih terlihat. Bukaan kaki juga masih perlu disempurnakan.
Target ban pinggang mencakup kelonggaran yang direncanakan sebesar 14 mm di sekeliling model ini. Batas akhirnya berbeda dari target tersebut rata-rata sebesar 2,0 mm dan paling banyak 5,4 mm. Angka-angka itu adalah parameter fitting dan galat target berdasarkan konvensi meter dalam adegan—bukan ukuran jahit universal atau jaminan bebas tabrakan.
Pelajaran praktisnya adalah menetapkan persyaratan terpisah bagi setiap pakaian untuk tinggi pesak, siluet, keutuhan jahitan, pemasangan, dan jarak bebas tabrakan. Untuk celana pendek, pekerjaan berikutnya adalah membatasi setiap kelim di sekeliling paha masing-masing dan memperbaiki jahitan belakang tanpa mengganggu ban pinggang yang telah dikoreksi. Pengujian berjalan dengan langkah lebih lebar, duduk, dan berjongkok harus dilakukan berikutnya. Pemeriksaan diskret tidak mencakup tabrakan-diri, kontak koplanar, atau gerakan di antara frame yang disampel.
Pemeriksaan detail: lengan dan pergelangan tangan
Lengan pakaian merupakan salah satu kasus kegagalan yang membuka wawasan dalam alur kerja yang lebih besar ini. Sweater hasil fitting sebelumnya tampak serupa dengan versi yang disempurnakan jika dilihat pada skala karakter penuh. Perbedaannya menjadi lebih jelas dalam tampilan jarak dekat dan pose uji ekstrem pada pergelangan tangan.
Penampil di bawah ini menunjukkan manset yang telah disempurnakan. Aktifkan Bandingkan sebelum/sesudah untuk memeriksa manset sebelumnya di samping versi baru; keduanya sudah di-fitting dan diberi skinning. Pilih Pergelangan maju 45° atau Pergelangan mundur 45°, lalu periksa bukaan manset. Ini adalah perbandingan penyempurnaan, bukan awal dan akhir dari keseluruhan proses fitting.
Kami mengekstrak loop batas aktual setiap manset, memadukan pemetaan lengan melewati siku, dan menyebarkan koreksi manset ke kain di sekitarnya. Pada katak ini, menggeser bukaan sejauh 50 mm ke arah lengan bawah memberikan lebih banyak ruang bagi tangannya yang besar. Offset tersebut adalah parameter yang disetel untuk karakter ini, bukan aturan universal untuk pakaian.
| Pose pemeriksaan | Fitting sebelumnya: segitiga lengan terdampak | Fitting yang disempurnakan |
|---|---|---|
| Istirahat | 12 | 0 |
| Siku ditekuk 75° | 12 | 0 |
| Pergelangan maju 45° | 79 | 0 |
| Pergelangan mundur 45° | 60 | 0 |
Pengujian yang lebih luas masih menemukan satu segitiga lengan terdampak dalam enam dari 22 frame animasi yang disampel. Keseluruhan pakaian juga masih memiliki 21 segitiga terdampak saat pose istirahat di luar mask lengan. Empat pose pemeriksaan yang bersih tidak membuat pakaian ini bebas tabrakan.
Ini adalah pengukuran perpotongan segitiga secara offline dan diskret. Pengukuran tersebut tidak mencakup perpotongan-diri pakaian, kontak koplanar, dan kejadian di antara frame yang disampel; mask lengan tidak mencakup transisi bahu paling dalam. Demo tidak menghitung skor tabrakan secara langsung. Pengukuran lengan dan pengukuran animasi tersedia secara terpisah.
6. Ekspor, muat ulang, dan verifikasi
Karakter yang telah diberi pakaian harus tetap berfungsi setelah keluar dari alat fitting. Verifikasi geometri, material, UV, binding kerangka, dan animasi dalam penampil atau engine target.
Kami mengekspor hasilnya sebagai GLB dan memuatnya secara mandiri di Three.js. Sweater mempertahankan tekstur dan skinning-nya. Jahitan UV meningkatkan jumlah vertex hasil ekspor dari 2.126 menjadi 2.386, yang dengan sendirinya bukan merupakan kegagalan geometri. Perbedaan maksimum pada permukaan pose istirahat yang diukur setelah dimuat ulang berada di bawah 0,001 mm berdasarkan konvensi meter dalam file.
Itu merupakan pemeriksaan konsistensi ekspor, bukan klaim tentang jahitan yang akurat secara fisik. Alur kerja lengkap Rigger untuk mengunggah dan mengekspor pakaian secara publik belum diintegrasikan atau divalidasi melalui eksperimen ini.
Bagaimana AI membantu—dan apa yang masih memerlukan rekayasa
Tinjauan manusia mengungkap pesak celana panjang yang terlalu rendah, pinggang celana pendek yang longgar, serta clipping belakang yang terlewat dalam pemeriksaan sebelumnya. Inspeksi visual berbantuan AI kemudian memeriksa tampilan jarak dekat dari depan, samping, dan belakang, termasuk material polos sementara yang membuat cacat mesh lebih mudah dilihat. Kami memadukan pengamatan tersebut dengan geometri terukur dan mempertahankan iterasi yang gagal.
Masukan ini mengubah metodenya: kerangka yang cocok tidak membuktikan bentuk pakaian yang baik, vertex yang tidak berpotongan tidak membuktikan bahwa segitiga juga tidak berpotongan, dan jumlah tabrakan yang lebih rendah tidak membenarkan siluet yang terdistorsi.
Ini adalah rekayasa berbantuan AI dengan landmark dan aturan fitting yang eksplisit. Kami tidak melatih fitter pakaian universal ataupun membuktikan bahwa model visi dapat menyetujui pakaian apa pun.
Langkah berikutnya adalah membuat batasan jahitan dan kelim untuk celana pendek, fitting celana panjang yang mempertahankan bentuk, tubuh dasar manusia yang sebenarnya, serta pakaian yang tidak disertakan dalam proses penyetelan. Kami juga memerlukan pengujian animasi yang lebih luas dan adaptor melalui alur kerja Rigger yang sebenarnya.
Alur kerja yang dapat digunakan kembali sudah jelas: pilih pakaian yang sesuai → tetapkan tubuh dan pose istirahat → sesuaikan bentuk → transfer pemasangan → uji gerakan dan tabrakan → verifikasi ekspor. Eksperimen ini menunjukkan implementasi konkret dari proses tersebut, sekaligus bagian-bagian ketika gambar yang meyakinkan saja tidak cukup.