Banyak perancang cepat atau lambat menghadapi tantangan untuk mencapai tisu atau perilaku rambut yang realistis. Ada sejumlah teknologi untuk ini, tetapi tidak semuanya cocok untuk platform seluler. Biasanya pengembang seluler membuat animasi karena paling murah. Kita akan berbicara tentang simulasi real-time - modul Unity Cloth .
Unity Cloth adalah sistem berbasis simulasi fisika jaringan yang bekerja sama dengan SkinnedMeshRenderer. Ini memungkinkan Anda untuk mengontrol berbagai parameter, seperti kekakuan tarik atau torsi, redaman (jumlah yang bertanggung jawab atas seberapa cepat kain akan mencapai kesetimbangan), simulasi angin, interaksi tabrakan internal (tabrakan sendiri), gesekan, gravitasi, pengaruh, dll. interaksi colliders, dll.
Salah satu tim dari Krasnodar studio Plarium mempelajari penerapan Unity Cloth untuk perangkat seluler.
Bagian 1. Simulasi jaringan
Kami mulai dengan tes stres untuk menilai batas yang dapat diterima untuk menggunakan pengaturan modul pada perangkat seluler. Sampel pertama yang akan diperiksa adalah mesh multi-layer poli-tinggi - tanjung dengan ~ 10k simpul, ~ 7k segitiga. 19 capsule colliders ditambahkan ke objek dalam bentuk bagian tubuh karakter. Pengaturan lainnya adalah default.
Grafik di bawah ini menunjukkan latensi metrik yang sedang diperiksa dalam milidetik bergantung pada jumlah instance objek. Perangkat yang diuji adalah Xiaomi Mi5 (4 core, 2,15 GHz, RAM 3 GB).
Xiaomi Mi5 bukanlah perangkat terlemah, tetapi kerugian kinerja yang serius sudah terlihat di dalamnya. Pada perangkat yang kurang bertenaga (Lenovo A536, Quad-core, 1,3 GHz, RAM 1 GB), mereka menjadi bencana. Selanjutnya, kami akan mengevaluasi hasil yang ditunjukkan oleh perangkat terlemah.
Satu pembaruan fisika jaringan saja menyumbang 775 md dari 800. Mari kita coba untuk mengecualikan pengaruh colliders.
Perhitungan tabrakan tabrakan sangat mengurangi kinerja; dengan 25 kejadian, maksimum 475 tabrakan hadir di tempat kejadian.
Pengukuran selanjutnya adalah relatif terhadap model lapisan tunggal poli rendah (153 simpul, 256 segitiga) dengan lebih sedikit contoh (hingga 9) dan lebih sedikit colliders (hingga 8).
Mari kita lihat apa dampak perhitungan collider. Mari buat dependensi yang sesuai menggunakan contoh satu instance objek pada perangkat yang berbeda (selain perangkat yang sudah terlibat, kami mengambil Asus ZenFone 5, Dual-core, 2 GHz, RAM 1 GB).
Fungsi yang dihasilkan didekati dengan baik oleh fungsi polinomial derajat 2.
Dapat dilihat bahwa situasi dengan objek poli rendah jauh lebih baik. Pada perangkat yang paling kuno, satu contoh objek rata-rata membutuhkan waktu sekitar 1 md (dibandingkan ~ 3 md untuk model poli tinggi, semua hal lain dianggap sama), yang cukup bagus.
Selanjutnya, mari kita lihat bagaimana parameter tambahan memengaruhi kinerja .
Dalam pengujian, kami menggunakan mesh satu lapis dengan sedikit lebih detail daripada dimensi sebelumnya (~ 450 simpul, ~ 800 segitiga). 1 capsule collider ditambahkan ke komponen Unity Cloth, 1 contoh objek diperiksa, parameter tambahan tabrakan internal dan efek angin divariasikan .
Simulasi angin tambahan, seperti perhitungan tabrakan internal, menurunkan kinerja.
Ini terutama terlihat pada model yang lebih kompleks. Mari kita menganalisis pengaruh parameter tambahan kekakuan (ketegangan, torsi) dan atenuasi pada mesh dengan ~ 10.000 simpul dan ~ 500 dengan 1 capsule collider.
Di bawah ini adalah hasil yang diperoleh pada perangkat terlemah (Lenovo A536) dengan parameter yang bervariasi di setiap pengukuran.
1. Kekakuan: Peregangan dan pelintiran.
Poli rendah: 1,67 md Poli tinggi: 145,32 md.
2. Kekakuan: Perpanjangan - termasuk. / Curl - off.
Poli rendah: 1.79ms Poli tinggi: 160.44ms
3. Kekakuan: Peregangan - lepas. / Memutar - termasuk.
Poli rendah: 1,90ms. Poli tinggi: 172,19 md.
4. Kekakuan: Peregangan dan puntiran - termasuk.
Poli rendah: 1,92ms Poli tinggi: 194,50 md.
5. Kekakuan: Perpanjangan - termasuk. / Curl - off. Pengaruh angin - termasuk.
Poli rendah: 1,69 md. Poli tinggi: 165.73ms.
6. Kekakuan: Perpanjangan - termasuk. / Curl - off. Atenuasi termasuk.
Poli rendah: 1,69 md. Poli tinggi: 172.75ms.
7. Kekakuan: Perpanjangan - termasuk. / Curl - off. Pengaruh angin - termasuk. Atenuasi - termasuk.
Poli rendah: 1,76 md. Poli tinggi: 173.10ms
8. Kekakuan: Perpanjangan - termasuk. / Curl - off. Tabrakan internal - termasuk.
Poli rendah: 2.01ms High-poly: Unity Crash
Parameter simulasi angin, fade, compression, twisting, dan interaksi internal menambahkan beban tambahan, secara signifikan menurunkan kinerja pada perangkat yang lemah saat menggunakan mesh high-poly. Mesh dengan simpul yang lebih sedikit memiliki latensi yang lebih sedikit.
- Simulasi angin menambahkan ~ 9% dari total latensi metrik.
- Simulasi pemudaran menambahkan ~ 12% dari total penundaan metrik.
- Simulasi menyusut / memutar menambahkan ~ 13-15% dari total latensi metrik.
- ~ 12–16% ( . : ).
2.
Model dari cgtrader.com
Mari kita bahas sedikit tentang kemampuan komponen Unity Cloth dalam menangani rambut. Pada pandangan pertama, ini seharusnya tidak lebih sulit daripada dengan kain satu lapis - pertama perbaiki simpul yang diinginkan, dan kemudian distribusikan tingkat pengaruh simulasi ke simpul yang tersisa. Tapi ada masalah - kerusakan benda volumetrik seperti ikal. Untuk melihat lebih jelas alasan kemunculannya, kami mengambil kisi kristal kubik berpusat muka dari beberapa logam, misalnya natrium klorida, sebagai ilustrasi.
Ketegaran dijelaskan oleh fakta bahwa puncak di dekatnya melampaui yang jauh (ditunjukkan oleh panah). Kinks and twists tidak bisa dihindari bahkan dengan menggunakan kalkulasi interaksi dari benturan internal. Kami menyimpulkan bahwa Unity Cloth tidak cocok untuk benda padat.
Pengaturan simulasi:
- Params 1: 3 colliders, kekakuan untuk ketegangan dan puntiran, angin dan tabrakan internal lepas, redaman;
- Param 2: 3 colliders, kekakuan tarik diaktifkan, tabrakan angin dan internal dinonaktifkan, atenuasi dinonaktifkan;
- Params 3: 1 collider, kekakuan tarik diaktifkan, angin dan tabrakan internal dinonaktifkan, atenuasi dinonaktifkan.
Indikator kinerja kedua perangkat lemah ini sebanding satu sama lain, Xiaomi memberikan hasil terbaik.
Pada tempat yang sibuk, bahkan penundaan yang relatif kecil menjadi signifikan, dan dalam pengembangan seluler, angka ini berlipat ganda, jadi Anda harus berjuang untuk setiap sepersepuluh milidetik.
Ringkasan Komponen Kain Persatuan
- Ini mengatasi dengan baik dengan objek satu lapis sederhana (bendera, jubah, seprai dan taplak meja).
- .
- .
- . , : Graphics Settings .
- - Unity ( Bug Story).
Simulasi kain satu lapis sederhana yang dibuat dengan modul Unity Cloth cukup realistis. Namun, ini harus digunakan dengan hati-hati: berinteraksi dengan sejumlah besar colliders, serta perhitungan simulasi angin yang berlebihan, redaman, kompresi, puntiran, interaksi internal, menyebabkan penurunan kinerja. Secara umum, Unity Cloth cukup boros sumber daya untuk digunakan pada perangkat seluler, terutama saat mensimulasikan kain dan rambut pada jaring poli tinggi.
Jika Anda memang berniat menggunakan Unity Cloth di platform seluler, maka perhatikan rekomendasi berikut:
- Lebih sedikit simpul berarti kinerja yang lebih baik. Gunakan jerat dengan jumlah simpul minimum yang dapat Anda tangani.
- , .
- , , , , .
- , , .
Bug Story
, - . Unity Support.
1. Unity 2018.4.4f1 Cloth Bounds SkinnedMeshRenderer, , .
8 9 . Xiaomi Mi 5.
2018.4.8f1.
2. 2018.4.8 Constraints , - /. , :
2018.4.14f.
1. Unity 2018.4.4f1 Cloth Bounds SkinnedMeshRenderer, , .
8 9 . Xiaomi Mi 5.
2018.4.8f1.
2. 2018.4.8 Constraints , - /. , :
- Constraints;
- -, ;
- Play Mode ;
- Cloth.
2018.4.14f.