Professional Documents
Culture Documents
Primena Dizajn Sablona Na Razvoj Frejmvorka Za Animiranje Pokreta
Primena Dizajn Sablona Na Razvoj Frejmvorka Za Animiranje Pokreta
Primena Dizajn Sablona Na Razvoj Frejmvorka Za Animiranje Pokreta
: :
DIPLOMSKI RAD
Kandidat: Branislav Milojkovi Broj indeksa: 38/07
Sadraj
Sadraj........................................................................................................................ 2 1. Uvod....................................................................................................................... 4 1.1. Modelom upravljan razvoj................................................................................4 1.2. Dizajn abloni...................................................................................................5 1.3. Kompjuterska animacija...................................................................................5 1.3.1. Animacija 3D Modela..................................................................................5 1.3.2. Fiziki modeli..............................................................................................6 1.3.3. Proceduralni modeli....................................................................................6 1.3.4. Kljuni frejmovi...........................................................................................6 1.3.5. Direktna kinematika...................................................................................7 1.3.6. Inverzna kinematika...................................................................................8 2. Opti model frejmvorka..........................................................................................9 2.1. Zahtevi za frejmvork......................................................................................10 2.2. Razvoj modela................................................................................................12 2.2.1. Osnovni model.........................................................................................13 2.2.2. Matematiki model...................................................................................15 2.2.3. Model perzistencije...................................................................................16 2.2.4. Model transformacija................................................................................17 3. Implementacija u programskom jeziku Java.........................................................19 3.1 Opis okruenja.................................................................................................19 3.2 Struktura projekta...........................................................................................20 3.3. Prikaz implementacije ablona.......................................................................22 3.3.1. Observer...................................................................................................22
1. Uvod
U ovom radu je prikazan razvoj frejmvorka za animiranje pokreta. Primenjeni su dobro poznati dizajn abloni iz oblasti softverskog inenjerstva, i prikazano je na koji nain dizajn abloni poboljavaju razvoj frejmvorka i daju mu fleksibilnost. Proces razvoja je detaljno opisan, od poetne ideje do konane implementacije u kodu. Prikazan je opti model reenja, kao i implementacija koja moe da se koristi u praksi. Problem koji je programski reavan je iz oblasti kompjuterske animacije. Cilj je pokazati kako se kroz objektne modele moe obezbediti podrka za potpuno animiranje pokreta, uz dodavanje elemenata slobode i proirivosti, tako da se sam proces animiranja moe naknadno dopuniti i poboljati. U prvoj sekciji rada dat je kratak opis onoga to je uraeno, kao i pregled osnovnih koncepata koji su neophodni za razumevanje ostatka rada. Dat je opis modelom upravljanog razvoja, dizajn ablona i kompjuterske animacije. Druga sekcija se bavi samim razvijenim modelom koji reava postavljen problem. Model je dat u jeziku UML. Uz modele je opisano i na koji nain su primenjeni dizajn abloni, na nivou modela. Trea sekcija se bavi konkretnom implementacijom modela u programskom jeziku Java. Dat je pregled koritenih programskih alata i biblioteka, i detaljno je opisana primena dizajn ablona. U etvrtoj sekciji je izloen zakljuak, i opisane su prednosti i mane razvijenog reenja. Peta sekcija sadri reference na literaturu i materijale koritene u toku izrade rada.
Animacija ovog tipa se i dalje primenjuje u kinematografiji. Raunarska podrka animaciji je poela da se pojavljuje tek krajem 70ih godina prolog veka. Prvi u potpunosti raunarski animiran film je bio Toy Story (1995). Iako je u potpunosti renderovan pomou raunara, Toy Story, kao i moderni filmovi pravljeni na slian nain, mogu da budu veoma skupi kako finansijski, tako i po
pitanju uloenog vremena za izradu. U potpunosti automatska animacija jo uvek nije blizu, ali alati za razvoj animacije na raunaru su doiveli veliki razvoj. Oni oslobaaju animatora velikog dela posla i brzo obezbeuju izvanredne specijalne efekte. Osnovni pristupi su: (i) Fiziki Modeli; (ii) Proceduralni Modeli; (iii) Primena Kljunih Frejmova.
Kompleksnost pokreta je prvu opazio Eadweard Muybridge pomou vie sinhrnoizovanih kamera koje su hvatale frejmova u veoma malim vremenskih razmacima. Cilj mu je bio da stvori animirane fotografije, tako da je njegov rad pretea modernog filma. Najpoznatiji set njegovih fotografija predstavlja konja u galopu (pokazujui po prvi put, takoe, da su u jednom trenutku sve etiri noge podignute sa zemlje) na kojima se jasno vidi koliko je pokret zapravo kompleksan. Kompleksnost prirodnog pokreta je ono to ga ini tekim za izvoenje raunarskom animacijom. Zato je efikasnije koristiti motion capture tehnike. Ideja je snimiti glumca kako izvodi pokrete, tako da se kljune take na njegovom telu mogu pratiti i kasnije uneti u raunar.
jednostavan problem koji se moe reiti transformacijama matrica, i ve je esto vien u upotrebi. [5][6]
3.
4.
5.
Definisanje pokreta
6.
Definisanje ogranienja
7.
Definisanje kinematike
8.
Definisanje transformacija
9.
Perzistencija
Frejmvork mora da obezbedi mehanizam za perzistiranje skeleta, 3D modela i pokreta na proizvoljan medijum (dakle, uz mogunost dodavanja novih medijuma od strane korisnika).
Iterator: dizajn ablon koji opisuje mehanizam za prolaenje kroz proizvoljnu strukturu. Definie se interfejs koji ima metode za kretanje kroz strukturu i pravi se asocijacija ka tom interfejsu od strukture kroz koju treba iterirati. Kada treba izvriti iteraciju, konstruie se konkretan iterator koji po unapred zadatom mehanizmu prolazi kroz strukturu. U naem sluaju, trebae nam dva iteratora jedan za prolazak kroz zglobove i drugi za prolazak kroz kosti. Da je frejmvork rigidniji, mogli bismo da se ograniimo samo na jedan od ta dva i itav ablon nam moda ne bi ni trebao. Ovako omoguavamo programeru da prolazi kroz strukturu kako eli, ili ak da napravi svoj mehanizam za iteriranje kroz telo. Dodatno, da bismo obezbedili mogunost prolaska kroz telo razliitim putanjama (ovo je bitno da bi bila mogua i direktna i inverzna kinematika), primeniemo dodatni Strategy ablon. Strategy: Omoguava delegiranje izvravanja nekog posla objektu koji poznaje posebnu strategiju obavljanja posla. Definie se interfejs koji zahteva implementaciju metode za obavljanje posla koji se delegira. U objektu koji je inicijelno trebalo da obavi funkciju se ostavlja asocijacija ka ovom interfejsu, i po potrebi se poziva konkretna implementacija interfejsa. U naem sluaju, elimo da se itererianje moe vriti i uz i niz stablo tela, kao i da kada se ide niz stablo, da se moe prolaziti kroz kosti DFS i BFS putanjom. Ovo je ilustrovano kroz IterationStrategy interfejs i implementacije BFSIteration, DFSIteration i AncestorIteration.
Sl. 4. Matematiki model Builder: Builder ablon se primenjuje kada se jedan objekat moe konstruisati na razliite naine, zavisno od situacije. U naem sluaju, skup poligona moe da predstavlja razliite smislene objekte, sve zavisno od toga za ta e frejmvork biti primenjen. Mesh se moe oblikovati kao ravan, lopta, ivotinja, itd. Flyweight: Poto e skup poligona potencijalno nositi veoma velik broj poligona u sebi, javlja se potreba za primenom Flyweight ablona, koji e minimizirati memorijsku zahtevnost objekata koji su komplikovano konstruisani. Flyweight reorganizuje strukturu objekta tako da umesto da se instancira veliki broj gradivnih delova (u naem sluaju poligona), instancira se samo jedan, a pored njega se pamte pravila za rekonfiguraciju umesto da se prave kopije. Ova pravila se
primenjuju po potrebi, npr. prilikom primene transformacija ili pri iscrtavanju objekta.
Sl. 5. Model perzistencije Bridge: Cilj je da se obezbedi da objekti koji jo uvek nisu definisani mogu da se sauvaju na proizvoljnom medijumu koji prihvata niz bajtova. Definitemo interfejs za opis objekta koji moe da se upie (Serializable) i preputamo nekom proirivom pisau (ObjectWriter) da izvri sam upis na neki medijum. Za primer su navdena dva pisaa u datoteku na hard disku (FileWriter) i u bazu podataka (DBWriter).
Sl. 6. Model transformacija Composite: Strukturni ablon koji opisuje strukturu koja sadri samu sebe. Dakle composite nam omoguava da objekat kao celina bude sastavljen od manjih instanci istog tog objekta. Ovo, naravno, nije nuno sluaj, tako da postoje trivijalne (atomine) instance objekata od kojih se grade vee kompleksnije instance. U naem sluaju, transformacije e moi da se grade na ovaj nain. Poto transformacija takoe implementira Serializable interfejs, ovo otvara mogunosti za pravljenje biblioteke pokreta.
Facade: Za pristup raznovrsnim mogunostima transformacija, definisaemo fasadu. Fasada slui da pojednostavi pristup inae kompleksnom delu koda. Ovo takoe ograniava fleksibilnost, tako da e frejmvork pored toga to prua fasadu takoe ostaviti dovoljno javnih elemenata ovog paketa da se fasada u potpunosti moe zaobii, i po potrebi direktno raditi sa gradivnim elementima transformacije. Template Method: Transformacije e biti brojne, i poeljno je da budu proirive. Zato definiemo apstraktnu transformaciju i ostavljamo mogunost dodavanja novih kroz reimplementiranje odgovarajue metode. Observer: Observer ablon omoguava da proizvoljan posmatra (metod prikaza) moe da dobije sve informacije o transformaciji, u toku rekonstrukcije kompletnog pokreta. Observer takoe obezbeuje da, po potrebi, bude mogue da vie razliitih prikaza istovremeno mogu da prate izmene modela.
Java 3D je biblioteka koja omoguava rad sa objektima u trodimenzionalnom prostoru i njihovo prikazivanje na ekranu. Java 3D je kao paket razvijena uz Javu, ali ne isporuuje se sa standardnim Java SE instalacijama. Neophodno je uvesti je kao zasebnu biblioteku u projekat.
Sl. 7. Struktura projekta Svi prethodno opisani modeli su rasporeeni u zasebne pakete. Kljune klase su u svim paketima oznaene kao public, dok su ostale na nivou vidljivosti paketa. Sam view paket je podeljen u etiri celine: j3d_adapters: Sadri klase iz Java 3D biblioteke koje treba adaptirati. Adaptacija je vrena radi obezbeivanja funkcionalnosti serijalizacije. listeners: logiki obuhvat raznih hendlera za dogaaje na grafikom korisnikom interfejsu. Unutar ovog paketa, klase su rasporeene po podpaketima kojima su imena davana po formama koje opsluuju. painters: iscrtavanje objekata se delegira na odgovarajue paintere. Ovako moemo da budemo sigurni da logika iscrtavanja objekata ostaje odvojena od modela.
ui: sadri grafike komponente koje se koriste u aplikaciji. Prozori, dijalozi, paneli i sl.
3.3.1. Observer
Observer ablon je korien u okviru modela transformacija, da obezbedi da proizvoljni agent koji prikazuje transformaciju moe da u toku raunanja transformacije izvri proizvoljno detaljan prikaz. Evo implementacije: 1) Definie se sluaoc za dogaaj
package transfo
2) U klasi AbstractTransformation odrava se lista sluaoca:
public Ab
U pitanju je klasina implementacija observer ablona, sa jednim izuzetkom. Treba uzeti u obzir da e sluaoci na ove dogaaje biti objekti koji eventualno nisu pod kontrolom razvojnog ininjera. Zbog toga treba oekivati da sluaoci nee moi da se serijalizuju. Poto je bitno da transformacija kao takva moe da se serijalizuje, primenjuje se dodatna mera predostronosti, i, uz proveru, ponovo inicijalizuje lista sluaoca pri dodavanju novog sluaoca. U veini implementacija observer ablona, ovaj korak ne bi bio neophodan.
whi
Sl. 8. Aplikacija nakon inicijelnog pokretanja Po startovanju, aplikacija inicijalizuje Java 3D scenu (crni prostor) i model tela. Model tela je u poetku prazan, i prvo to treba uraditi jeste dodati neke kosti.
Sl. 9. Dijalog za dodavanje kostiju Na ovom dijalogu moemo povezati kost sa ve postojeom kosti kao roditeljem. Od roditelja zavisi poetna taka nove kosti, i zbog toga ta polja ostaju zasivljena. Korisnik sam unosi krajnje take. Kao to je diskutovano u prvom i drugom odeljku, kost e biti ono to e se animirati. Sada treba dodati na scenu neke slobodne dui, koje e biti vezane za kost, i koje e je pratiti u animaciji.
Korisnik moe dodati proizvoljno mnogo dui, kao i kostiju na scenu. Kada je scena postavljena, moe da se zapone rad na opisu same animacije.
Sl. 11. Povezivanje kostiju sa duima Nakon to su kosti i dui povezane, treba dati definiciju animacije u prostoru i vremenu.
Sl. 12. Definisanje animacije Pri definisanju animacije, neophodno je navesti za koju kost se vezuje animacija, kao i da li postoji neka roditelj transformacija. (Napomena: ako se jedna transformacija sastoji iz vie manjih transformacija, to znai da e se pri putanju
roditeljske animacije prvo pustiti sve animacije naslednici). Poto je korisnik izabrao translaciju kao vrstu transformacije, dijalog mu nudi parametre koji su relevantni za translaciju.
Sl. 13. Konani izgled scene Kosti su u aplikaciji prikazane istom belom bojom, dok su dui prikazane sivom bojom. Dugme Save scene omoguava snimanje itavog podeavanja u datoteku na hard disku. Dugme Open scene uitava scenu iz proizvoljnog, prethodno snimljenog, fajla na disku. Animacija se moe pustiti pritiskom na dugme Play.
4. Zakljuak
U ovom radu opisano je kako se moe razviti frejmvork za animiranje pokreta. Pokazana je primenjena dizajn ablona, kako na nivou opteg modela, tako i u konkretnoj implementaciji u programskom jeziku. Pokazano je kako primena ovih ablona poveava fleksibilnost reenja. Pokazano je kako moe da izgleda jednostavna implementacija po modelu, i neke specifinosti same implementacije. Diskutovani su problemi animiranja. Dobijeno je fleksibilno, opte programsko reenje za problem animiranja pokreta. Prilikom implementacije, uoeni su i izvesni problemi koji se mogu reavati u daljem radu. Implementacija prikaza pomou biblioteke Java 3D funkcionie, ali nije optimalna. Opisan model pretpostavlja da e razvojni inenjer sam implementirati svu logiku animiranja, a ona se u nekim sluajevima moe optimalnije izvriti unutar grafike biblioteke kao to je Java 3D, u direktnoj sprezi sa grafikim procesorom i prikazom rezultata animiranja. Model ne prua nikakvu podrku za rad sa teksturama, ili obinim bitmapiranim slikama. U bilo kojoj realnoj primeni 3D animacije, ne bi se mogao napraviti zavren projekat bez ove funkcionalnosti.
5. Reference
[1] http://www.omg.org/mda/mda_files/SSSummit_nordmoen_OMG.pdf [2] http://www.uml.org/ [3] http://sourcemaking.com/design_patterns [4] http://www.pixar.com/shorts/ljr/theater/short_320.html [5] http://www.eng.utah.edu/~cs5310/chapter4.pdf [6] http://www.siggraph.org/education/materials/HyperGraph/animation/rick_parent/for wardAnimation.html [7] http://www.doc.ic.ac.uk/~dfg/graphics/GraphicsLecture18.pdf