Motion Capture animacije - obrada i uvlačenje u Unity [Blender, Unity]

Motion Capture animacije - obrada i uvlačenje u Unity [Blender, Unity]

offline
  • Pridružio: 14 Feb 2008
  • Poruke: 12391

Činjenica je da ako želite da pravite 3D igre, često naletite na prvi "zid" - obim posla.
Ako ste samostalni od vas se očekuje da znate da programirate, da pravite modele, da obrađujete teksture, zvuk, pravite animacije i tako dalje u nedogled.

Pogotovo nije fer kada shvatite da svaka od ovih stavki iznad zahteva godine rada kako bi je usavršili.

Srećom po nas koji smo u toj situaciji - postoji pregršt besplatnih alata pa uz malo truda i snalaženja možemo da skrpimo nešto.

Danas ćemo naučiti nešto zaista kul...

Koristićemo par alata kako bi napravili model sa realističnim animacijama - animacijama koje su snimane motion capture tehnologijom - koja se koristi u gotovo svim većim igrama.

Ove animacije su potpuno realistične jer se kreiraju tako što se prava osoba "snima" posebnim uređajima dok se pomera. Ti podaci se prenose i dalje završavaju kao poseban fajl sa informacijama koji se može iskoristiti i primeniti na bilo koji model.

Motion Capture nije jeftin ali opet, srećom po nas, postoje dobri ljudi koji su dali pregršt animacija besplatno.

Alati koje ćemo koristiti :
Make Human - besplatni i premoćni alat za kreiranje ljudi
Blender - besplatni i premoćni alat za 3D obradu, animacije i slično - koristićemo ga za spajanje animacije sa modelom i eksportovanje za Unity
bvhacker - besplatni open source alat - da izmenimo samu motion capture animaciju kako bi je prilagodili za game dev
Unity - besplatni game endžin u koji ćemo uvući animaciju i napisati koju liniju koda

Index ::
1. Make Human
1.1. Kreiranje čoveka
1.2 Eksportovanje čoveka

2. Blender
2.1. Podešavanje Blendera
2.2. Uvlačenje modela čoveka
2.3. Instaliranje dodatnih dodataka za Blender

3. bvhacker
3.1 Uvlačenje modela i primena centriranja

4. Nazad na blender
4.1 Primenjivanje motion capture fajla na model čoveka
4.2. Eksportovanje fajla za Unity

5. Unity
5.1 Uvlačenje modela u Unity
5.2 Mecanim sređivanje
5.3. Programiranje animacija





1. MakeHuman

Preuzmite MakeHuman sa ove adrese : http://www.makehuman.org/
Instalirajte aplikaciju i pokrenite je.

1.1 Kreiranje čoveka

Trenutna verzija Makehuman aplikacije će vas dočekati u "Main" kartici.
MakeHuman je ekstremno lak za upotrebi i sve se svodi na kontrolisanje klizača kako bi dobili ono što želimo.



Levo u kartici "Macro" vidimo pregršt opcija - svaka od njih je sama po sebi jasna.
Možete da napravite model sami tako što ćete pratiti tutorijal a možete kasnije preuzeti i moj model.

Ja sam samo podesio Main klizače uz male izmene klizača iz drugih kartica.

Kada završite pređite na karticu Geometries.
Sve kartice u okviru "Geometries" kartice su izborne i vezane su za izgled modela, poput vilica, odeće, očiju i slično.
Nas interesuje ovde samo Topologies kartica koja će odlučiti koliko će poligona imati naš model.

Izbor u ovoj kartici se primenjuje samo na telo čoveka, ne i njegovu odeću.

Ovde možete videti različite topologije u wireframe režimu, pored normalnog izgleda modela :




Unity takođe ima ograničenje po modelu pa ćemo uzeti drugi proxy sa liste - female.
Razlog za female proxy je taj što postoji mala nepravilnost u modelu koja preklapa odeću kod male proxyja u ovom slučaju. Kako bi preskočili celo čišćenje tog problema u Blenderu, izabraću female. Normalna situacija bi podrazumevala male proxy sa izmenama u Blenderu kasnije.

Izaberite ostatak modela po želji prema ostalim karticama.

Materials kartica će nam omogućiti da promenimo različite materijale koji se vežu za osnove modela. Materijali su u suštini podaci o izgledu nekog mesha, poput tela, odeće i slično.

Ovo je takođe izborna kartica. Ja sam promenio par sitnica i nastavljam dalje :



Sledeća kartica je "Pose/Animate"



Ovde biramo koliko će naš model imati kostiju. Izabraću "game.json" i sada možemo da eksportujemo ovaj model.

Kliknite na ikonicu za export označenu na slici ispod, u "Mesh Format" kartici izaberite "Blender exchange (mhx)"



Zatim na dugme sa tri tačke "..." klikom izaberite destinaciju, upišite ime fajla i kliknite na "Save".

Tim ćete sačuvati eksportovani mesh.
Primetićete da se stvorio i folder "Textures", ovaj folder sadrži sve Difuse, Normal Map, Specular Map teksture koje su nam potrebne za model.

//TODO : Dodati link ka fajlu (15 mb je atm)

2. Blender

Blender ćemo iskoristiti da uvučemo fajl i na njega primenimo motion capture animaciju.
Za sam Blender će nam trebati jedan zvanični dodatak kog ćemo uključiti preko same aplikacije, i par dodataka koje pruža MakeHuman.

Preuzmite Blender i instalirajte ga : http://www.blender.org/

2.1. Podešavanje Blendera

Pokrenite Blender.

Kliknite na File > User Preferences


U sledećem prozoru kliknite na "Addons".
U polje za pretragu upišite "makehuman".
Pojaviće se addon "import-Export : Import : Makehuman (.mhx)
Potrebno je da ga omogućite tako što ćete čekirati kućicu pored njega.



Isključite taj prozor.

Držite miša iznad kocke na ekranu, pritisnite taster A na tastaturi - Blender će obeležiti narandžastom bojom tri predmeta.

Ne mrdajte kursor.

Pritisnite taster X na tastaturi. Na lokaciji kursora će se pojaviti upitnik za potvrdu, kliknite levim klikom.

Obrisali ste sada sve sa scene.

2.2. Uvlačenje fajla u Blender

Sada u File > Import meniju imamo novu opciju : "Makehuman (.mhx)"



Kliknite i locirajte fajl koji ste sačuvali, selekujte ga i kliknite "Import MHX"



Dajte vremena Blenderu i videćete uvučen model.




Sledeći korak je uvlačenje motion capture animacije.
Za ovo nam treba dodavanje posebnih alata u Blender.

Sačuvajte trenutni fajl pritiskom na CTRL + S, ili na File > Save.
Izaberite folder i kliknite na dugme "Save".

2.3 Instaliranje dodatnih dodataka za Blender

Idite na MakeHuman download stranicu : http://www.makehuman.org/content/download.html

Preuzmite i raspakujte arhivu Blender Toolsa



Arhiva sadrži "copy2blender.bat" fajl koji možete da pokrenete i ukoliko imate jednu verziju Blendera instaliranu, posao će biti gotov, međutim ako nešto ne uspe ostaćete bez dodataka.

Zato ćemo ručno prekopirati ove fajlove.

Otvorite folder gde vam je instaliran Blender :
C:\Program Files\Blender Foundation\Blender\2.72
u mom slučaju.

Otvorite folder scripts a potom folder addons.
Dakle sada je staza : C:\Program Files\Blender Foundation\Blender\2.72\scripts\addons

u taj folder prekopirajte tri foldera iz raspakovane arhive :
makeclothes
maketarget
makewalk

Dakle, celokupne foldere kopirate u addons folder aktivne verzije Blendera.

Pokrenite ponovo Blender i ostavite ga po strani.

3. bvhacker

Motion Capture izgleda sjajno, realistično u potpunosti i sl. međutim dolazi sa određenim problemima koji nisu poželjni u game devu.

Jedan od njih je kretanje samog modela... Model se kreće baš kako se osoba koja je snimila sebe kretala. Mi to ne želimo već želimo da sami kontrolišemo brzinu u igri.

Opet srećom po nas, postoji bvhacker - alat koji menja motion capture fajlove u određenom formatu. On je takođe besplatan a autor moli za samo 10 dolara donacije ukoliko ga koristimo često.

No pre svega nam treba motion capture fajl.
Pogledajte kraj ove stranice za informacije o tome gde možete besplatno i legalno da ih nabavite :
http://www.makehuman.org/doc/node/mhblendertools_makewalk_basic_workflow.html

Ja ću koristiti takođe jedan od tih fajlova za ovaj tutorijal...

Dakle kada konačno nađete BVH fajl koji vam odgovara možemo da krenemo sa poslom.
Ja ću samo ukloniti kretanje modela ovog puta.

Preuzmite i instalirajte bvhacker sa ove adrese : http://www.bvhacker.com/

Pokrenite bvhacker.

Kliknite na "File > Open" i izaberite BVH fajl.

Klikom na Play dugme možemo videti kako će izgledati animacija kostura modela :



Zaustavite animaciju klikom na Stop dugme.

Kliknite na dugme Center a zatim na dugme XYZ :


Sada možemo da vidimo da je kostur humanoida na tlu i da "hoda u mestu".



File > Save > Upišite neko novo ime i sačuvajte fajl.



Vraćamo se nazad na Blender!

4. Nazad na Blender

Sada kada smo fajl sredili da bude koristan za game dev, možemo da ga primenimo na našeg MCDude čikicu.

Ukoliko niste, otvorite model koji ste sačuvali iz Blendera.

Ukoliko ste sve uradili pravilno, Blender će sada imati tri nova dodatka kada odemo u File > Preferences > Addons. Otvorite taj prozor i u polje za pretragu upišite "Make". Videćete nove dodatke. Čekirajte kućice pored svakog :



Ponovo ugasite prozor.

Sada na sceni vidimo čoveka i ukoliko ništa niste dirali videćete i linije raznih boja koje unutar čoveka.

Denim klikom kliknite na liniju (armaturu).

Ukoliko ne vidite Toolshelf (obeležen crvenim pravougaonikom) pritisnite taster T.
Izaberite Misc karticu i tamo ćete videti nekoliko MakeHuman unosa.



Kliknite na dugme "Load And Retarget" u kategoriji "MakeWalk v 0.943: Main"



Izaberite izmenjeni fajl i učitajte ga. Sačekajte koju sekundu da Blender završi posao.

(Izmena:: Muška animacija ima generalni problem i nisam mogao da je iskoristim pa sam je zamenio ženskom animacijom koja radi)

Kada Blender završi posao, videćete da je mesh sada u T pozi. Kliknite na dugme kao na Gif-u i videćete da je animacija savršena :



Da nismo koristili bvhacker, ovako bi izgledala animacija :



4.2 Eksportovanje za Unity

File > Save > Sačuvajte pod nekim imenom .blend fajl. Ukoliko imate poslednju verziju Blendera neće biti problema, ukoliko pak nemate i Unity neće da prepozna .blend fajl, eksportujte ga kao FBX.

Sve je spremno za Unity sada!

5. Unity

Unity je naš game engine zbog kog smo i radili sve ovo.
Ukoliko ga nemate možete da ga preuzmete i instalirate sa ove adrese : http://unity3d.com/

Otvorite Unity, napravite novi projekat.

5.1. Uvlačenje modela u Unity

U Project panel prevucite .blend fajl i folder "Textures" :





Selektujte taj model u Unityju i u Project Inspector kartici kliknite na "Animations".
Uverite se da vidite animacije i da kada pritisnete dugme "Play" u donjem prozoru, animacija radi.
"Import Animation" treba biti čekirano takođe.



5.2 Mecanim sređivanje

Prevucite naš model u Hierarchy panel :




Sada ćemo napraviti Animation Controler za našeg lika. Animation Kontroler je u sklopu novog sistema animacija, lak je za upotrebu takođe.




// Da namestite teksture modelu kliknite na ime modela u Hierarchy kartici. Zatim idite redom od unosa do unosa i podešavajte teksture u Inspector kartici. Model dolazi sa tri teksture : Diffuse, Normal i Specular ali mi koristimo samo Diffuse.




//

Kliknite na novi animation kontroler dva puta i otvorićete Animator prozor :




Kliknite na malu strelicu pored naziva modela u Project kartici koja će prikazati sve njegove komponente, uključujući i animacije.
Prevucite animaciju u novi prozor Animatora :



Animacija "motiFixedWakl" je sada narandžasta - to znači da je ovo osnovna animacija koju će Model koristiti. Obično nam je osnovna animacija "idle" tj. animacija gde je lik jednom mestu opušten.

Kliknite na naziv modela ponovo, zatim na "Animation", izaberite vašu animaciju i čekirajte "Loop Pose"




Sada možemo da prosledimo AnimationController modelu.
Kliknite na model, ovog puta u Hierarchy kartici i u komponenti Animator na mesto Controller prevucite kreirani Animation Controller :

Vidimo sada da kada pustimo igru, animacija radi - doduše uz par problema poput prelamanja obuće sa kožom - ovo se ne rešava u Unityju već u Blenderu i zahteva malo više posla i nije tema ovog tutorijala. cap cap




//****
Postoji još jedan problem sa konkretno ovim modelom. Model nije lepo pozicioniran i animacija će uvek biti suprotna od smera kretanja.

Ovo se takođe rešava u blenderu, međutim ukoliko naiđete na model ikada koji ima takav problem, možemo lako da ga rešimo tako što ćemo ceo model da stavimo u novu grupu i da mu promenimo transform.

GameObject > Create Empty
Prevucite model čoveka iz Hierarchy kartice na "GameObject"
Podesite rotaciju modela čoveka tako da kada pustite animaciju ona odgovara Z Forward osi :


Olakšajte posao sebi tako što ćete kliknuti na play i imati živi prikaz rotiranja modela.
Više tutorijala o game devu na forumu mycity.rs
//****

OK, dakle animacija radi, hajde sada da vidimo kako možemo da pomeramo lika.

5.3. Programiranje animacija

Ovde je situacija krajnje jednostavna - kada pritisnemo neki taster pomeraćemo lika napred i želimo da se tom trenutku pusti animacija.

Nećemo imati nikakvu tranziciju između animacija jer imamo samo ovu jednu pa ćemo stvari da spustimo na jednostavan nivo.
Koristićemo jedan bool koji će pustati i gasiti animaciju.

Kako nemamo "idle" animaciju, dobićemo ružan rezultat ali šta je tu je Very Happy

Kreiraćemo novi parametar u animatoru - boolean "Walking":




Zatim ćemo napraviti tranziciju sa praznog "State"-a ka animaciji hodanja:



Kliknite na tranziciju (strelica bele boje između dva Stanja) i u tranzicijama podesite uslov : "Walking = true"



Uradite ovo isto samo sa surpotne strane :
motiFixedWalk ka New State tranzicija i u njenim parametrima postavite "Walking = false".

Da dobijete ovaj Empty State kliknite desnim klikom u Animator kartici i iz menija izaberite Create State > Empty.

Takođe ćemo sada ovaj "Empty State" da postavimo kao osnovnu vrednost.
Desni klik na njega i kliknite na "Set as Default"



Sada kada pokrenemo igru, model će beživotno stajati ispred kamere.

Hajde da napišemo skriptu za pomeranje.


Kliknite na prazni GameObject u koji ste smestili lika, ukoliko niste radili taj korak kliknite na model lika.
Zatim na "Add Component"
Create new Script > "Movement"
I izaberite jezik koji vama odgovara.
Ja ću skriptu pisatu u C# ali ću dati i JS verziju.



Sada imamo novu komponentu - Movement skriptu.
Dvoklik na nju i otvoriće se Monodevelop ili editor koji koristite.
Kod je isti bez obzira na editor pa ću ja koristiti VS 13.

Sada će nam trebati jedna promenljiva tipa Animator na koju ćemo zakačiti komponentu Animator sa čoveka.
Deklarišite je...



Ako se sada vratim u Unity editor, videću da imam novo polje u samoj komponenti skripte - Human Animator. Potrebno je da podesimo animator sa čoveka ovde:



trebaće mi jedna promenljiva za brzinu takođe.

float speed = 0.5f;

Na kraju ćemo pisati jednu proveru unutar Update funkcije koja se dešava svakog frejma.
Ovde želim da proverim da li je igrač pritisnuo taster W i u tom slučaju ću pomerati lika i aktivirati animaciju preko naše Animator komponente.

void Update () {         if (Input.GetKey(KeyCode.W))         {             humanAnimator.SetBool("Walking", true);             MoveChar();         }         else         {             humanAnimator.SetBool("Walking", false);         }    }

Dakle, proveravamo da li je pritisnut taster W, ukoliko jeste preko naše komponente podešavamo boolean walking na true i pozivamo MoveChar funkciju.

MoveChar funkcija je jednostavan transform.translate :

 void MoveChar()     {         transform.Translate(Vector3.forward * speed * Time.deltaTime);     }





Što se JSa tiče :
var humanAnimator : Animator; var speed : float = 0.5f; function Update () {    if (Input.GetKey(KeyCode.W))         {             humanAnimator.SetBool("Walking", true);             MoveChar();         }         else         {             humanAnimator.SetBool("Walking", false);         } } function MoveChar(){ transform.Translate(Vector3.forward * speed * Time.deltaTime); }

Sada kada odemo nazad u Unity i pustimo igru, videćemo da sve radi očekivano :



(Pomerite float vrednost na nešto više od 0.5 ako želite da vidite kako se lik pomera. Recimo 4)
Međutim ne izgleda dobro jer nemam idle animaciju...

Ovo je dovoljno da shvatite poentu, korak dalje, sredite idle animaciju, sredite running animaciju i dobićete sjajne rezultate.

Za kraj, ja sam malo vremena potrošio na ispravljanje animacija u bvhackeru i evo lepe tranzicije između šetanja i idle animacija :




Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

Koliko vidim VS proradio Very Happy



Ko je trenutno na forumu
 

Ukupno su 783 korisnika na forumu :: 35 registrovanih, 4 sakrivenih i 744 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., antonije64, Apok, aramis s, Areal84, ArmyBoss, ccoogg123, CikaKURE, dankisha, debeli, deimos25, deLacy, Dorcolac, Georgius, helen1, hooraay, Kubovac, Mercury, Metanoja, Milos ZA, milutin134, Mixelotti, Nemanja.M, nenad81, NikolaGTR, NoOneEver Dreams, nuke92, panzerwaffe, procesor, RJ, robert1979, sasa87, vathra, VJ, zbazin