Animiranje izraza lica - Unity i Blender shape keys

Animiranje izraza lica - Unity i Blender shape keys

offline
  • Lead Developer ⠀ ⠀⠀⠀⠀⠀⠀ Go 5 Creative
  • Pridružio: 14 Feb 2008
  • Poruke: 12175

Nije problem napraviti animacije u Blenderu koje okreću, na primer, celo telo. Međutim problem je uraditi nešto direktno na mesh-u što podrazumeva menjanje geometrije i to uvući u Unity.

Unity još uvek ne može da prepozna animacije koje napravite uz pomoć Shape Keys animacija u Blenderu, međutim možemo da izvučemo Shape Keys bez problema i uvučemo ga u Unity, odakle se može obraditi.

Kako bi demonstrirao ovo uzeo sam jedan od praktičnijih primera - izraze lica.
Preuzećemo besplatni model ženske glave sa interneta. Importovaćemo ga u Blender. Napravićemo Shape Key koji će napraviti ljuti izraz lica. Sačuvaćemo sve skupa. Uvući u Unity odakle ćemo pristupiti onome što nam treba.

Indeks :
1. Preuzimanje besplatnog modela
2. Instalacija Blendera
3. Uvlačenje modela u blender i njegova obrada
4. Uvlačenje blend fajla u Unity
5. Kreiranje Animacija izmenom KeyShape vrednosti

1. Preuzimanje besplatnog modela
- Otvorite sledeći link : http://archive3d.net/?a=download&id=440a1067
- Kliknite na plavo Download dugme
- Zatim kliknite na "Ok, download" link u novom prozoru.
Niste primorani da "lajkujete" stranicu.
- Raspakujte arhivu koju ste upravo preuzeli na lako dostupnu lokaciju

2. Preuzmite blender ukoliko ga nemate
- Otvorite sledeći link : http://www.blender.org/
- Kliknite na plavo dugme : "Download Blender" 2.70a (u zavisnosti od vremena kada čitate ovaj tutorijal, verzija može biti drugačija kao i sam postupak preuzimanja.
- Na novoj stranici preuzmite bilo instalaciju ili zip fajl, za verziju sistema koja odgovara vama.
- Instalirajte blender ili pokrenite isti ukoliko ste preuzeli portable verziju.

3. Uvucite fajl u Blender
- Pokrenite blender, zatim kliknite na meni File, izaberite "Import" i na kraju selektujte "3D Studio (.3ds).
U novom prozoru pronađite folder gde ste raspakovali model koji ste preuzeli u prvom koraku i otvorite fajl "Anakinhead.3DS"



Dočekaće vas ovaj prizor :




Ovde vidimo nekoliko podeljenih elemenata :
- Glava
- Očni kapci
- Oko

Nama će za ovaj slučaj trebati samo glava, stoga selektujte očne kapke i oko i nakon svake selekcije pritisnite taster X na tastaturi. Pojaviće se mali meni koji će od vas zatražiti potvrdu brisanja, kliknite na njega.



Na Screenshot-u sam obeležio crvenim strelicama sve objekte koje trebate da selektujete i obrišete.

Vidimo takođe da je Shading prikaz ovog modela "Flat". Kliknite na glavu i u Tools kartici pronađite Shading, te kliknite na "Smooth".



Sada možemo da se "bacimo" konkretno na ono što nam treba.

Upotrebom KeyShapes-a možemo da promenimo geometriju nekog modela. KeyShapes radi tako što napravimo jedan novi Key Shape. Zatim njegovu vrednost postavimo na 1.00. Zatim pomeramo geometriju modela dok ne budemo zadovoljni izgledom. Raspon od 0.0 do 1.0 će biti tranzicija geometrije od početnog stranja do stanja koje smo napravili.

Iako zvuči malo konfuzno, ubrzo ćete shvatiti o čemu pričam.

Dok je model glave selektovan, kliknite na Object Data dugme u Properties kartici.
Zatim pod "Shape Keys" sekcijom, dva puta kliknite na plus dugme.



Dobili smo dva unosa : Basis i Key 1.
Dvoklik na Key 1 i nazovite ga "Namrstena", ili kako god želite, nebitno je.

Odmah ispod Shape Keys-a vidimo slider "Value". Sada je trenutno na 0.000 i to znači da je ovo stanje glave "default" stanje.

Pomerite slider na maksimum : 1,000 a zatim pritisnite TAB taster na tastaturi.

Blender će ući u "Edit mode" gde direktno možemo da pomeramo geometriju mesheva.



Na screenshot-u sam obeležio vrednost "Namrstena" KeyShape-a, dakle treba biti 1,000.
Zatim sam obeležio glavu - vidimo geometriju glave sada. Na kraju sam obeležio "Edit Mode" dugme (nazovimo ga dugme, u pitanju je combo box) koje nam takođe ukazuje da smo u ovom režimu.

Uzevši u obzir da je ShapeKey na 1,000 kada završimo sa pomeranjem geometrije, taj Shape Key će napraviti automatsku tranziciju između mirovanja i "namrštenosti".

Geometrjiu možete menjati na X načina, ja ću koristiti skulpting mode jer mi je najlakši.

Kliknite na "Edit Mode" dugme, zatim izaberite "Sculpt Mode".



Primetićete da su sada linije geometrije nestale. Možete da radite bez njih, međutim ja ih preferiram pa ću ih aktivirati, pogledajte screenshot :



Obeležio sam "Object" dugme u Properties editoru desno na koje trebate kliknuti, zatim trebate čekirati "Wire". Odmah će se prikazati žičani pregled na modelu glave.

Sa leve strane sam obeležio celokupnu sekciju koja ima alate za Sculpting mode.
Vidite da možete da izaberete različite četkice i podesite njihova svojstva.

Kliknite na sličicu četkice i izaberite "Thumb", ja ću nju koristiti jer mi je pogodnija.
Zatim podesite po želji, meni je 128px sasvim dovoljno.

Sve što sada treba da uradimo je da ovo lice transformišemo u ljutito lice pomeranjem geometrije.
Setimo se : Vrednost KeyShape-a "Namrstena" je 1.000

Jednostavno četkicom "crtajte" po geometriji i deformišite je, dok ne dobijete "namršteno lice".
Ono kod mene ovako izgleda :



U odnosu na normalni izgled lica :



Tranziciju između normalnog i ljutitog lica možemo videti tako što ćemo se vratiti u Object Mode a zatim pomeramo Shape Key 1 vrednost sa 0.000 do 1.000.



Sačuvajte projekat kao blend fajl na neku lokaciju koja je lako dostupna :
File > Save

4. Uvlačenje ovog fajla u Unity

Otvorite Unity, napravite novi 3D projekat. Sačekaće vas prazna scena.
Prevucite .blend fajl koji smo sačuvali pre minut u Assets karticu.

Kada se fajl pojavi u Assets kartici, prevucite ga na Scene ili Hierarchy karticu.

Ukoliko ste sve uradili kako treba, sačekaće vas model na sceni.
Ja sam dodatno morao da dodam jedno Direkciono svetlo i da podesim kameru kako bi gledala u model direktno.




Crveno je obeležen gdeo gde prevlačite .blend fajl. Zelenom su obeleženi delovi gde prevlačite model iz Assets kartice.

Kako smo naš Shape Key napravili na Glavi, kliknite na strelicu pored imena modela u Hierarchy kartici, zatim ponovo kod unosa "_____DUMMY_Group01" i konačno selektujte "Anakin".


Desno ćete u Inspector kartici videti da je ovo Skinned Mesh . Tamo postoji unos "BlendShapes" i još jedan unos unutar njega "Key 1" sa vrednošću 0.
To je naš Shape Key. Ukoliko sada pomerimo vrednost na 100, naš model će se namrštiti baš kao i u Blenderu.





Sada ovaj ključ možemo da izmenimo po želji, da ga animiramo unutar Unity-ja ili mu pristupimo kodom.

5. Kreiranje animacije
Window meni > Animation . Pojaviće se nova kartica "Animation"
Kliknite na Add Curve, zatim sačuvajte animaciju pod bilo kojim imenom.

Kliknite ponovo na Add Curve, zatim proširite grupu "___Dummy_Group01", zatim proširite "Anakin", zatim proširite "Skinned Mesh Renderer", pronađite stavku "Blender Shape Key 1" i kliknite na plusić pored.



Sada vidite dva Key Frame-a. Podesite vrednost prvog na 0, vrednost drugog na 100 i napravite razmak između njih.
Kada pustite animaciju dobićete ovaj rezultat :



5.1 pristupanje parametru kodom

Napravite novi Java Script i okačite ga na "Anakin" GameObject.

Deklarišite promenljive :
var skinnedMesh : SkinnedMeshRenderer; var shapekey : float = 0f; // da pratimo vrednost određenog shapekey-a var blendBrzina : float = 0.5f ; // da kontrolišemo brzinu

Podesite skinnedMesh :
function Awake () { skinnedMesh = gameObject.GetComponent("SkinnedMeshRenderer"); // isto kao i kada bi ga prevukli mišem u inspektoru }

Zatim u update funkciji :
function Update() {         if (shapekey < 100f) { //ukoliko je vrednost ove promenljive manja od 100             skinnedMesh.SetBlendShapeWeight(0, shapekey); //podesi vrednost prvog shapekey-a na vrednost promenljive 'shapekey'             shapekey += blendBrzina;         }

Obratiti pažnju : 0 težine primenjene na shape key znači da je taj shape key na nuli i nema uticaja. Težina 1 je zapravo 100, zbog toga koristimo float. Kako nama treba iz blendera vrednost od 0.00 do 1.00 logično je da ćemo ograničiti uslov na 100.

Ukratko, možemo da pristupimo vrednosti sa :
GetBlendShapeWeight - koja će vratiti vrednost i
SetBlendShapeWeight - kojom možemo da podesimo vrednost.
Više o tome u dokumentaciji

Bilo koju metodu da koristite, upotrebom Shape Keys-a imate ogromnu moć. Možete da napravite potpuno realistične razgovore, pokrete i animacije ili da deformišete mesh.

Ista skripta samo u C# :

using UnityEngine; using System.Collections; public class BlendShapeExample : MonoBehaviour {    SkinnedMeshRenderer skinnedMesh;    float shapekey = 0f;    float blendBrzina = 0.5f;        void Awake ()    {       skinnedMesh = GetComponent<SkinnedMeshRenderer> ();    }    void Update ()    {                    if (shapekey < 100f) {             skinnedMesh.SetBlendShapeWeight (0, shapekey);             shapekey += blendBrzina;    } } }



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
Ko je trenutno na forumu
 

Ukupno su 614 korisnika na forumu :: 60 registrovanih, 7 sakrivenih i 547 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 1567 - dana 15 Jul 2016 19:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: _Sale, A.R.Chafee.Jr., amaterSRB, Bane san, cavatina, darkolimar06, Dedal, dejan.lxxiv, Dicus, djordje92sm, DM1994, dozorni, drdoca, dule_pacov, goran.vvv, igorkozar83, Joja2, Kaplar2, komita1, Kubovac, kuntalo, Lucije Kvint, MarKhan, Marko Marković, mercedesamgzakon, Mercury2, Mihajlo2, mihajlot2013, MikeHammer, mikrimaus, Milan Kosić, Miskohd, Mixelotti, Nenad Stankovic, panonski mornar2, Panter2, pluer, powSrb, Ratnik84, RJ, rkekoke, rovac, Sasa Pavlovic, Snorks, stegonosa, stug, suton2, TEMPLJAR, vathra, VES 11119, vlvl, vobo, Voja1978, voja64, yrraf, zdrebac2, zgoljo, Zmaj 99, zoxknez, Zvrk