Budapesti Műszaki Főiskola Neumann János Informatikai Főiskolai Kar Szoftvertechnológia Intézet
TUDOMÁNYOS DIÁKKÖRI DOLGOZAT
3D-S FEJMODELL KÉSZÍTÉSE ÉS ANIMÁLÁSA
Szerzők:
Szőke Imre mérnők informatikus szak, IV. évf.
Konzulensek:
Vámossy Zoltán főiskolai docens
Tartalomjegyzék 1.
Bevezetés............................................................................................................................ 3 Videokonferencia ........................................................................................................... 3 Filmipar .......................................................................................................................... 3 Játékfejlesztés................................................................................................................. 3 2. Megoldandó feladat megfogalmazása................................................................................ 4 3. Modellezés ............................................................................................................................. 5 3.1 Célkitűzés ......................................................................................................................... 5 3.2 Lehetséges megközelítési módok áttekintése és elemzése............................................... 5 3.3 Megoldási módszer kiválasztása, indoklása..................................................................... 6 3.4 Modellezési feladat megvalósításának terve .................................................................... 7 3.4.1 Geometria .................................................................................................................. 7 3.4.1.1 Poligon modell létrehozása ................................................................................ 8 3.4.1.2 Referencia kép használata .................................................................................. 8 3.4.1.3 Simított kocka létrehozása és a szimmetria megvalósítása................................ 9 3.4.1.4 Poligon műveletek bemutatása......................................................................... 10 3.4.1.5 Mérföldkövek a modellezésben ....................................................................... 13 3.4.1.6 Normál vektorok felépítése ............................................................................. 14 3.4.2 Anyagjellemzők ...................................................................................................... 15 3.4.2.1 Textúra leképezés............................................................................................. 17 3.4.2.2 Textúra létrehozás ............................................................................................ 20 3.4.3 Saját alkalmazásba való integrálás.......................................................................... 22 4. Animáció .............................................................................................................................. 23 4.1 Célkitűzés ....................................................................................................................... 23 4.2 Lehetséges megoldások és azok sajátosságai................................................................. 23 4.3 Megvalósítandó módszer és a választás indoklása......................................................... 24 4.4 Animációs feladat megvalósításának terve .................................................................... 25 4.4.1 Anatómia ................................................................................................................. 25 4.4.2 Szabadformájú deformáció (FFD) .......................................................................... 31 4.4.2.1 Parametrikus görbék......................................................................................... 31 Törtvonal ...................................................................................................................... 31 Bézier görbe ................................................................................................................. 32 B-spline ........................................................................................................................ 33 4.4.2.2 Parametrikus felületek...................................................................................... 35 4.4.2.3 Szabadformájú deformáció (Free Form Deformation, FFD) ........................... 36 4.4.3 Animációs szintek ................................................................................................... 38 4.4.3.1 Absztrakt eljárások szintje ............................................................................... 38 4.4.3.2 Animációs egység szint.................................................................................... 40 4.4.3.3 A szkript szint................................................................................................... 41 4.5 Tesztelés ......................................................................................................................... 45 5. Eredmények bemutatása és elemzése................................................................................... 47 6. Továbbfejlesztési lehetőségek.............................................................................................. 48 7. Összefoglalás........................................................................................................................ 49 8. Függelék ............................................................................................................................... 50 8.1 Elérhetőség ......................................................................................................................... 50 8.2 Irodalomhivatkozások .................................................................................................... 50 8.3 Programhivatkozások ..................................................................................................... 51 8.4 Ábrajegyzék ................................................................................................................... 51 2
1. Bevezetés Egy háromdimenziós, animált arc széles körben alkalmazható. Főbb alkalmazási területek az arcsebészet, a rendőrség, kommunikáció és a szórakoztatóipar. Ezeken a területeken egy kamerával párosult rendszer nagy érdeklődésre tehet szert. Ha a kamera képből meghatározhatóak az animációs paraméterek, nagyon jól használható alkalmazás jöhet létre a kommunikáció és a szórakoztatóipar területén.
Videokonferencia Kis sávszélességű hálózatok esetén, amikor nincs mód megfelelő mozgókép átvitelére, megoldást jelenthet egy 3D-s modell, valamint az animálásához szükséges adatok közvetítésese. A kapcsolat felvételekor átküldésre kerülne az arc jellemzői (modell, textúra, stb.), majd a kommunikáció közben már csak a mimika változásainak paraméterei kerülnének továbbításra, amely nagyságrendekkel kevesebb adat továbbítását jelenti egy képfolyamhoz képest.
Filmipar Az egyik legnagyobb motiválója a háromdimenziós karakter animációnak a reklám és a filmipar. Az új és hatásosabb reklámokhoz, filmekhez, új modelleket, effekteket és animációkat kell tervezni, hogy jobban lekösse a vásárló, közönség figyelmét. A fejlesztések általában időigényesek, ezért is törekszenek új, hatékonyabb módszerek megalkotására. Kamera kép alapján történő animáció nagyban gyorsítaná a fejlesztéseket. Mivel a fej sokszor van figyelem központjában, annak gyors, hatékony és életszerű animálása meglehetősen nagy előrelépést jelenthet.
Játékfejlesztés A számítógépes játékok egy kulcsfontosságú eszköze az arc animáció, amit a történet közvetítésére, jelenetek összekapcsolására használnak. Különösen fontos a realisztikus modellezés a kalandjátékoknál, ahol az események legnagyobb részét a beszélgetés teszi ki. A kamera képet, az előző példákhoz képest más megközelítésben, bemeneti eszközként használva, a játékok sokkal életközelibbé válhatnak.
3
2. Megoldandó feladat megfogalmazása A beveztő részben felsorolt lehetőségek kiaknázása céljából útjára indult egy projekt: „Háromdimenziós fejmodell animálása kamerakép alapján”. A cél olyan alkalmazás létrehozása volt, amely képes kiváltani az elterjedt videó-konferenciára képes programokat. Az ötlet abból fakad, hogy a háromdimenziós grafika és a képfeldolgozás eredményeit összekapcsolva a számítógépek teljesítményének kihasználásával létrehozható egy interaktív környezet, amely a hagyományos videó-telefonálásnál megszokott rossz képminőség helyett fokozott felhasználói élményt nyújt. Ez egy háromdimenziós modell egyszeri átvitelével valamint az animációs paraméterek folyamatos közvetítésével érthető el. A projekt két jól elkülöníthető feladatra bontható, melyek képfeldolgozás és 3D grafika jellegűek. Ennek megfelelően két modul került kialakításra. A képfeldolgozó modul feladata a modell állapotát szabályozó értékek előállítása a kameraképekből. A megjelenítő modul feladata a fej megjelenítése, valamint a képfeldolgozó modultól kapott paramétereknek megfelelő animálása. A dolgozat a szerző által készített megjelenítő modul kidolgozását hivatott bemutatni. A képfeldolgozó modul megvalósítása Markovics Mátyás feladatát képezte, akinek a munkássága szintén megtekinthető a következő helyen [1].
4
3. Modellezés Modellezés alatt a valós világ objektumainak leképezését értjük, jelen esetben a számítógép virtuális világába. A modellezés során a megoldandó feladat számára fontos információkat rögzítjük a lényegteleneket, pedig elhagyjuk.
3.1 Célkitűzés Egy valós személy arcának számítógépre való átültetése a cél. A modell geometriáját és színét tekintve lehetőleg minél jobban közelítse a modell tárgyát, azon kritérium figyelembevételével, hogy a részletgazdagság ne menjen a valós idejű megjeleníthetőség és animálhatóság kárára.
3.2 Lehetséges megközelítési módok áttekintése és elemzése Lemásolni egy élő embert és belehelyezni a számítógép virtuális világába, meglehetősen izgalmas. Azonban egy valódi arc lemásolása olyan gyakorlati korlátokba ütközik, mint mennyi időbe telik, míg eredményt látunk, mennyire bonyolult és költséges eszközök szükségesek valamint mennyire felel meg a valóságnak a kapott alakzat. A leggyakrabban használt modellezési eljárások hat kategóriába sorolhatók: Lézeres szkennelés [8] Lézerfénnyel végigpásztázzuk az alakzatot, amin az megtörik. A fénysugár deformációjából számolható ki a 3D-s koordináták. A legpontosabb eljárásnak mondható, ugyanakkor speciális és költséges eszköz szükségeltetik hozzá. Csík generátor és kamera [9] A lézeres szkenneléshez hasonlóan ez a módszer is a strukturált megvilágítás kategóriájába tartozik. A lézercsík helyett egy árnyékcsíkot (vagy akár többet és színeset is) vetítünk a tárgyra. A lézer szkenneléshez képest viszonylag olcsó és szerényebb teljesítményű. Sztereólátás Két megfelelően beállított kamerával sztereó kép készül. Az eljárás a geometriai kapcsolatot használja ki a sztereó képek között, hogy visszakapjuk a felület mélységét. A mért adatok gyakran pontatlanok és zajosak. Videó szekvencia [4] Képfolyamra kell szert tenni, amihez olcsó és teljesen passzív érzékelő szükséges, mint például egy hagyományos videokamera. Az egymás utáni képekből következtetünk az alakzat térbeli elhelyezkedésére. Minél több képkockánk van, annál jobb eredményt kapunk.
5
Általános modell és képek [2] Már meglévő 3D-s modellt és pár képből kinyert némi információt használ fel ez a módszer. Az általános modell gondoskodik a 3D geometriáról. Két vagy több képen észleljük a jellegzetes pontokat (például az arc legkarakterisztikusabb pontjait), amely alapján az általános modellt a kívánt alakzatúra deformálunk. Csak meghatározott objektumok modellezését teszi lehetővé. Közvetlen mérésen alapuló modellalkotáshoz viszonyítva kevésbé részletes modellt biztosít, ami megteremti a valós idejű feldolgozás lehetőségét. Zajra kevésbé érzékeny. 3D-s modellező program Számos 3D-s modellező és animáló program létezik a piacon. Léteznek szerényebb teljesítményű ingyenes (Wings3D [P8]) és borsos árú professzionális termékek (mint például a Maya vagy a 3ds MAX [P3]). A geometriát felület-primitívek (pl. háromszög) összeillesztésével, felosztásával, pontjainak áthelyezésével, összevonásával kapjuk meg. Továbbá a modellező programok nemcsak a geometria elkészítését, hanem textúrák, anyagjellemzők, fényforrások és további effektek megadását is lehetővé teszik. A modell elkészítése az előző technikákhoz képest sokkal több időt, éles szemet, gyakorlatot és némi művészi beállítottságot igényel. A valódi és a virtuális arc egyezésének mértéke a készítőn múlik.
3.3 Megoldási módszer kiválasztása, indoklása Lézeres szkennelés, csík generátor és kamera, sztereólátás, videó szekvencia mind mérésen alapuló modellalkotási technikák. A felsorolás csökkenő sorrendben kifejezi a megvalósításhoz szükséges hardver eszközök árát, beszerezhetőségének nehézségeit és pontosságát is. Eltekintettem ezen modell készítési technikáktól egyrészt a beszerezhetőségük, másrészt pedig a szolgáltatott eredmények miatt. A mérésen alapuló technikák eredménye ugyanis zajos, esetenként hiányos és nagy poligonszámból álló modellek, melyek közvetlenül nem használhatók valós idejű animációhoz. Általános modell és képek használata azon egyszerű okból nem valósítható meg, ugyanis feltételez egy már meglévő általános modellt. 3D-s modellező programra esett a választás, de ne gondoljuk hogy azért, mert "csak ez maradt". E grafikus programok segítségével egy egész virtuális világot meg lehet tervezni. Nem csak fejről, hanem bármilyen más valós vagy elképzelt objektumról készíthető modell. Segítségükkel olyan részletes modellek állíthatók elő, amelyek szükségleteinknek, animációs feltételeinknek megfelelők. Lehetővé teszik az anyagjellemzők, textúrák kezelését is, továbbá a kapott modell rugalmasan illeszthető saját alkalmazáshoz. Nem utolsó szempont az sem hogy bárki által hozzáférhetőek, ugyanis még a professzionális programoknak is létezik ingyenesen használható, teljes funkcionalitással bíró oktató változata.
6
3.4 Modellezési feladat megvalósításának terve Egy valódi arc saját alkalmazásba való átültetéséhez három fő munkafázist kell végrehajtani. A fej geometriájának létrehozása az első lépés. Az alakzatot anyagjellemzőkkel kell ellátni, hogy azt az érzetet keltse, mintha hús vér fejről lenne szó. Minimálisan meghatározandó tulajdonság a szín, de ezt tovább lehet fokozni az érdességgel és további effektekkel. Miután előállt a fej végleges verziója, át kell ültetni a modellező programban elért eredményeket a saját programba. A megvalósítás lehetséges alternatíváit az [A1]. ábra szemlélteti. Az egyes munkafázisok lehetőségeinek bemutatása és a kiválasztott technika részletes ismertetése a következő alfejezetekben kerül bemutatásra.
[A1]. ábra – A modellezés tervezési tere. (Részletesen bemutatásra kerülő technikák kiemelve)
3.4.1 Geometria A professzionális modellező programokban számos modellalkotási technika áll rendelkezésre a geometria felépítéséhez. A modellezés típusa alapján gyakorlatban a legmeghatározóbbak a poligon, felosztott felület, parametrikus felület és térfogati modellek. Mindegyik technikának megvan a maga előnye és hátránya, melyet az [A2]. ábra részletez. A megfelelő technika kiválasztásában leginkább a modell alkalmazási területének meghatározása segíthet. Célkitűzésként egy saját alkalmazásban megvalósuló valósidejű animációt fogalmaztam meg. A valós idejű színtér felépítéshez az alakzatot felépítő csúcspontok száma, az animáció megvalósításához pedig a szerkezet meghatározó. Ez alapján a poligon modellezést választottam, mert a munkafolyamat minden lépése során közvetlen módon nyomon követhető a végleges hálót felépítő csúcspontok száma és szerkezete egyaránt.
7
Modellalkotás típusa
Erősség
Gyengeség
Poligon modell
Könnyen, gyorsan szerkeszthető Gyors megjelenítés
Kemény élű felületekhez használható igazán
Felosztott felületi modell
Poligon modellezésnél leírtak, továbbá Modell finomítása sokszögek számának növelésével.
Parametrikus felületi modell
Többszörösen folytonos, sima felület is jól ábrázolható
Megjelenítéshez sokszögekre bontás szükséges Többletszámítás
Modellnek nincs Mintavételezési éles határa rácshoz tartozó sűrűségérték [A2]. ábra – Modellalkotási technikák összehasonlítása Térfogati modell
Néhány alkalmazási terület Sebességkritikus esetekben, valamint ahol számít a sokszögek száma. Sebesség és részletgazdagság közötti kompromisszum esete Ahol a megjelenés számít és a számítási idő másodlagos Mechanikai számítások
3.4.1.1 Poligon modell létrehozása [7] alapján A fej szerkezetének konkrét kialakításához a Maya (5.0) nevű 3D-s grafikus szoftver eszköz került felhasználásra, de a leírt funkcionalitások szinte minden modellező programban megvalósíthatók. Egyetlen poligon kocka létrehozásával és csúcspont-, felszín- és élszerkesztések sorozatával áll elő a fej formája. Sok időt és energia spórolható meg, ha a fej formálását fotókkal segítjük, arról nem is beszélve, hogy a modell így jobban fog hasonlítani a valódi megfelelőjére. Ennek megfelelően a következőkben a megfelelő referencia képről, poligon műveletekről továbbá a modell megjelenési minőségét javító normálvektorokról lesz szó.
3.4.1.2 Referencia kép használata A célszemélyről fényképet készítünk elölről és erre merőlegesen oldalról. Két állványra rögzített, pontosan beállított, azonos típusú fényképezőgéppel ugyanabban a pillanatban készített képektől jó eséllyel várható el, hogy egymásra merőlegesek lesznek. Mivel nem állt rendelkezésemre ilyen „stúdió” környezet, ezért képszerkesztő programmal korrigáltam a méretben és orientációban fellelhető hibákat. Az arc jellemző pontjainak (szem, száj, fül, stb.) a két képen egymásnak tökéletesen meg kell felelniük, melyet segédvonalak felvételével ellenőrizhetünk ([A3-A4]. ábrák). Egyszerűnek tűnhet ez a lépés, de ezen áll vagy bukik a modell pontossága. A fontosságra való tekintettel a munkafolyamat lépései a következők: Az áttekinthetőség kedvéért a képek hátterének törlése. A fej nemkívánatos billenő mozgásának kiküszöbölése úgy, hogy az elölnézeti képen felveszünk egy vízszintes segédvonalat, mely az egyik fül tetejétől a másik irányába mutat. Elölnézeti kép elforgatása szükséges mértékben, úgy hogy a két fül tetejét a vízszintes segédvonal kösse össze. 8
Elölnézeti képből kivágni a kívánt fejmagasságot. Rajzterület szélességét beállítani a magassággal egyenértékűre. Kép átméretezése kívánt méretre (javasolt kettő hatványára, pl. 1024x1024). Oldalnézeti kép rajzterületének kiterjesztése, úgy hogy az eredeti kép mellé elférjen az elkészült elölnézet is. A nemkívánatos bólintó mozgás kiküszöbölése következik. Vízszintes segédvonal húzása fül magasságába. Oldalnézeti kép eltolása úgy hogy a fül felső része a vonalhoz illeszkedjen. Majd az oldalnézet elforgatása a fül felső része körül úgy hogy a szem az elölnézethez illeszkedő pozíciót vegye fel. Méretbeli korrekció egy vízszintes segédvonal felvételével kezdődik, mely a fejtető magasságában helyezkedik el. Majd ezt követi az oldalnézeti kép méretezése, úgy hogy az pontosan illeszkedjen a segédvonalhoz. További segédvonalak felvételével győződhetünk meg az áll, ajkak, orr, szemöldök pontjainak illeszkedéséről. Amennyiben az oldalnézet egyes részei nem megfelelő helyzetűek, használjunk warp torzítót.
[A3]. ábra – Eredeti referencia kép [A4]. ábra – Korrekció után a fej jellegzetes pontok összevetését segítő meghatározó pontjainak Y koordinátái egy egyenesre esnek. vonalakkal. Az elkészült referencia képeket a modellező programban egymásra merőlegesen helyezzük el, melynek két módja is van. Betölthető képsíkként az elölnézeti és oldalnézeti kamerához, vagy épp két, egymásra merőleges téglalapra ráfeszítve ([A5]. ábra).
3.4.1.3 Simított kocka létrehozása és a szimmetria megvalósítása A modellezés egyes lépései során az eredeti fej formáját közelítjük. A kezdeti kevés csúcspont csak durva közelítést tesz lehetővé, majd számuk növelésével egyre jobban letisztul a forma, és a körvonalak egyre jobban illeszkednek a referencia képekre. A legelső fejforma közelítés egy szögletes gömbre hasonlító simított kocka. Durvasága ellenére tökéletes kiindulási alap. Gyakorlati megvalósítása meglehetősen egyszerű. Poligon kocka létrehozása, majd egyes szintű lineáris simítás. Az eredményt az [A5]. ábra szemlélteti. Mielőtt elkezdődne az alakzat finomítása, néhány lépést célszerű megtenni az egyszerűség kedvéért. Általánosságban elmondható, hogy a fej formája szimmetrikus. Ahelyett, hogy a modell mindkét oldalát megváltoztatva próbálnánk a módosításokat tökéletesen szimmetrikusan végrehajtani, a Maya képes a szerkesztéseket automatikusan a karakter másik oldalára tükrözni ([A6]. ábra). A módszer időt takarít meg, és biztosítja a tökéletes szimmetriát is. A szimmetriát úgy realizálhatjuk, hogy töröljük a simított kocka egyik felét, majd a megmaradt felét példányként duplikáljuk mínusz egyszeres skálázással a hiányzó tengely mentén. Ha a természetesebb megjelenés érdekében apró változtatásokat 9
akarunk hozzáadni az egyes oldalakhoz, ezt is megtehetjük egyszerűen a karakter szimmetrikus vonásainak befejezése után.
[A5]. ábra – Simított kocka a referencia [A6]. ábra – Szimmetrikus szerkesztés képekkel. megvalósítása. Jobboldali módosítás tükröződik a baloldalra.
3.4.1.4 Poligon műveletek bemutatása Alapműveletek Modellezési alapműveletnek számít az eltolás, forgatás és a méretezés melyeket objektum, felület, él és csúcspont szinten hajtható végre. A megfelelő részek kijelölése után manipulátorokkal hajtjuk végre a transzformációt, melyek a matematikában tanultakkal megegyezők. Tömören megfogalmazva: kijelölt részek x, y, z koordinátái módosulnak az objektum struktúrájának megváltozása nélkül. Csúcspontok eltolását szemlélteti az [A7]. ábra, melyen a simított kocka vertexeinek áthelyezésével egy fokkal jobb közelítést kapunk a fejről.
[A7]. ábra – Simított kocka csúcspontjainak eltolásával [A8]. ábra – Felszín felosztás körvonalazódik a fej durva alakja. hatására a kijelölt trapéz négy háromszögre bomlott szét.
10
Hasítás és felosztás (split and subdivide) A hasító és felosztó műveletek megváltoztatják a modell struktúráját új felületek, csúcspontok létrehozása által. Az új szerkezeti elemek elhelyezése a finomítás eszközéül szolgál. Felosztás során a kijelölt felszín több felszínre bomlik szabályos módon. A felosztás során megadható a felosztás szintje valamint, hogy négyszög vagy háromszög típusú legyen a szétvágás módja. Például egy téglalap alakú felszín egyszeres szintű háromszög típusú felosztása során az átlók metszése mentén négy darab felszín keletkezik ([A8]. ábra). Hasító eszköz lehetővé teszi, hogy tetszőleges módon osszuk fel a felületeket. Gyakran használatos, mivel csak a szükségleteknek megfelelő számú csúcspontot jön létre, és csak ott ahol az kívánatos. A hasítási műveletet szemlélteti az [A9]. ábra, ahol a nyak létrehozásának vázlatos lépéseit láthatjuk.
[A9]. ábra – Nyak létrehozása hasítási és csúcspont eltolási műveletek sorozatával. Összevonás és törlés (merge and delete) A modell szerkezetének egyszerűsítését szolgálja az összevonás és a törlés. A törlési művelet értelmezett a csúcspontok szintjétől egészen az objektum szintig. Hatására a modell szerkezetéből eltávolításra kerülnek a kijelölt részek. Összevonási művelet csak csúcspontokon és éleken értelmezett. Összevonási művelet hatására a számos kijelölt csúcspontból egy marad és a többi törlésre kerül, úgy hogy a megmaradó átveszi a törölt elemek szomszédjaihoz fűződő él és felszín kapcsolatait. A megértést segíti az [A10]. ábra.
11
[A10]. ábra – Összevonási művelet hatása a kijelölt csúcspontokra. Kihúzás (extrude) Részletek hozzáadásának eszközéül szolgálhat a kihúzás eszköz is, mivel új csúcspontokkal, élekkel és felületekkel bővítetjük modellünket. Minden kihúzás művelet eredménye elérhető hasító, összevonó és törlő műveletek sorozatával, de általában több időt vesz igénybe. Így azt is mondhatjuk, hogy funkcionálisan nem új művelet. Az előző eszközök együttes alkalmazásából létrehozott segédeszköz, melyet manipulátorral vezérelhetünk. A kihúzás értelmezett a csúcspontok, élek és felületek szintjén egyaránt. Felület esetén a következőt jelenti a kihúzás művelet: kijelölt felület mozgatása olyan módon, hogy az éleinél új poligon felületekkel legyen körülvéve, egy kifele vagy épp befele terjedő felületet létrehozva. A művelet során a kihúzott felület az eltoláson kívül tetszőlegesen átméretezhető és elforgatható ([A11-A12]. ábra). Hasonlók érvényesek az élek és csúcspontok kihúzására is.
[A11]. ábra – Kihúzási műveletre kijelölt [A12]. ábra – Kihúzás hatására a kijelölt felület és a transzformálást vezérlő felület „kinőtt” az eredetiből. manipulátor.
12
3.4.1.5 Mérföldkövek a modellezésben Az előző fejezetben ismertetett poligon műveletek segítségével minden modell megalkotható. Így jött létre a fej szerkezete is. Számos lépésből állt a folyamat, melyből csak a legmeghatározóbbakat emelném ki ([A13]. ábra).
Fej durva körvonala
Részletek hozzáadása a kontúrhoz
Szemgödör szerkezetének létrehozása
Szemöldök kialakítása
Orr vázlatos megtervezése
Áll szerkezeti felépítése
Fül elhelyezése
Szem létrehozása Részletek finomítása [A13]. ábra – Mérföldkövek a modellezésben 13
3.4.1.6 Normál vektorok felépítése A poligon modell síklapokból épül fel, így az egyes felületek minden egyes pontjában ugyanaz a normálvektor ([A14]. ábra). Ez rendben is van akkor, ha a modellezés tárgyának felülete szögletes, azonban a fej formáját inkább a görbületek jellemzik. Mivel a normálvektor ugrásszerűen változik a háromszögek határán ([A15]. ábra), az így megjelenített képről ordít, hogy a görbült felület háromszögekkel lett közelítve.
[A14]. Ábra – Felülethez kapcsolódó normálvektorok. Az él menti ugrásszerű normálvektor változás hirtelen intenzitásváltozást eredményez.
[A15]. ábra – Csúcsponthoz kapcsolódó normálvektor (piros) és az S1 és S2 felületekhez tartozó normálvektorok (kék).
Egy alternatíva lehet a háromszögek számának növelése, így a szögletes geometria egyre jobban közelíti az ívelt formát. Azonban számolni kell azzal, hogy a megnövelt geometriai elemek száma nagyobb tárhelyet igényel és több képszintézis időt emészt fel. Valójában ezzel nem oldottuk fel a hirtelen intenzitásváltozás okozta szögletességi problémát, csak csökkentettük az ugrásszerű növekedés mértékét, amivel jó esetben becsapható a szem. Az igazi megoldást a csúcspontokhoz rendelt normálvektorok jelentik. Ha csúcsponthoz tartozó normálvektort úgy definiáljuk, hogy a szomszédos normálvektorokkal bezárt szögek megegyeznek, akkor az él környékén finom átmenet keletkezik árnyalás során ([A15]. ábra). Gondolhatnánk, hogy a bemutatott eljárást egyszerűen alkalmazzuk az egész modellre és nagyszerű eredményt kapunk. A valóság azonban ennél nagyobb munkát követel meg. Az [A17]. ábrán látható, hogy az összes felületre alkalmazott normálvektor interpoláció eredménye szebb, mint a kiindulási csak durva éleket tartalmazó változat ([A16]. ábra), azonban nem várt mellékhatások lelhetők fel. Legszembetűnőbb hiba a fülnél látható, ahol a fül mögötti nem látható felület árnyéka úgymond átterjedt a szomszédos látható felületre. Tehát megállapítható, hogy itt bizony nemkívánatos eredményt ad a máshol áldásos interpoláció. A valódi megbízható megoldást a manuálisan szabályozott eljárás jelenti. A kivitelezés többletmunkával jár, de szemmel láthatóan megéri a fáradozást ([A18]. ábra), ugyanis a geometriai elemek számának növelése nélkül simább felület látszatát kelthetjük. A modellező programokat tekintve a Maya[P3] lehetővé teszi a kijelölt felületek normálvektorai közötti interpoláció elvégzését, továbbá a felületi normálvektorok egymással bezárt szöge alapján szűrni lehet az interpolálásra kerülő felületeket. Az Autodesk 3DS Max[P3] programjával pedig egyenként, tetszőleges irányba állíthatók a normálvektorok. 14
[A16]. ábra – Durva éleket [A17]. ábra – Minden él [A18]. ábra – Manuálisan kapunk a normálvektorok automatikusan „finomítva”. vezérelt interpoláció megfelelő Nemkívánatos mellékhatás a eredményt szolgáltat. interpolációja nélkül. fül környékén.
3.4.2 Anyagjellemzők Az anyag azon viselkedések definíciója, ahogyan egy felület a fényre (ideértve a fényességet, színt, egyenetlenséget, átlátszóságot stb.) reagál. Egy összefoglaló kifejezés, amely minden szempontból leírja, hogyan nézzen ki egy felület. Az anyagjellemzők megfelelő beállításával lehet elérni, hogy az egyszínű sima felületből pl. valósághű bőr legyen. A leggyakrabban használt technikákat négy csoportba soroltam. A legelső és egyben legegyszerűbb eszköz, ami rendelkezésre áll az a vertex szín (vertex color). Minden egyes csúcsponthoz egyedi szín definiálható segítségével, ezzel feloldva a felület egyszínűségének korlátját. A felület színe a csúcspontok lineáris interpolációjából jön létre. Ebből adódik használhatóságának korláta is, miszerint a felület minden belső pontja az őt határoló csúcspontok színének keveréséből jön létre, így a belső pontok színe a felületet kifeszítő csúcspontoktól függetlenül nem vezérelhető. Leginkább olyan helyeken alkalmazható, ahol csak a színnel való megjelölés a cél (pl. CAD). A következő kategóriát a textúra képviseli, mely a leggyakrabban használtak közé tartozik. A textúra fogalom először csak egy olyan kétdimenziós képet jelentett, amelyet egy felülethez lehetett rendelni, a benne szereplő adatok pedig a felület színét írták le. Mivel ezek a textúrák valamilyen képi információt tárolnak, bittérképes textúráknak is nevezik őket. Később megjelentek a procedurális és a 3D textúrák is, illetve a 2D textúra felhasználási területe is jelentősen kibővült. E technika segítségével elérhető kiemelkedő eredmények, sokoldalú alkalmazhatóságuk miatt szinte mindenhol megtalálhatók. Harmadik kategóriaként a különböző festési effekteket (paint effect) határoztam meg. Segítségükkel szín, átlátszóság, stb. festhető interaktívan a modellre. A modell felületéhez kapcsolt információk megadásán túl, lehetőséget ad geometriai modell egyszerűsítésére is. Hajat, szemöldököt és egyéb arcszőrzet festhető a modellre, amely feleslegessé teszi a fej ezen részeinek geometriai létrehozását. A gyakorlatban parametrikus görbékhez csatolt ecsetekkel valósul meg a létrehozás és a teljes funkcionalitású megjelenése csak renderelés során alakul ki. Értékelésként elmondható, hogy az összetettebb festési funkcióhoz a grafikusok jobban preferálják a képszerkesztő programokat, mely nagyobb funkcionalitással bírnak jelenleg a színek szerkesztése területén. Haj, szőrzet, stb. létrehozását tekintve valósághű eredmények érhetők el vele szinte egyedülálló módon. Az utolsó kategóriába soroltam a különböző árnyaló nyelvek (shader effect) által elérhető effekteket. A videokártyák rohamos fejlődése oda vezetett, hogy bizonyos részeinek 15
működése saját programmal felülírható, így egyedi hatások hozhatók létre. Kezdetben az anyagmodellek videokártyára való átültetésére futotta, de a rendelkezésre álló regiszterek és utasítások számának növekedése már a haj és szőrzet bizonyos bonyolultságú kivitelezését is lehetővé teszik. A konkrét megvalósítás programozást takar, a nyelvek fejlődésének hála ma már a magas szintű nyelvek dominálnak az assemblyvel szemben. Segítségével gyors, valós idejű hatások hozhatók létre és a hardverek töretlen fejlődése egyre összetettebb hatások elérést teszik lehetővé.
[A19]. ábra – Vertex színekkel megjelenített modell.
[A20]. ábra – Textúrázott fej.
[A21]. ábra – Festési effektussal készített haj.
[A22]. ábra – Árnyaló nyelvel létrehozott szőr effektus
A vertex szín technikát az általa elérhető szerény eredmény miatt elvetettem ([A19]. ábra). Festési effektekkel kiváló frizura készíthető ([A21]. ábra), de a modellező program e specifikus részének saját alkalmazásba való átemelésének megvalósíthatósága kérdéses maradt számomra. Árnyaló nyelveket az anyagmodell megvalósítására, textúrák összehangolására használtam csak, ugyanis a szőrzet effekt valós időben produkált eredmény kétségkívül szép ([A22]. ábra), de engem valahogy nem győzött meg valódiságáról. 16
Az előző technikák kipróbálását követően a textúra alkalmazására fektettem a hangsúlyt sokoldalú alkalmazhatósága és eredményessége miatt ([A20]. ábra). A textúrázás két fő lépésből áll. A textúra leképezésből és a textúra létrehozásból, melyeket a következő fejezetek fejtenek ki részletesen.
3.4.2.1 Textúra leképezés A textúra leképezés alapvető célja, hogy a háromdimenziós pontokhoz színeket rendeljen. A színeket egy képfájlban tároljuk, amit gyakran csak textúra néven illetünk. Minden csúcsponthoz tartozik egy kétdimenziós lebegőpontos szám (uv koordináta), amely kijelöli a képtérben a hozzá tartozó színértéket. Az uv koordináták értelmezési tartománya [0,0]-tól [1,1]-ig terjed, ahol a [0,0] a textúra bal alsó, a [1,1] a textúra jobb felső értékét jelöli. Így képmérettől független leképezést kapunk. Poligon modellezés estén a textúra koordinátákat a háromdimenziós pontok vetítésével kapjuk meg. A leképezés során arra kell törekedni, hogy a ráfeszített kép a lehető legkisebb mértékben torzuljon. A torzulás mértékét egy ellenőrző textúrával szokták vizuálisan figyelemmel kísérni. Ez egy fekete fehér négyzetekből felépülő, sakktáblára emlékeztető textúra. Akkor jó a leképezés, ha a modellre ráfeszítve a négyzetek mindenhol egyforma nagyságúak és lehetőleg négyzet alakúak. Fej UV leképezése során elvétve találkoztam gömbi vetítést alkalmazó leírással, de a nagymértékű torzítás miatt én ezt holt vágánynak tartom ([A24]. ábra). Létezik automatikus (atlasz néven is ismert) leképezés is, melyet a nevéből adódóan a modellező program készít el a torzítások figyelembevételével ([A25]. ábra). A felület normálvektorai alapján szétszabdalja a modell uv hálóját, mely így nehezen áttekinthetővé válik. Csak kézzel festett textúrákhoz használható, de ahhoz is nehézkes fej esetén, mert rengeteg összeillesztendő élre kell figyelni. Leggyakrabban a hengeres és sík vetítést szoktak alkalmazni. Henger felülettel a fej nagy része jól közelíthető elfogadható torzítási szint mellett ([A23]. ábra). Egyedül a fejtető részen zavaróan nagy mértékű a textúra torzítás. Számos szerző ezt a megoldást választja, ugyanis gyorsan, könnyen kivitelezhető és a fejtető hibáit haj festési effektel, vagy épp valamilyen fejfedővel elrejtik az előszeretettel választott kopasz fej verzióról nem is beszélve. Számos sík vetítés összevágásából szintén elfogadható minőségű (hanem jobb) torzítási tulajdonsággal rendelkező uv térkép készíthető. Több munkát igényel a hengeres vetítéshez képest, de az adott modellhez jobban illeszkedő leképezés az elvárható eredmény. Fénykép alapú textúrához általában a sík vetítéses módszert alkalmazzák a hengeres vetítéssel szemben, de ettől függetlenül kézzel festéshez is tökéletes. A gyors megoldást nyújtó alternatívák kipróbálása után a több munkabefektetést megkívánó sík vetítések módszert választottam. Indoklásként a kisebb mértékű torzítás, fénykép alapú textúrához való illeszkedés szerepel. A másik valamire való megoldást, a hengeres vetítést, azért vetettem el, mert a haj festési effekt saját programba való átültetését nem láttam megoldottnak és sapkát sem kívántam modellem fejére húzni. Ezen korrekciók nélkül pedig a fejtetőre húzott haj textúra elfogadhatatlan torzítást szenved.
17
[A23]. ábra – Hengeres [A24]. ábra – Gömbi vetítés [A25]. ábra – Automatikus vetítés során a fejtető rész torzító hatása fejtető és nyak leképezés rengeteg illesztési vonalat eredményez. részen jelentős. nagymértékben torzul. Sík vetítésen alapuló textúra leképezés A textúra leképezés kivitelezéséhez az Autodesk 3DS Max[P3] modellező program 8as verziója lett használva. A következőkben bemutatásra kerülő folyamat természetesen szinte minden modellező programmal megvalósítható, de a Max számos olyan funkciót tartalmaz, mely más programokban több lépéssel, idő és energia befektetéssel érhető el. Munkafolyamat lépései: Hengeres UV leképezés alkalmazása, hogy a későbbiekben megjelenjen a „checker” textúra. A kapott koordináták textúra téren kívülre helyezése, hogy ne zavarjon. Ellenőrző textúra beállítása színként. A jobb megjelenés érdekében célszerű az árnyékolás kikapcsolása. Összetartozó felületek kijelölése, melyek egy síklappal jól közelíthetők. Vetítősík beállítása, úgy hogy a vetítősugarak lehetőleg merőlegesen érkezzenek a kijelölt felületekre ([A26]. ábra). Ebben sokszor segít a Max „legjobb igazítás” (best align) vetítési opciója. Előző lépés ismétlése, míg minden felület vetítésre nem kerül. ([A27]. ábra) Az egyik oldal uv koordinátáinak tükrözése és a másik oldal felé helyezve, átfedve azt. Szimmetrikus koordináták összevonása ([A28]. ábra). Így érhető el, hogy a szimmetrikus geometriához a textúra koordináták is szimmetrikusak legyenek. A szimmetrián túl kevesebb lépést igényel a koordináták szerkesztése, finomítása. A torzítások minimalizálásán túl az összeillesztési élek számának minimalizálása a másodlagos cél. Így az összetartozó élek összevonásra kerülnek, ahol ez nem okoz túl nagy torzítást. ([A29]. ábra). Az egész uv háló áthelyezése és átméretezése, úgy hogy teljes terjedelmével az egységnégyzetbe essen. Koordináták egyenkénti finomítása az ellenőrző textúra torzulásának figyelmen kísérésével. Átfedő textúrakoordináták korrigálása különös tekintettel az orr, szem és fül régiókra. Az előző lépések eredményeképpen előállt egy szimmetrikus textúra térkép. Itt akár meg is lehet állni. Számítógépes játékoknál, ahol kicsi textúrákat használnak (pl. 256x256), gyakran használják ezt a megoldást a textúra tér minél jobb kihasználása érdekében. Olyan esetekben azonban ahol a fejről kis távolságból készül kép, könnyen észrevehető a teljes szimmetria. Rajzfilmfiguráktól és űrlényektől eltekintve a szimmetria rontja a hitelességet, így a következő lépés az aszimmetrikus uv térkép létrehozása ([A30]. ábra). A megvalósításhoz mindössze annyit kell tenni, hogy a fej egyik felének csúcspontjait ki kell jelölni, uv koordinátáit leválasztani és tükrözni a másik oldalra. Tükrözés mentén az összetartozó
18
csúcspontok összevonásra kerülnek. Végül az eredményül kapott koordinátákat az egység négyzetbe kell normalizálni.
[A26]. ábra – Sík vetítés [A27]. ábra – Számos vetítés [A28]. ábra – Szimmetrikus megvalósítása alkalmazása a kijelölt hatására az összes felület szerkesztés tükrözéssel és összevonással. leképződik két dimenzióra. felületekre.
[A29]. ábra – Élek [A30]. ábra – A végső, aszimmetrikus textúra alkalmazását is lehetővé tevő UV térkép. összevonása, koordináták finomítása kézi áthelyezéssel
[A31]. ábra – A végleges UV leképezés tesztelése „checker” textúrával.
19
3.4.2.2 Textúra létrehozás Három alternatíva közül választhatunk a textúra létrehozása során. Az egyik módszer a textúra festése, a másik lényegesen eltérő módszer a fényképek összevágása a harmadik pedig az előző kettő ötvözése. Textúrák festése talán a leggyakrabban használt technika a gyakorlatban. Alkalmazását több szempont is alátámasztja. Egyrészt nemcsak fej, hanem bármilyen modellhez használható, másrészt könnyen készíthető vele a szín információn kívül más anyagjellemzőkhöz kapcsolódó textúra (pl. érdesség, átlátszóság, visszaverődés, tükröződés). Az elérhető eredménynek csak a készítő képességei szabnak határt. Képek összevágásának alkalmazhatósága kisebb területet fed le a gyakorlatban. Fej esetén alkalmazható a technika, de más modellek esetén előfordulhat hogy csak nehézkesen, vagy egyáltalán nem válik be. Továbbá a geometria elkészítésének mikéntje meghatározza e technika bevethetőségét, ugyanis értelemszerűen egy fénykép alapú textúra csak a fényképnek megfelelő geometriájú modellre „húzható” rá teljes mértékben. Ezért is fontos a modellezés során a referencia kép használata. Eredményül fotorealisztikus modell állhat elő. Egy lehetséges megoldás lehet a festett textúra képrészletekkel való gazdagítása a valósághűség növelése érdekében. Fej esetén általában szájrészt esetleg szemöldököt, hajat szoktak képként hozzáadni a megfestett textúrához. Az előző két technika nehézségein túl meg kell birkózni a képrészlet és az alapot képező textúra közötti észrevehetetlen átmenet megalkotásával. Gyakorlatban a festési és összevágási technikákat egyaránt alkalmaztam. A szemről nem készíthető jó fénykép alapú textúra nagy mértékű ragyogása, tükröződése miatt, ezért ez a rész festési megoldással készült el. A textúra festési módszer nagy előnye, hogy az összeillesztési vonalak mentén könnyen készíthető észrevehetetlen átmenet, ezért kipróbáltam a fej textúrájának megfestését (a hajat leszámítva). Az eredmény az [A32]. ábrán látható. Végül a képek összevágása mellett döntöttem, mert így művészi érzék hiányában is a valósághoz közelebb álló textúra készíthető. Erről szól a következő fejezet.
[A32]. ábra – Részletek a kézzel festett textúrákból, valamint megjelenésük a modellen.
20
Fénykép alapú textúra A kiindulási alapot a célszemélyről készített fotók adják, melyek rétegek kezelését lehetővé tevő képszerkesztő programmal (jelen esetben Photoshop CS2 [P5]) kerülnek feldolgozásra. A textúra készítés időigényét és eredményét nagymértékben meghatározza a forrásképek milyensége. A képek megfelelőek, ha magas felbontásúak, torzítás és zajmentesek, több szögből, egyforma távolságból valamint megfelelő megvilágítási környezetben készültek. Lehetséges a textúra elkészítése csak egy frontális, egy oldalsó és egy hátsó képből is, de több képpel könnyebben érhető el folyamatos átmenetet a képek között. Munkafolyamat lépései: Elölnézeti kép vásznának kiterjesztése úgy, hogy a többi hozzáadott kép is elférjen rajta. Új rétegre az egyik 45 fokos kép beillesztése. Ha nem áll rendelkezésre ilyen kép, akkor ez a lépés kihagyható. A réteg átlátszóságának állítása úgy, hogy látszódjon az alatta lévő réteg is. Ezután következik a réteg eltolása, úgy hogy a szem belső sarka átfedésben legyen az alatta lévő réteg megegyező részével. A további arcjellemzők (pl. áll és haj vonala) illeszkedéséhez szükség szerint átméretezés és forgatás végrehajtása. Az oldalsó kép hozzáadása. A függőleges magasságot a szem külső sarka határozza meg. A hátulról készített kép hozzáadása. A helyes pozíció meghatározásához a fül helyzete és a haj alsó vonala használható. A fentebb ismertetett lépések végrehajtása a másik oldalra. Összes réteg láthatóságának kikapcsolása, kivéve a 45 fokosat és a frontálist. Ezután törésre kerül a 45 fokos képből a szükségtelen részek radír eszközzel. Majd a képek illeszkedésénél törlő ecsettel finom átmenet létrehozása. A szem, orr és száj részeket a frontális képből kerülnek ki. A rétegek átlátszóságának változtatásával ellenőrizhető, hogy mely részeket kell még eltávolítani, összemosni. Ismételjük a technikát a többi képre is. A rétegek szín/kontraszt beállításainak illesztés az optimális réteg vegyítés érdekében. Árnyék és csillogás eltávolítása a képről. A kép vágása és méretezése a végső formára. A folyamat végén előálló textúrát az [A33]. ábra szemlélteti, mely 3D-ben az [A34]. ábrának megfelelően néz ki. További képek az Eredmények bemutatása fejezetben található.
21
[A33]. ábra – Számos képből összevágott végső textúra. A [A34]. ábra – Textúra furcsának tűnő kép megértését segíti a halványan jelölt UV megjelenése 3D-ben. vonalak, melyek a kiterítés mikéntjét adják meg.
3.4.3 Saját alkalmazásba való integrálás A tervező programban látható modellt saját alkalmazás által feldolgozható formára kell hozni. A legtöbb tervező programhoz beszerezhető úgynevezett development kit, mely segít áthidalni a saját és a modellező program közötti szakadékot. Ez alatt konkrétan C, C++ header, forrás állományokat valamint dinamikus könyvtárakat kell érteni. Így érhető el, hogy a tervező program összes sajátossága maradéktalanul átkerülhessen programunkban. Természetesen ennek meg van az ára. Kiváló programozói tudást, mindkét rendszerbe való elmélyültséget követel meg a rengeteg befektetett munka mellett. Egyes emberek erre a munkafolyamatra specializálódnak. Általában ők készítik el az úgynevezett plug-in-eket. Az integrálás másik lehetősége az említett plug-in-ek használata. A plug-in-ek a tervező programokhoz írt, abba beépülő modulok. Az importáló és exportáló plug-in-ek lehetővé teszik, hogy a tervező program saját adatszerkezetéből, fájlformátumából áttérjünk valamilyen más formátumra. Ennek megvalósításához nem kell mást tennünk, mint az interneten felkutatni a kívánt plug-in-t, az utasításoknak megfelelően a tervező programhoz illeszteni, és ha megfelelően működik, akkor elmormolni egy imát, kifejezve köszönetünket más kemény munkája iránt. A harmadik és egyben a legkönnyebb integrálási lehetőség, ha a kiválasztott tervezőprogram és a saját program ismer legalább egy közös fájlformátumot. Ebben az esetben nem kell mást tennünk, mint a mentés másként vagy épp az exportálás menüpontra kattintani és az exportálás paramétereit beállítani. A feladatmegoldás során a modell a DirectX [P1] által támogatott .X fájlformátumba került exportálásra. Ennek gyakorlati kivitelezése a használt modellezési program és verzió függvénye. (Például a Maya 5-ös verzióhoz plug-in telepítése szükséges, míg a 3DS Max 8 ismeri az X fájlformátumot.) Értékelésként elmondható, hogy a beépített és plug-in modulok használat könnyű, gyakorlati használhatóságuk pedig a készítő tudásán múlik. Ennek megfelelően az integrálási munka nagysága plug-in fajtától függ.
22
4. Animáció Arc animáción az arc helyének, helyzetének, geometriájának időbeli megváltozását értjük, mely során információ és hangulat közvetítődik a hallgatóság felé. Információ továbbítás során a beszédet alkotó elemek megfelelő összekapcsolásán, kiejtéshez megfelelően illeszkedő szájmozgás feladatának megoldásán van a hangsúly. Az érzelmek közvetítése során nincs kiemelten kezelendő terület, inkább az összes részlet összehangolt mozgatása a feladat.
4.1 Célkitűzés Jelen dolgozat célja az érzelmek és hangulatok kifejezésének problémáját megoldó animációs rendszer létrehozása. A rendszerrel szemben támasztott követelmény, hogy az animáció megadásának módja kényelmes, felhasználóbarát legyen, illetve az előálló animáció valós időben történjen.
4.2 Lehetséges megoldások és azok sajátosságai Számos technika létezik animáció kivitelezésére. Általánosságban elmondható, hogy a kezdeti próbálkozásoktól eltekintve mindegyik módszernek megvan a maga bevált gyakorlata. Az egyes technikák erősségeinek és gyengeségeinek ismeretében választható ki, hogy melyik illeszkedik legjobban az adott feladat kritériumaihoz. Tehát tekintsük át az arc animálásához felhasználható technikákat, melyek öt kategóriába sorolhatók: Közvetlen paraméterezéses animáció (direct parameterization animation) Az arcot egy B-spline felület reprezentál. Az arc mozgását pedig a B-spline felület vezérlőpontjainak közvetlen áthelyezésével érik el. Közvetlen paraméterezéses animációt még az animációk kezdetén alkalmaztak, amit a kevesebb számítási igény támasztott alá. Közvetlen kapcsolat megtalálása egy képen látható arckifejezés és a B-spline vezérlőpontjai között meglehetősen nehéz. Kulcskeret alapú és morfoló animáció (key frame, morph animation) A kulcskeret animációban a mozgástervezés a jellemző pozíciók felvételével kezdődik. Egyes időpillanatokhoz megadjuk az objektumok paramétereit, más néven a kulcspontot. Ezen kulcspontokat felhasználva az objektum paramétereire egy-egy folytonos göbét illesztünk. Ennek megfelelően a kulcskeretek közötti időpontokban az őt határoló két kulcskeret közötti közbülső, átlagolt értéket számolunk. Morfoló animálás elvét tekintve megegyezik a kulcskeret alapúval, azzal kiegészítve, hogy itt több kulcskeret egyidejű vegyítéséből áll elő a végső alakzat. Az említett technikákkal gyakran találkozhatunk a gyakorlatban. Az előbbi jórészt csontváz alapú karakterek mozgásánál használatos, míg az utóbbi az arckifejezések készítésénél játszik meghatározó szerepet. Mozgáskövető animáció (performance-driven animation) A mozgást egy élő embertől veszik. Az ember arcának jellegzetes pontjaira úgynevezett „markereket”, jelölőket, helyeznek el. Egy vagy több kamera rögzíti az arc mimikáját, majd a markerek pályagörbéiből számolják ki az animációs mozgásgörbéket. A feldolgozás megkönnyítése érdekében a markerek színei a környezettől jelentősen eltérnek.
23
Mozgáskövető animáció szép, valósághű mozgást biztosít, azonban az ehhez szükséges keretrendszer elkészítése bonyolult, időigényes. Az eredményül kapott mozgásgörbék csak a zajoktól való megtisztítás után használhatók fel. Izom alapú animáció (muscle-based animation) Az izom alapú megközelítést szokták még anatómiai vagy fizikai modell alapú megközelítésnek is hívni. A csontok, az izmok és a bőr tulajdonságait, közöttük fennálló meglehetősen komplex kapcsolatot szimulálják. Az izom alapú animáció kiváló eredményt szolgáltathat, ugyanakkor meglehetősen összetett, számításigényes. Inkább elméleti modell, mintsem széles körben használt gyakorlati megvalósítás. Pszeudo-izom alapú animáció (pseudomuscle-based animation) Az izom működésének utánzásán alapul. Az izomműködés eredményére koncentrál, mintsem annak biológia szimulálására. A módszer a szabadformájú deformációt (FFD) használja. Egy izomnak egy deformáló test (pl. téglatest) felel meg. A deformáló test vezérlőpontjainak áthelyezésével, súlyuknak megváltoztatásával szimuláljuk az aktuális izom által az arc geometriáján okozott deformációt. Ahogy egy valódi izom deformálná a bőrt, úgy deformálja az FFD az érintett arc régiót. A deformáció paramétereinek időbeli változtatásával jön létre az animáció. A pszeudo-izom alapú animációval is létrehozható valószerű animáció, kevesebb számításigénnyel, ugyanis ez az eljárás csak a „felszínre”, a bőrre koncentrál. Ugyanakkor figyelembe kell venni, hogy a pszeudo-izmok nem megfelelő elhelyezése, paraméterezése irreális alakzatot, animációt eredményezhet.
4.3 Megvalósítandó módszer és a választás indoklása Kijelenthető, hogy az anatómiai alapú modellezés közelíti a legjobban a biológiai modellt. Evidens, hogy a bőrt a csont tartja az izmokon, kötőszöveteken keresztül és az is hogy, több izomköteg állítja elő a mozdulatok számos kombinációját. E modell jó szolgálatot tenne például az arcsebészetnél. Belátható azonban, hogy a megoldandó feladatnak megfelelő modellt célszerű választani, ugyanis például egy videokonferencia esetén teljesen felesleges a koponya alakjának, az izmok elernyedtségének, stb. számítása, amikor minket csak a felszín érdekel. Érdemesebb tehát egy kevésbé számításigényes, ugyanakkor hasonló eredményt nyújtó modell alkalmazása, hisz ez jobban illeszkedik az adott feladat elvárásaihoz. A rendszerrel szemben támasztott követelmény a valós idejű megjelenítés, azaz legalább 24 kép számítását kívánjuk meg egy másodperc alatt. Ezért a bonyolult, nagy számításigényű és ezért lassú anatómiai megközelítés elvetésre került. A mozgáskövető animációhoz speciális eszközök szükségesek, a közvetlen paraméterezéses animáció pedig kezdetlegessége miatt került mellékvágányra. A megvalósítandó rendszerhez a pszeudo-izom alapú technikát választottam, kulcskeretekkel kiegészítve a végső morfoló animációhoz. A modellen pszeudo-izmok kerülnek elhelyezésre különböző pozíciókban. Az egyes pozíciók adják a kulcskereteket. A végső animáció során a kulcskeretek morfolásból jön létre az aktuális kulcskeret, majd ezt a pszeudo-izom deformáló keretet alkalmazzuk az eredeti alakzatra. A módszerek kombinálásának nem titkolt célja az egyes módszerek előnyeinek ötvözése és a nehézségek kiküszöbölése. A morfoló animáció erőssége, hogy számos jellemző vonást lehet 24
egymásba ágyazni különböző értékekkel súlyozva. Hátránya hogy a módszer alkalmazásához szükséges kereteket részletes modell esetén komoly munka előállítani, ugyanis ilyenkor minden egyes csúcspontot egyenként, esetleg csoportosan kell áthelyezni. A pszeudo-izom alapú módszer használata ezt a nehézséget kívánja leküzdeni, ugyanis kevesebb művelettel interaktívan létrehozható a szükséges új kulcskeret. A választás helyességét tovább erősíti, hogy a módszerrel valószerű megjelenítés érhető el, és a számításigény várhatóan lehetővé teszi a valós idejű lejátszást. Továbbá az elkészítendő animációs rendszer illeszkedik a kiválasztott arcmodellezési technikához és a többi tárgyalt modellezési módszer kimenetül szolgáló geometriai modellhez is illeszthető.
4.4 Animációs feladat megvalósításának terve Pszeudo-izom alapú animáció az izom működésének utánzásán alapul. Az izomműködés eredményére koncentrál, mintsem annak biológia szimulálására. A módszer a szabadformájú deformációt (FFD) használja. Egy izomnak egy deformáló test (pl. téglatest) felel meg. A deformáló test vezérlőpontjainak áthelyezésével, súlyuknak megváltoztatásával szimuláljuk az aktuális izom által az arc geometriáján okozott deformációt. Ahogy egy valódi izom deformálná a bőrt, úgy deformálja az FFD az érintett arc régiót. A deformáció paramétereinek időbeli változtatásával jön létre az animáció. A kivitelezésre kerülő animációs rendszerben az FFD-n kívül számos más technika elemei is fellelhetők. Az egyes elemek hierarchikusan épülnek fel. A megvalósítás is ennek megfelelően szintekre, rétegekre tagolódik. Az első megvalósítási fázisba tartozik a szabadformájú deformáló kivitelezése és ezek együttes kezelése (absztrakt eljárási szint). Ezt követi majd a keretek létrehozása, arckifejezések hozzáadása (animációs egység szint). Az utolsó fázis során a keretek közötti morfolás megvalósítása, és az animáció megjelenítése történik (szkript szint). A munkafolyamat tömör váza tehát a következő: 1. Szabadformájú deformáló osztály megvalósítása 2. Deformálókat összefogó osztály kivitelezése 3. Torzítók elhelyezése és tesztelése az arcon 4. Keret osztály létrehozása 5. Arckifejezéseket kifejező keretek megtervezése 6. Animációs szkript megírása 7. Képszintézist megvalósító osztály megvalósítása Mielőtt azonban egy izmot reprezentáló deformáló megvalósításra kerülne, szükséges némi anatómiai ismeret elsajátítása. Ebből meghatározható a szükséges deformálók száma, helyzete és a közöttük fennálló kapcsolat.
4.4.1 Anatómia Tervezés során meg kell határozni a kivitelezésre kerülő animációkat. Ebben segíthet az anatómia tanulmányozása. A bekezdés utáni táblázat bemutat pár alapvető arckifejezést, amiből el lehet indulni. A mintaképekből meghatározhatók az arckifejezésre jellemző vonások és a szükséges műveletek. Az egyes műveleteket végrehajtásáért egy vagy több izom felelős. Ezen összefüggések megtalálásához, mélyebb anatómiai ismeret szükséges. A fejen, arcon rengeteg izom található. Ezek közül az arckifejezés szempontjából a legfontosabbak kerültek felsorolásra és még így is a számuk zavarbaejtően sok. 25
Minta
Arckifejezés Boldog 1
Jellemzők Szájsarok felhúzva Orcán „gödör” keletkezik Száj nyitva
Műveletek Száj sarkának felfele mozdítása Száj nyitása
Boldog 2
Szájsarok felhúzva Orcán „gödör” keletkezik Száj csukva
Száj sarkának felfele mozdítása
Szomorú
Szájsarok lekonyul Állcsúcs felhúzva Összeszűkült szem Összevont szemöldök
Száj sarkának lefele mozdítása Állcsúcs felhúzása Szem összeszűkítése Szemöldökök összehúzása
Dühös 1
Összevont és lehúzott szemöldök Ráncok az orrnyereg részen Megfeszített alsó szemhéj Összeszorított ajkak Enyhén felfele mozdult állcsúcs Összevont és lehúzott szemöldök Ráncok az orrnyereg részen Megfeszített alsó szemhéj Dühöt kifejező nyitott száj Száj körüli ráncok Kitágult orrcimpa Összeráncolt orr Levont szemöldök Emelkedett szájcsúcs
Szemöldökök le- és összehúzása Alsó szemhéj megfeszítése Ajkak összeszorítása Állcsúcs felhúzása Szemöldökök le és összehúzása Alsó szemhéj megfeszítése Száj formálása Száj nyitása Orrcimpa tágítása Szemöldökök lehúzása Száj sarkának felfele mozdítása
Enyhén felhúzott szemöldök Vízszintes ráncok a homlokon Enyhén nyitott száj Ellazult ajkak Felső szemhéj emelkedése Felhúzott szemöldök Szájak oldalirányba kitágulva Száj nyitva
Szemöldökök felhúzása Száj nyitása
Dühös 2
Undor
Meglepődött
Aggódó
26
Felső szemhéj emelése Szemöldökök felhúzása Száj sarkának oldalirányú mozdítása Száj nyitása
Frontalis izom merőlegesen fut végig a homlokon. A haj vonalánál ered és a szemöldökig tart. A teljes frontális izmok összehúzódása a szemöldököket és a bőrt fölfele mozgatja vízszintes ráncokat hozva létre a homlokon. Egy belső és egy külső részből áll, melyek egymástól relatívan függetlenül képesek működni. A belső frontalis a frontális izmok középső részén helyezkedik el. Összehúzódása a belső homlokrészt és szemöldökrészt emeli felfele. A szemöldökök a középponttól a külső rész fele lejtő ferde vonalat képeznek tovább az arc közepe fele lejtő ráncok jönnek létre. A külső frontalis a frontális izmok oldalsó részén helyezkedik el. A homlok és a szemöldök oldalsó részét emeli fölfele, az oldalsó részeken ráncokat létrehozva. A szemöldök boltíves formát vesz fel. Corrugator izom a szemgödör belső része és az orr töve között helyezkedik el. Gyakran szimultán működik a közelébe eső két kisebb izommal, a depressor supercillii-vel és a procerus-sal. Ez az izom húzza a szemöldök belső részét lefelé és a középpont felé. Merőleges ráncot hoz létre a homlok középén és vízszinteset az orrnyeregnél. Ez az egyik legfontosabb arckifejező izom. Szenvedés, fájdalom kifejezésére képes a szemöldök és a homlok ráncolása révén. Procerus és depressor supercilli két kisebb izomcsoport, melyek a corrugator izom közelében helyezkednek és általában azzal szimultán működve fejtik ki hatásukat. [A35]. ábra – Arc felső részének izmai Orbicularis oculi egy záróizom a szem körül. Mozgásával általában szűkíti a szem nyitottságát és bezárja a szemgödröt. Ennek az izomnak fontos szerepe van a szem megvédésében és megnedvesítésében. Ez az izom összehúzza a bőrt a szem körül, így szabályozza a szem nyitottságát. Három része van, a külső vagy szemüregi rész, a belső vagy szemhéjhoz kapcsolódó része valamint a könnycsatornához közeli rész. A szemhéjhoz kapcsolódó rész működése gyakran önkéntelen. Segítségével valósul meg a pislogás reflex. Nasali izom két fő részből áll, az összenyomó részből (compressor naris) és a széthúzó részből (dilator naris), melyek az orrcimpa kitágulását szabályozzák. Az összenyomó része a nasalis izomnak az állkapocs felső részénél kezdődik, közel a szemfogakhoz, és az orrnyereg porcáig húzódik. Összehúzódása hatására az orrcimpák az orrsövény felé közelednek. A nasali izom széthúzó részének működése eltávolítja az orrcimpákat az orrsövénytől.
27
Depressor septi egy kis izom a felsőajaknál. Működése során az orrcimpa alakját formálja. Egyesek a nasali izom részének tekintik. Levator labii superioris izom a felsőajaknál és az orcánál húzódik, melynek két relatíve egymástól független része van. Az oldalsó rész (lateral part) a szemgödör középső részétől indul, és a felsőajak sarkához fut be. Ez az izom emeli viszonylag egyenesen fel a felsőajkat. Az orr körüli rész (nasal part) az arccsont és az orrcsont találkozása körül kezdődik, és az ajkaknál végződik. Működése hatására a felsőajak megemelkedik, orrcimpa enyhén kitágul és összeráncolja az orrt. Buccinator a felső állcsont és az állkapocs zápfog körüli részén kezdődik és a száj sarkában végződik. Működése során az orcát szorosan a fogakhoz préseli, a száj sarkát befele húzza, valamint gyakran egy kis gödröt hoz létre az orcán. A száj oldalfalának nagy részét ez alakítja. A funkciója közé tartozik az étel szájban tartása. Az összeszorított szájon keresztüli levegő kifújásában betöltött fontos szerepe miatt „trombita izomnak” is nevezik. Caninus izom (más néven levator anguli oris) a felső állkapocs csont környékén ered és a száj sarkában lévő izomrétegnél végződik. Működése során majdnem teljesen vertikális irányban húzza az ajak sarkát, egyfajta mosolyt megvalósítva. Risorius a járomcsont alatt kezdődik és a száj sarka közelében végződik. Működése során oldalról kinyújtja a szájat, egyfajta vigyort vagy mosolyt hozva létre. Kapcsolatban áll a platysma izommal, mellyel gyakran együtt húzódnak össze. Zypomatic major az arccsontnál [A36]. ábra – Arc alsó részének izomzata. kezdődik (járomív) és a száj sarka közelében végződik. Ez az izom a száj sarkát oldal irányba és enyhén felfele emeli, létrehozva a jellegzetes mosolygás arckifejezést. Néhány kutató állítása szerint, amikor az egyén valódi boldogságot érez, azaz nem szándékosan mosolyog, akkor a zygomatic major az orbicularis oculi izommal együtt húzódik össze. Zygomatic minor az arccsont oldalsó részénél kezdődik és a felsőajaknál száj sarka és az orrcimpa között. Összehúzódása során az ajakbarázda és bőrt oldalirányba és rézsútosan mozgatja. Néhány szakértő a zygomatic nem tüntetik fel különálló izomként, hanem a levator labii superioris mondván az arc ezen területén az izomrostokat nehéz különválasztani.
végződik félúton a a szájsarok közötti minor izomrostjait izomhoz rendelik,
Depressor labii inferioris (más néven quadratus labii inferiois) az alsó állkapocs résznél kezdődik, és az alsó ajak izmainál végződik. Összehúzódása során az alsó ajkat viszonylag egyenesen lefele húzza felcsillantva az alsó fogakat. Segítségével egyfajta irónia, gúny arckifejezését sugallhatjuk.
28
Orbicularis oris a száj körüli záróizom. Az ajak szövetének nagy részét ez adja. Kiterjedt kapcsolatban áll a szájhoz befutó izmokkal. Ez az izom formálja a szájat és kontrolálja annak nyitottságát, továbbá fontos szerepe játszik a beszéd közbeni ajakmozgásban. Négy, viszonylag eltérő mozgás valósítható meg az orbicularis oris segítségével. Ezek a következők: ajkak összenyomása, vékonyítása, befele sodrása és kitolás. Masseter a méretéhez képest a test egyik legerősebb izma. Az arccsont oldalsó részénél (járomív) kezdődik, és az alsó állkapocs sarkánál végződik. Működése során az állkapcsot emeli és a fogakat szorítja össze. Ez az izom működik az étel megrágása során. Mérges, dühös és agresszív állapot fejezhető ki általa. Triangularis izom (más néven depressor anguli oris) a nevét az alakjáról kapta, mely az alsó állkapocs és a platysma izomtól ered és a száj sarkáig tart. Ez az izom okozza a száj sarkának lehajlását, így az ajkak fordított U betűt formálnak. Ehhez a bánat, szomorúság sztereotípia tartozik. Mentalis izom a nevét a gondolkodással, koncentrációval való asszociáció révén kapta, bár e nézőpont igazolása hiányzik. Azt is mondják, hogy kétséget fejez ki. Az elülső fogak alatt kezdődik az izom és az állcsúcsnál fejeződik be. Működése hatására az állat kifele tolja összeráncolva azt, valamint felfele görbíti az ajkakat egy fordított U betűt formázva.
[A37]. ábra – Száj környékén összefutó izmok.
Platysma az az izom, mely a legtöbb arcizommozgásba bele van vonva. A mellkas felső részétől fut a nyakon át egészen az áll alsó részéig. Leengedi az állkapcsot és az ajkat, valamint a nyak megfeszítésében játszik szerepet. Levator palprebrae superioris izom emeli a felső szemhéjat, benyomva azt a szemgödörbe és megmutatva az írisz felső részét. Ez a művelet tágra nyitja a szemeket. Az izom a szemgödör tetejénél ered és számos szövetet behálóz, magában foglalva a felső szemhéjat is. Incisivi labbii ajak izmok (felső és alsó) a felső és alsó állkapocs középső részétől indul, végigfut a felső és alsó ajkakon és azok sarkában végződnek. Működésük során a száj sarkát a középpont felé tolják összehúzva az ajkakat. Az izmok működésének tömör összefoglalását a bekezdés utáni táblázat tartalmazza. Ebből meghatározható, hogy mely izmok működését kell feltétlenül az ál-izomnak megfelelő deformálóval utánozni. Tehát a szükséges izmok felsorolása elhelyezkedésüknek megfelelően fentről lefele: Frontalis, Corrugator, Depressor supercillii, Orbicularis Oculi, Nasalis, Levator labii, Zygomatic minor, Zygomatic major, Risorius, Orbicularis Oris, Depressor labii, Depressor anguli oris, Mentalis
29
Műveletek Állcsúcs felhúzása Ajkak összeszorítása Alsó szemhéj megfeszítése Felső szemhéj emelése Orrcimpa tágítása Szem összeszűkítése Szemöldökök lehúzása Szemöldökök felhúzása Szemöldökök összehúzása Száj nyitása Száj formálása Száj sarkának felfele mozdítása Száj sarkának lefele mozdítása Száj sarkának oldalirányú mozdítása
Kapcsolódó izomzatok Mentalis Orbicularis Oris Orbicularis Oculi Orbicularis Oculi Nasalis Orbicularis Oculi Corrugator, Depressor supercillii Frontalis Corrugator, Depressor supercillii Orbicularis Oris Orbicularis Oris Levator labii, Zygomatic minor Depressor anguli, Depressor labii Risorius, Zygomatic major
Miután áttekintettük milyen izmok működésének megvalósítására van szükség, és tudjuk hogy azok hol és hogyan fejtik ki hatásukat, itt az ideje egy ál-izmot szimbolizáló deformáló elkészítésére.
30
4.4.2 Szabadformájú deformáció (FFD) [6] alapján A szabadformájú deformáció, röviden FFD (Free Form Deformation), egy geometriai deformációs technika, amit általában modellalkotásban használnak, de animációs technikaként is kiválóan alkalmazható. Az FFD segítségével nemlineáris transzformációkat, bonyolult alakváltozásokat idézhetünk elő. Vezérlőpontok áthelyezésével, könnyen és interaktívan változtathatjuk modellünk alakját. Nagy előnye, hogy pár vezérlőponttal képesek vagyunk a poligonháló több ezer csúcspontját vezérelni, ezzel időt és energiát spórolva meg. Az FFD könnyű megértéséhez célszerű a parametrikus görbékből kiindulni, majd a dimenziószám növelésével fokozatosan jutunk el célunkig.
4.4.2.1 Parametrikus görbék Törtvonal A törtvonal egyike a legegyszerűbb görbéknek. Egyszerűsége ugyanakkor megteremti a lehetőséget az elvek megértésének, általános következtetések levonásának, ezáltal megkönnyítve az áttérést az egy dimenziós görbéről, a síkra majd a térre. Egy törtvonal egy olyan egyenlettel definiálható, amelyet a törtvonal pontjai elégítenek ki. Egy 3 dimenziós törtvonal explicit formában megadva:
x = x(t) y = y(t) z = z(t) t ∈ [0, 1] Az egyenlet értelmezése Ha egy [0,1] intervallumbeli t értéket behelyettesítünk az egyenletbe, akkor a törtvonal egy adott pontjának x, y, z koordinátáit kapjuk meg. Ha a t paraméterrel bejárjuk a [0,1] intervallumot, akkor a törtvonal összes pontját meglátogatjuk. ([A38]. Ábra) Például egy r0[x0, y0, z0]-tól r1[x1, y1, z1]-ig tartó 3D-s szakasz egyenlete:
x = x 0 * (1 - t) + x 1 * t y = y 0 * (1 - t) + y1 * t z = z 0 * (1 - t) + z1 * t t ∈ [0,1]
31
Vektor alakban felírva:
r (t) = r0 * (1 - t) + r1 * t
r1
r(0)
r1 r(1/2)
r0 t=0
r1
r(1)
r0
r0 t = 1/2
t=1
[A38]. ábra – Szakasz egyenletének szemléltetése A szakasz pontjait úgy állítjuk elő, hogy a szakasz végpontjait (vezérlőpontjait) a paraméterektől függően súlyozzuk, majd a részeredményeket összeadjuk. R0-hoz tartozó súlyfüggvény (1-t), r1-hez t tartozik. A görbe alakjáért a vezérlőpontokon kívül ezen függvények felelősek. Fontosságukat nevük is hangsúlyozza, ők a bázisfüggvények. Ennek megfelelően az egyenlet a következő formában is felírható:
r (t) = B 0 * r0 + B1 * r1 Továbbá egyszerűsíthetjük az egyenlet alakját, ha az összegek kiírása helyett a ∑ jelölést alkalmazzuk: n
r (t) = ∑ B i * ri i =0
Az előzőekben ismertetett elvek általános görbék előállítását is lehetővé teszik. A felhasználó a görbe alakját néhány vezérlőponttal és a hozzá tartozó súlyfüggvénnyel definiálja. A megadott súlyfüggvényektől függően a görbe interpolációs vagy approximációs jellegű. Ha a görbe minden vezérlőponton átmegy, akkor interpolációs, ha csak közelíti azokat, akkor csupán approximációs.
Bézier görbe A törtvonal folytonos ugyan, de meglehetősen szögletes ([A39]. ábra). Simább görbére van szükségünk, ahol nemcsak a görbe, hanem annak magasabb rendű deriváltjai is folytonosak. Simább görbe létrehozásához magasabb renden folytonos bázisfüggvényeket kell keresni, mégpedig olyan típusút, ahol a bázisfüggvények összege 1. Ilyen például a Bézier görbe bázisfüggvénye (i = 0, 1, 2, …, m)
32
B
Bezier i ,m
⎛m⎞ m −i = ⎜⎜ ⎟⎟ ∗ t i ∗ (1 − t ) ⎝i⎠
A Bézier görbe szép görbült ([A39]. ábra), m-szer deriválható, de az egyes bázisfüggvények a teljes paramétertartományban pozitívak, így egy vezérlőpont szinte minden helyen érezteti a hatását. A görbe tehát nem vezérelhető lokálisan, ami megnehezíti a finom beállításokat, hiszen egy vezérlőpont módosítása a vezérlőponttól messze is kihat nemcsak annak közvetlen környezetében. Továbbá minél több vezérlőpontunk van, a görbénk egyre jobban approximációs jellegű lesz, azaz egyre kevésbé közelíti meg a vezérlőpontokat.
[A39]. ábra – Törtvonal és a Bézier görbe
B-spline Célunk az, hogy egy görbült és lokálisan vezérelhető görbét kapjunk. Nyilvánvaló, hogy a két kritériumot teljesen egy időben nem lehet kielégíteni. A teljes lokális vezérelhetőséget a törtvonal a szögletesség árán valósította meg, míg a Bézier görbe íveltsége a lokális vezérelhetőség kárára ment. Ezen két görbe típus a két szélső érték a lokális vezérelhetőség és a görbültség tengelyén. A következő görbetípusunk, a B-spline, kompromisszumot kötve mindkét szempontot szem előtt tarja. A törtvonal szögletességén javít anélkül, hogy a lokális vezérelhetőségről teljesen lemondana. B-spline bázisfüggvényei Lineárisan növekvő tartományban (tt - ti) / (ti+K-1 - ti)
Lineárisan csökkenő tartományban (ti+K - tt) / (ti+K - ti+1)
Ahol, tt ∈ [0,1], K a szintek száma (fokszám + 1), ti az i-edik csomóvektor, m a vezérlőpontok száma.
33
A szakirodalom a spline elnevezést gyakran csak a harmadfokú, azaz kétszeresen folytonos, görbékre alkalmazza ([A40]. ábra). Ugyanakkor érdemes tudni, hogy ha a fokszámmal bejárjuk a [0,m-1] intervallumot, akkor a konstans vezérlőpontoktól eljuthatunk a Bézier görbéig (megfelelő csomóvektorokat felvéve).
[A40]. ábra – Másodfokú NUBS görbe Harmadfokú NUBS görbe A görbe alakját a vezérlőpontokon és a bázisfüggvényen kívül a csomóvektorok értékei befolyásolják még. Egyenletes B-spline (Uniform B-spline) görbének nevezzük azt a görbét, amelyre igaz, hogy a csomóértékek közötti távolság egységnyi. Ha megengedjük, hogy a vezérlőpont párok közötti paramétertartomány eltérő legyen, akkor nem egyenletes B~spline-ról (Non Uniform B-spline) vagy röviden NUBS-ről beszélünk. Az egyenletes B-spline az összes vezérlőpontot közelíti ([A41]. ábra), míg a NUBS görbe esetén elérhetjük, hogy a görbe a végpontokat interpolálja ([A40]. ábra).
[A41]. ábra – Egyenletes B-spline
34
Előfordulhat, hogy bizonyos vezérlőpontok fontosabbak a többinél, és az szeretnénk, hogy a görbe jobban közelítse azt. Ez úgy tehetjük meg, hogy az egyes bázisfüggvényeket a vezérlőponthoz tartozó súllyal vesszük figyelembe ([A42]. ábra). Természetesen továbbra is fennáll, hogy a súlyfüggvények összegének egyet kell adni. Ebből következik, hogy egyik súly a többi kárára növelhető. Tehát a görbe egyenlete: n
r (t ) =
∑w ∗B
NUBS i
i
i =0
n
(t ) ∗ ri
∑w ∗B i
i =0
NUBS i
(t )
Az új görbetípust nem egyenletes racionális B-spline-nak vagy röviden NURBS-nek (Non Uniform Rational B-spline) nevezzük. A súlyok bevezetésének köszönhetően szabadabban alakíthatjuk a görbénket, továbbá a másodfokú implicit egyenlettel megadható görbéket (például kör, ellipszis, parabola, hiperbola stb.) a legalább harmadfokú NURBS-ök segítségével tökéletesen pontosan leírhatjuk, a többi görbével viszont csak approximáljuk.
w3=1
w3=3 w4=1
w4=1
w5=1 w2=1
w1=1
w5=1 w2=1
w1=1
[A42]. ábra – Az eredeti NURBS görbe és a súly változtatásának hatása
4.4.2.2 Parametrikus felületek A parametrikus felületek kétváltozós függvények. r (u, v) ahol u, v ∈ [0,1] A parametrikus görbékhez képest az egyetlen eltérés, hogy most nem a számegyenes egy intervallumát, hanem az egységnégyzetet képezzük le az alakzat pontjaira, ezért a parametrikus függvényben két független változó szerepel. A felületet leíró függvényt a véges számú rij vezérlőpont és a hozzá tartozó bázisfüggvény megadásával kapjuk. 35
Parametrikus felület egyenlete: n
m
r (u , v ) = ∑∑ Bij (u , v ) ∗ rij i =0 j =0
A görbével való összehasonlítás után a következő megállapításra juthatunk: A vezérlőpontok most 2D-s rácsot alkotnak A kétváltozós bázisfüggvényeket úgy kapjuk, hogy a görbéknél megismert bázisfüggvények u-val és v-vel paraméterezett változatait összeszorozzuk. Tehát a parametrikus felület egyenletét a következő formában is felírhatjuk: n
m
r (u , v ) = ∑ ∑ Bi (u ) ∗ B j (v ) ∗ rij i =0 j =0
NURBS felületet kapunk, ha a bázisfüggvényeknek választjuk ([A43]. ábra.).
Bi(u)
és
Bj(v)
függvényeket
NURBS
A NURBS felületet a vezérlőpontok mozgatásával, illetve a hozzájuk rendelt súlyok állítgatásával alakíthatjuk. Egy vezérlőpontot úgy is elképzelhetünk, mint egy kis mágnest, amely maga felé húzza a felületet. Egy mágnes erejét, a többi rovására a súlyok növelésével fokozhatjuk. Egy mágnes a hatását csak a környezetében fejti ki. A környezet nagysága a fokszám függvényében változik. Például egy harmadfokú NURBS esetén egy mágnes 16 tartományra hat, azon kívül nem.
[A43]. ábra – Egy 5 * 5-ös vezérlőráccsal definiált kétszeresen és háromszorosan folytonos NURBS felület.
4.4.2.3 Szabadformájú deformáció (Free Form Deformation, FFD) A görbéknél a vezérlőpontok egy sorozatot alkottak, amelyeket egyváltozós súlyfüggvényekkel szoroztunk. A felületeknél a vezérlőpontokat egy kétdimenziós rácsba szerveztük és két, különböző változóval paraméterezett súlyfüggvények szorzataival súlyoztunk. Most pedig a vezérlőpontok egy háromdimenziós rácsot alkotnak, amelyek három, különböző változóval paraméterezett súlyfüggvények szorzataival súlyozunk. A súlyfüggvények mindhárom esetben ugyanazok.
36
A háromdimenziós tér pontjait leíró egyenlet: n
m
l
r (u , v, w) = ∑∑∑ Bi (u ) ∗ B j (v ) ∗ Bk ( w) ∗ rijk i =0 j =0 k =0
A deformációhoz tekintsünk egy p pontot, és fejezzük ki azt a deformációs rács paramétereivel, azaz oldjuk meg a p = r(u, v, w) egyenletet, és számítsuk ki az up, vp, wp koordinátákat! A deformációt a deformációs vezérlőpontok elmozdításával irányítjuk ([A44]. ábra). A p pontunk új helyét a fenti egyenlet alkalmazásával kaphatjuk meg, ha abba behelyettesítjük a régi up, vp, wp koordinátákat és a megváltozott vezérlőpontokat.
[A44]. ábra – A vezérlőpontok áthelyezésének hatása a felületre (pupilla összeszűkítése)
37
4.4.3 Animációs szintek Az animációs rendszer szintekre való tagolását számos megfontolás indokolja. A felhasználó szemszögéből tekintve biztosítja a barátságos kezelést, ugyanis az ő szintjén elegendő megadni az arckifejezések listáját az idő függvényében és az animáció már elő is áll. A fejlesztő szemszögéből nézve a hierarchia elrejti az alsóbb szintek technikai részleteit, és lehetővé teszi az összetartozó részek együtt kezelését. Három réteg lett definiálva. A hierarchia legalján az absztrakt eljárások találhatók, majd ezt követi az animációs egység szint, és a csúcsot a szkript réteg képezi.
4.4.3.1 Absztrakt eljárások szintje Az objektumon elvégezhető műveletek kerülnek meghatározásra az absztrakt eljárási rétegben. Egy művelet végrehajtásáért egy torzító a felelős. Az objektum csúcspontjainak valamilyen szempont szerint együtt kezelendő halmazához rendelhetünk egy deformálót. Az absztrakt eljárási réteget pedig e szabadformájú deformálók összessége alkotja. Arc-animáció esetében az izmoknak a bőrfelület pontjaira gyakorolt hatása alapján képezünk csoportokat, így a deformálók nevezhetők absztrakt izmoknak is. Egy sétáló karakter estében azonban a felület pontjaira leginkább a csontok vannak hatással, így a deformálók a csontváz mentén helyezkednek el, így ez esetben inkább absztrakt csontokról beszélhetnénk. Egy behorpadó kocsi esetében pedig végképp gondban vagyunk, mi is legyen a megfelelő elnevezés. Akármilyen kifejezéssel is találkozzunk az irodalmakban, a tartalom mögött ugyanazt fogjuk találni. Az alakzat meghatározott csúcspontjait módosítjuk valamilyen hatás elérése érdekében. Arc-animáció esetében ez az izmok összehúzódása és elernyedése, míg egy sétáló embernél a csontok elmozdulása. Az absztrakt eljárások szintjén kiválasztásra kerülnek az objektum animálandó régiói. Egy régiót alkotó csúcspontok meghatározása történhet intuitívan, tapasztalati alapon vagy az arc esetében az anatómia tanulmányozása segítségével. A kiválasztott csúcspontoknak megfelelően megpróbáljuk elhelyezni a deformálókat az alkalmazhatósági sajátosságoknak megfelelően. A tradicionális szabadformájú deformálóról ugyanis tudni kell, hogy alakja téglatest alakú és az összes benne foglalt csúcspontra hatással van. Az alkalmazhatósági kritériumok leküzdésére két megoldás kínálkozik. Az első a homogén régió felbontása kisebb részekre. Az egy téglatest alakú deformálóval pontosan nem lefedhető csúcspont halmazt több, kisebb méretű deformálóval foglalunk be. Például a száj körkörös izmait számos téglatest alakú torzítóval közelítjük ([A45]. ábra). A másik lehetőség a régió külön objektumként való kezelése. Ilyenkor a csúcspontok az eredeti objektumtól külön, egy másik csúcspont tárolóban kerülnek elhelyezésre és a régióra vonatkozó deformációt csak ezen hajtjuk végre. Ennek alkalmazására tipikus példa a szem esete. A szemet befoglaló téglatestbe beleesnek ugyan a szemhéj csúcspontjai, mégis a deformáló csak a szemre van hatással ([A46]. ábra). Ez a külön csúcspont pufferben való tárolásnak köszönhető.
38
[A45]. ábra – A száj régiókra való felbontása.
[A46]. ábra – A szem külön objektumként való kezelése.
A deformálók elhelyezését követően célszerű azok működését tesztelni, ugyanis ezen áll vagy bukik a magasabb animációs szintek sikere. Egy torzító tesztelése során szerkezeti és funkcionális megszorítások meglevőségét vizsgáljuk. Szerkezeti kritériumnak megfelel egy torzító, ha azokra és csak azokra a csúcspontokra van hatással, amelyek kijelölésre kerültek vagy épp egy meghatározott régiót alkotnak. E megszorítás biztosítja a torzítók önálló hatáskörét. Így garantálható, hogy egy torzító véletlenül se okozzon csúcspontmódosulást egy számára tiltott területen. Funkcionális kritériumot kielégít egy torzító, ha segítségével megvalósítható a kívánt eljárás. Tehát nem elegendő, hogy [A47]. ábra – Alapértelmezett keret, mely a azokat és csak azokat a szabadformájú deformálók összességéből épül fel. csúcspontokat módosítsa, amelyek meghatározásra kerültek, hanem pontosan úgy transzformálja őket, hogy a kívánt hatás létrehozható legyen a segítségével. A tesztelési kritériumoknak megfelelő deformálók összessége adja az alapértelmezett keretet ([A47]. ábra). Ez a keret helybenhagyja az alakzatot. Ez annyit tesz, hogy ha e keret deformálóival transzformáljuk az alakzatot, akkor az eredményül kapott geometria meg fog 39
egyezni a transzformáció előttivel. Gyakorlati jelentőssége abban rejlik, hogy az alapértelmezett keretet alkalmazva kaphatjuk vissza a deformált alakzatból az eredetit.
4.4.3.2 Animációs egység szint A legalsó szinten létrehozott semleges tulajdonsággal bíró alapértelmezett keretből új, önálló jelentéssel bíró kereteket hozunk létre. Mivel az új keret már önállóan megjelenítve is teljes kifejező erővel bír, ezért ez a szint animációs egység szintnek lett elnevezve. Egy új animációs egységet az absztrakt eljárások végrehajtásával érünk el. A deformálókat különböző pozíciókba, orientációkba állítjuk be. A torzítók kontroll pontjainak módosítása interaktívan történik, mely eredménye azonnal megjelenítődik a képernyőn valós idejű visszacsatolást biztosítva. Az animációs egységeket keretek valósítják meg. Minden egyes új egységhez egy új keret tartozik. A legfontosabb keretek listája a következő: SZEMEK_BALRA_NÉZNEK, SZEMEK_JOBBRA_NÉZNEK, SZEMEK_FELFELE_NÉZNEK, SZEMEK_LEFELE_NÉZNEK, JOBB_SZEMÖLDÖK_LENT, JOBB_SZEMÖLDÖK_FENT, BAL_SZEMÖLDÖK_LENT, BAL_SZEMÖLDÖK_FENT, JOBB_SZEMHÉLY_NYITVA, JOBB_SZEMHÉLY_CSUKVA, BAL_SZEMHÉLY_NYITVA, BAL_SZEMHÉLY_CSUKVA, MOSOLYOG, SZOMORÚ, AGGÓDÓ, DÜHÖS Egy konkrét animációs egység bemutatásához vegyük az aggódó arckifejezést ([A48]. ábra). Ennek kivitelezéséhez három alapvető absztrakt eljárást kell végrehajtani. A szöldököket fel kell húzni, a szemeket tágra kell nyitni, valamint a szájat lefele és oldal irányba kell mozgatni.
[A48]. ábra – Példa animációs keretekre. (balról jobbra: aggódó, dühös, mosolygós) Az animációs egységeket tároló kereteken felül van egy kitüntet keret is. Ez az úgynevezett aktuális keret. E keret deformálóinak állapota határozza meg az objektum mindenkori alakját. Az aktuális keret az animációs egységeket tároló keretek megfelelő vegyítéséből áll elő. A morfolás azonban már a szkript szint belügye.
40
4.4.3.3 A szkript szint A szkript szinten az animáció időbeli lefolyását adjuk meg. Minden időpillanatban meg van határozva, hogy egy adott animációs egység mekkora dominanciával járul hozzá az aktuális keret kialakításához. Ezt egy nullától egyig terjedő súly reprezentálja. A nulla azt ábrázolja, hogy a deformáló teljes mértékben megegyezik az alapértelmezett keretben találhatóval. Az egy jelentése, hogy a deformációt teljes mértékben az adott animációs egység torzítójával kell végrehajtani. Nulla és egy közötti súly esetén a vezérlőpont helyének meghatározásában a használt bázisfüggvény is szerepet játszik. Például lineáris interpoláció esetén a 0.5-ös súly a vezérlőpontok pozícióinak számtani közepét jelenti (bővebben a parametrikus görbéknél). Aktuális keret számításának algoritmusa a következő: MINDEN animációs egységre { Animációs egységhez tartozó súly számítása az animációs időnek megfelelően Az első nem nulla értékű súly ESETÉN Aktuális keret inicializálása az animációs egységgel KÜLÖNBEN Animációs egység vegyítése } Az algoritmus két olyan eljárást tartalmaz mely minden animációs egységre lefut. Ezeket a függvényeket kell optimálisra megírni a megfelelő sebesség elérése érdekében. Az egyik ilyen függvény dolga a vegyítési súly számítása, melynek szükségességére később fogok visszatérni. Most az áttekinthetőség érdekében kiemelt egy animációs egység vegyítésének algoritmusa kerül górcső alá: HA a vegyítési súly nem nulla AKKOR { MINDEN deformálóra { HA a deformáló különbözik az alapértelmezett keretben találhatóval VAGY a deformáló az alapértelmezett keret tagja AKKOR { MINDEN vezérlőpontra a keretben Interpoláció a súlynak megfelelően az aktuális keret és az animációs egység pontjai között } } } Az algoritmus a legoptimálisabb teljesítményt úgy kívánja elérni, hogy a felesleges számítások számát minimalizálja. Itt fedezhető fel a legnagyobb különbség a saját megvalósítás és az általános morf technika között. Az általános vegyítés esetén kivétel nélkül pontról pontra történik a köztes érték számítás, míg a saját algoritmus csak azon pontoknál végez számítást, ahol tényleg szükség van. Ennek megvalósításához mindössze minden deformálóhoz egy állapotjelzőt kell rendelni, mely regisztrálja, hogy az animációs egység létrehozása során módosult-e a torzító az alapértelmezett kerethez képest.
41
A másik eddig még ki nem fejtett eljárás a vegyítési súly számítása. Felmerülhet a kérdés, hogy miért van erre szükség, hiszen a vegyítési súlyok az idő függvényében adottak ([A49]. ábra). Kétségtelen, de Súly mivel az idő analóg 1 mennyiség és tárolása csak digitálisan oldható 0,8 16,7 18 meg, ezért a nem tárolt, köztes értékeket 0,6 14 14,1 14,4 14,5 számolással kell 0,4 előállítani. Itt tehát processzoridő 0,2 tekintetében nem 0 13,9 14,2 14,3 14,6 16,5 18,2 30 optimalizálhatunk, de 0 tárolás tekintetében igen. Idő A súlyértékek változása, mint időben folyamatos [A49]. ábra – Egy animációs egység vegyítési súlyának mennyiség, az animációs változása az idő függvényében. szkriptet tartalmazó fájlban nem kvantálási technikának megfelelően kerül tárolásra, hanem kulcspozíciók formájában.
Az animációt leíró szkript fájlban pedig a következő képen történik a tárolás:
…
Szerkezetét tekintve elmondható, hogy az adatok tárolása XML formátumban történik, így könnyen áttekinthető, felhasználó által kényelmesen módosítható. Tartalmilag elemezve pedig a szokásos kulcskeret alapú animáció elemei lelhetők fel, az idő és súly kulcs-érték párok. Az itt tárolt diszkrét értékekből kell visszaszámítani az aktuális animációs időnek megfelelő súlyt, melynek algoritmusa a következő: Az aktuális animációs időt határoló kulcskeretek megkeresés. HA nem található kulcskeret VAGY a keretek között eltelt idő közel nulla AKKOR 42
Súly = 0 KÜLÖNBEN { // Időarány számítása az aktuális időnek és a határoló kereteknek megfelelően Időarány = (Későbbi_idő – Aktuális_idő)/(Későbbi_idő - Korábbi_idő) // Időaránynak megfelelően a súlyok közötti interpolálás Súly = Időarány * Korábbi_súly + (1 - Időarány) * Későbbi_súly } Már csak egy tisztázásra váró téma maradt hátra, ez pedig az aktuális animációs időnek a kérdése. Animációs idő alatt azok az időpillanatok értendőek, amelyekhez képszintézis tartozik. A megvalósított animációs rendszer kétféle képszintézist is támogat. Az egyik a képernyőre történő megjelenítés valós időben, a másik lehetőség a képfájlok sorozatába történő renderelés. Renderelés képfájlok sorozatába A képszintézis e változatát előre rendereltnek is szokták hívni, mivel a képszintézis nem valós időben történik. Ez azt jelenti, hogy meghatározott a készítendő képek száma és azok kiszámítása időben közvetlenül egymást követően történik. A számítógép teljesítményétől függetlenül minden meghatározott időponthoz tartozó kép kiszámításra kerül, eggyel sem több, sem kevesebb. Használatának egyik oka, hogy a kívánt időpillanatokban születik kép a gép teljesítményétől függetlenül. A másik nyomós ok, ami használatát indokolja, hogy segítségével bármilyen részletgazdagságú színtér megjeleníthető, akár magas számításigényű képszintézis algoritmusok (pl. sugárkövetés) használata mellett is. Filmek készítéséhez szokás ezt a technikát alkalmazni. A filmek minőségének egyik meghatározó paramétere az FPS (Frame Per Sec.), ami a másodpercenként lejátszott képek számát jelenti. Az európai PAL szabvány ezt 25-ben az amerikai NTSC 29,97-ben állapította meg. Ez az értéket határozza meg a képek mintavételének idejét. Az elkészített rendszerben bármilyen, szabványon kívüli FPS érték megadható. A konkrét implementálás a következő: Aktuális_Animációs_Idő = Animáció_Kezdete EGYperFPS = 1 / FramePerSec Darabszám = (Animáció_Vége - Animáció_Kezdete) * FramePerSec ISMÉTELD Darabszám-szor { Modell animálása az Aktuális_Animációs_Idő-vel Szintér renderelése Renderelt felület képfájlba mentése Aktuális_Animációs_Idő = Aktuális_Animációs_Idő + EGYperFPS } Az így előálló képfolyamból ([A50]. ábra) könnyen filmfájl készíthető pl. a VirtualDub [P7] nevű programmal. Az első képkocka kiválasztása után beállíthatjuk a frame rátát, a tömörítéshez használt kodeket és már kódolható is a film. Ez az ingyenes program számos hasznos funkciót is kínál, mint például különböző szűrők alkalmazása a bejövő képfolyamra.
43
[A50]. ábra – Az animációt a keretek (alsó sor) időben változó vegyítése adja. A baloldali semleges arckifejezés átmegy dühösbe. A folyamatos átmenet a kulcskeretek között kiszámított képek számától függ. Az ábrán egy köztes kép került bemutatásra (középső). Valós idejű renderelés A renderelési időpillanatok között eltelt idő nem állandó a valós idejű képszintézis esetén. Így az egy másodperc alatt megjelenített képek száma változó, mely az alkalmazást futtató rendszer teljesítményének függvénye. Tehát az animáció folytonosságát a lejátszó rendszer teljesítménye határozza meg. Ha a rendszert a képszintézis vagy más alkalmazások annyira leterhelik, hogy 25 FPS-t nem képes produkálni, akkor az animációt darabosnak, szaggatottnak érzékelhetjük. A 25 FPS kritériumból visszaszámolható, hogy maximálisan mennyi időt vehet igénybe algoritmusunk lefutása. 1 / 25 = 0,04 sec. Valójában ennél kevesebb, mivel alkalmazásunknak nem csak képszintézissel kell foglalkoznia, továbbá más alkalmazások és a rendszerfolyamatok is kiharcolják a nekik járó processzoridőt. Tehát valós idejű renderelésnél az egy másodperc alatt megjelenítendő képek számát nem növelhetjük tetszőlegesen az animációs idővel, de maximálhatjuk azt. Az FPS érték korlátozásának célja a felesleges számítások minimalizálása. Így más programok vagy saját alkalmazásunk más moduljai nagyobb időszeletet kaphatnak, ugyanakkor az animáció folytonossága is biztosítva van. A megvalósításra került konkrét algoritmus a következő: A megjelenítendő képek maximálása során a főprogram végtelen ciklusában a következő eljárást hívjuk meg az aktuális idő paraméterével, addig amíg az animáció be nem fejeződik.
44
HA az eljárás először fut le AKKOR { Eltelt_Idő = Aktuális_Idő EGYperFPS = 1 / FramePerSec Aktuális_Animációs_Idő = Animáció_Kezdete Animáció_Leállásának_Ideje = (Aktuális_Idő) + (Animáció_Vége - Animáció_Kezdete) } HA (Aktuális_Idő>= (Animáció_Leállásának_Ideje + EGYperFPS)) AKKOR { Animáció befejeződött } HA (Aktuális_Idő>= (Eltelt_Idő + EGYperFPS)) AKKOR { Eltelt_Idő = Aktuális_Idő Aktuális_Animációs_Idő += EGYperFPS Modell animálása az Aktuális_Animációs_Idő-vel Színtér renderelése }
4.5 Tesztelés Egy multimédiás alkalmazás sebességét alapvetően három dolog határozza meg. Egyrészt a hardverkörnyezet, másrészt az operációs rendszer végül pedig az alkalmazott fejlesztőeszköz. Az elkészült alkalmazás fejlesztési és tesztelési hardverkörnyezetéül egy Clevo D400K szériába tartozó notebook szolgált. Az alkalmazás sebességének mérése szempontjából a gép lényeges paraméterei a következők: Processzor: Mobile AMD Athlon(tm) 64 3000+ (1.8GHz, 1 mag, 1 szál) Memória: 1GB DDR-SDRAM (400MHz data rate) Videókártya: ATI MOBILITY RADEON 9700 (64 MB memória) Csupán a fenti adatok alapján nehéz megítélni, vajon mennyivel teljesítene jobban saját alkalmazásunk egy mostni csúcsgépen. A tesztgép pontosabb elhelyezése érdekében a memóriát és a processzort a SiSoftware Sandra Lite 2007 SP1 [P6] nevű programmal vizsgáltam.
[A51]. ábra – Tesztgép összehasonlítása más konfigurációkkal. (memória sávszélességének valamint a processzor multimédia utasítások végrehajtásának tesztje)
45
A teszeredményekből kiderül ([A51]. ábra), hogy a dolgozat írásakor kapható legújabb konfigurációktól messze lemarad a tesztrendszer. Valamint megjegyzendő, hogy ugyan a processzor támogatja az EM64T technológiát, de ez a 32 bites verziójú Windows XP miatt nem lett kihasználva. Egy 3D-s alkalmazás megjelenítési sebességét talán legjobban a videókártya határozza meg. A grafikus kártyák összehasonlításához a leggyakrabban használt program a Futuremark cég 3DMark [P2] nevű programjának éppen aktuális verziója. Jelen esetben ez a 3Dmark06, mely a telepítés után közölte, a konfiguráció nem üti meg a minimális szintet. Így ugyan konkrét becslésekbe nem lehet bocsátkozni, hogy mennyivel lenne gyorsabb az alkalmazás egy korszerű kártyán, de az megállapítható hogy a nagyságrendekkel erősebb hardvereken számottevő gyorsulást lehetne megfigyelni. Fejlesztőeszközül a DirectX SDK-val kiegészített Microsoft Visual Studio 2003 [P4] szolgált. A fordító többféle lehetőséget is nyújtott az optimalizációra. Egyrészt lehetőséget biztosít a 64 bites kód készítésére, melynek teljesítménynövelő hatását az operációs rendszer miatt nem tudtam tesztelni. Másrészt lehetséges külön Pentium családokra optimalizáltan fordítani, melynél szignifikáns sebességnövekedést ugyan nem lehetett mérni jelen alkalmazás esetén. Az alkalmazás sebességét leginkább az egy másodperc alatt kiszámított képek számával lehet mérni. Ezt röviden FPS-nek nevezik. A méréshez a PIX for Windows nevű programot használtam, mely a DirectX SDK [P1] egyik segédeszköze. Felbontás / Színmélység 800x600 / 32 1024x768 / 32 Modell megjelenítése 605 FPS 427 FPS Animáció lejátszása 442 FPS 300 FPS Az elkészült alkalmazás sebességtesztje
46
5. Eredmények bemutatása és elemzése Minden modell felállításának az a célja, hogy a modell tárgyáról fontosnak tartott információkat megtartsuk, a lényegteleneket pedig elhagyjuk. Így egy jobban, gyorsabban vagy épp könnyebben kezelhető rendszert kapjunk. Az egyszerűsítés ára az, hogy minden modell csak közelíti a valóságot. A pontosságot egyértelműen behatárolja az egyszerűsítés mértéke. A valós idejű animálhatóság kedvéért a bevett gyakorlatnak számító Low Poly modellezési technika került megvalósításra. Az alacsony poligonszám határát azonban mindig az aktuális hardverek teljesítményéhez mérten határozzák meg. A gyakorlatban a fejlesztők már évekkel a piacrakerülés előtt megkapják a hardvereket amire fejleszthetnek, így azokből a legtöbb vizuális hatást kihozhatják optimális sebesség mellett. Dolgozati keretek között ilyen nem valósúlhatott meg, így a befejezés időpontjában a mindössze 678 poligonból álló fejmodell a poligonszám tekintetében meglehetősen szerénynek számít. A modell jósága, azaz hogy mennyire közelíti meg az eredetit, esetünkben konkrét számokkal nem fejezhető ki. Szubjektív összehasonlításokat lehetne ugyan tenni, de nem célom a grafikus szakmába tartozó művészek több ezer poligonszámú modelljeivel ([A20]. ábra) összevetni. Tényszerűen azonban megállapítható, hogy a korszerű technikák kerültek alkalmazásra. Az eredmény ([A52]. ábra) egyedül a készítő szépérzékén és nem a technikai tudásán múlt.
[A52]. ábra – Az elkészült modell szemből és hátúlról. Egy animációs rendszer eredményeit bemutatni pusztán papiron meglehetősen nehéz. Az animációs szintek fejezetben található ugyan illusztráló képek, de a tesztvideók képei inkább mérvadók. Az animáció tartalmát nem kívánom komolyan górcső alá vetni, mert azon az álláspontos vagyok, miszerint a művészi munkával inkább a grafikusok, a technika dolgokkal pedig inkább az informatikusok foglalkozzanak.
47
A mérnöki oldalát tekintve az animációs rendszernek a megvalósítás meglehetősen egyedinek tűnhet egy hozzáértő szemszögéből, ugyanis a legtöbb helyen tisztán morfolásos technikát alkalmaznak. A hosszútávú cél azonban egy videókamera képe alapján történő valósidejű animáció volt, melyhez általánosabb, jobban illeszthető megoldásnak kínálkozott a bemutatott módszer. A tesztelésre került alkalmazás már egy bemutatható fázist tükröz, de közel sem egy végleges, optimalizált verziót. A tesztelési fejezetben bemutatott sebesség értékek még így is nagyságrendekkel felülmúlják az NTFS szabvány 30 FPS értékét, ennek köszönhetően az elkészült rendszer lehetőséget ad egy sokkal bonyolultabb, nagyobb poligonszámú és ezáltal szebb, részletgazdagabb környezet animálására.
6. Továbbfejlesztési lehetőségek A modell részletgazdagságát növelné, ha a ráncok, szőrzetek a valóságot jobban közelítő módon lennének ábrázolva. A bőr felületétől nem túlságosan eltávolodott szőrzetek, mint a borosta, szemöldök, valamint a ráncok életszerűbb megjelenítését a textúrázáson felül a bucka leképezés dobná fel. A rücskös vagy bucka leképezésnek (bump-mapping) nevezett módszer a textúra leképezéshez hasonló. A normálvektoroknak a geometriai normálvektoroktól való eltérését tároljuk egy fájlban. Az árnyalás során a geometriából adódó normálvektort a bucka térképen tárolt adattal módosítjuk, így a sima felületen azt a látszatot kelthetjük, mintha valami kitüremkedne, vagy épp bemélyedne. Szempilla, hosszú haj és minden fajta más szőrzet látványosab módon valósítható meg úgynevezett festési effektekkel. Minden egyes hajszál, hajszálcsoport háromdimenziós parametrikus görbe formájában kerül ábrázolásra, melyekhez anyagjellemzők rendelhetők. Ezt a technikát használva bármilyen bonyolult frizura reprezentálható, de számításigénye miatt, a tudomány jelenlegi állása mellett, nem valósítható meg valós időben. Nevét pedig onnan kapta, hogy a megszokott módon renderelt kétdimenziós képre ráfestik a hajat. Nagyobb borosta, bajusz, szakáll valamint rövid egyenes haj esetén használható úgynevezett árnyaló effektek. Szintén a fentebb említett festésről van szó, de jóval egyszerűbb algoritmusok alapján történik. A szőrzetet megvalósító effektust közvetlenül a grafikus kártya által érthető úgynevezett árnyaló nyelven íródnak, így biztosított a kód lehető leggyorsabb végrehajtása. Ezzel a technikával a festési effektekhez képest csak egyszerűbb hatások készíthetők el, de ami az óriási előnyt jelenti az a valós idejű megjelenítés. A grafikus hardverek teljesítményének növekedésével egyre bonyolultabb hatások megvalósíthatóságát várhatjuk ettől a technikától Az animáció magját a szabadformájú deformáció (FFD) adja. Ez határozza meg legjobban az animáció valószerűségét. A megvalósított tradicionális szabadformájú deformáló rövid összefoglalása a következő: Előny: Modell felületének geometriájától függetlenül alkalmazható Interaktív módosítás valós idejű visszacsatolással Rugalmas alkalmazhatóság Hatékony Intuitív
Hátrány: Hasáb alakú vezérlőrács
A tradicionális FFD használatának talán egyetlen és legnagyobb hátulütője a vezérlőrács kötött szerkezete. Ez a korlátozó erő leginkább szép ívelt formák lokális deformációjánál fordul elő. Az arc animáció esetén is fennáll ez az eset. 48
A korlátozó tényezők kiküszöbölése érdekében számos erőfeszítés történt. Ilyen például a Coquillart által bemutatott EFFD [3] (Extended Free Form Deformation). Ez a hagyományos szabadformájú deformáció kibővítése, mely lehetővé teszi a vezérlőpontok tetszőleges szerkezetét.
[A53]. ábra – A vezérlőpontok tetszőleges elhelyezését lehetővé tevő EFFD Ígéretesen hangzik, hogy a hagyományos FFD jó tulajdonságainak megtartása mellett kiküszöbölhetők a nehézségek, de a tetszőleges topológia kreálás szabadságának is meg van az ára. Az összes vezérlőpont elhelyezésének feladata a felhasználóra zúdul. Továbbá ne feledjük, hogy az animációs algoritmus végrehajtásának legtöbb idejét a deformálási rész teszi ki. A hagyományos FFD is számításigényes, akkor az ebből létrehozott komplexebb EFFD még több processzoridőt igényel minden bizonnyal. Az ígéretes képek ([A53]. ábra) ellenére a szubjektív véleményem, hogy az éles gyakorlati feladatmegoldásban való tesztelés az igazi bizonyíték egy módszer létjogosultságának. Utóbbi gondolatok ellenére érdemesnek tartom a különböző FFD kiegészítések kipróbálását.
7. Összefoglalás A dolgozat áttekinti az emberi fej számítógépen történő modellezésnek és animálásának technikáit. Professzionális 3D-s grafikai szoftvereszközök (Autodesk Maya, 3ds Max) alkalmazásával bemutatja a poligon modellezést, valamint a textúra leképezést. Gyakorlati példákon keresztül demonstrálja a textúra készítés lehetőségeit. Animáció tekintetében a szabadformájú deformációnak nevezett technikát vezeti le az apoktól kezdve. A megvalósítás során továbbfejlesztésre kerül az eljárás kulcskeret és morfoló technikák kombinálásával. A tesztelési eredményekből fény derül arra is, hogy a kifejlesztett animációs rendszer egy kevésbé erős konfiguráció esetén is nagyságrendekkel az elvárt sebesség felett teljesít.
49
8. Függelék 8.1 Elérhetőség A dolgozat és a fejlesztett alkalmazás honlapja a következő címről érhető el: http://www.bmfnik.hu/iar/2005_2006/FHM A szerző bármilyen észrevételt szívesen fogad a következő címre:
[email protected]
8.2 Irodalomhivatkozások [1] Markovics Mátyás, „Kamera alapú fejmozgás követő modul kialakítása”, Szakdolgozat, BMF-NIK, 2006 http://bmfnik.hu/twoem/tanulmanyok/MarkovicsMatyas_szakdolgozat.zip (2006-11-13) [2] Won-Sook Lee, N. Magnenat-Thalmann, „Fast Head Modeling for Animation”, Journal Image and Vision Computing, Volume 18, Number 4, pp. 355-364, Elsevier, 1 March, 2000. http://www.miralab.unige.ch/papers/28.pdf (2006-11-13) [3] Sabine Coquillart, „Extended Free-Form Deformation: A Sculpturing Tool for 3D Geometric Modeling”, Computer Graphics, Vol. 24, No.4, 1990, pp.187-193. [4] H. Gupta, A. Roy-Chowdhury, R. Chellappa, „Contour based 3D Face Modeling From A Monocular Video”, British Machine Vision Conference, 2004. http://www.ee.ucr.edu/~amitrc/face3D_BMVC2004_Final.pdf (2006-11-13) [5] Xiao, Yongqin, „Extended Free-Form Deformation”, http://www.cse.ucsc.edu/~pang/260/w03/presentations/effd.ppt (2006-11-13) [6] Dr. Szirmay-Kalos László, Antal György, Csonka Ferenc, „Háromdimenziós grafika, animáció és játékfejlesztés”, Computerbooks, 2003. [7] Jim Lammers, Lee Gooding, „Maya a 3D világa”, Perfact-Pro Kft., 2003. [8] 3D Scanners http://www.3dscanners.com/ (2006-11-13) [9] 3D-SHAPE GmbH http://www.3d-shape.com/home/home_e.php (2006-11-13)
50
8.3 Programhivatkozások [P1] DirectX SDK, http://msdn.microsoft.com/directx (2006-11-13) [P2] Futuremark 3DMark, http://www.futuremark.com (2006-11-13) [P3] Maya, 3ds MAX, www.autodesk.com/alias (2006-11-13) [P4] Microsoft Visual Studio, http://msdn.microsoft.com/vstudio (2006-11-13) [P5] Photoshop, www.adobe.com/products/photoshop (2006-11-13) [P6] SiSoftware Sandra Lite, http://www.sisoftware.net (2006-11-13) [P7] VirtualDub, www.virtualdub.org (2006-11-13) [P8] Wings3D, www.wings3d.com (2006-11-13)
8.4 Ábrajegyzék [A1-A4] Saját készítésű ábra [A5-A13] Saját modellről készült képernyőmentés [A14-A15] DirectX SDK [P1] súgójából származó ábrák [A16-A19] Saját modellről készült képernyőmentés [A20] Kép a „The Artificial Actors” project-ből http://aistud.filmakademie.de/actor/fileadmin/files/TheProject/Sequenz_Full.jpg (2006-11-12) [A21] Mike Fudge által készített kép http://wargasm.fortawesome.com/tutorials/MayaHair/MayaHair.html (2006-11-12) [A22] Tomohide Kano programjából készített kép http://www.ati.com/developer/samples/3rdparty/tomohide_fur.03.13.02.zip (2006-11-12) [A23-A34] Saját modellről készült képernyőmentés [A35-A37] DataFace portál képei http://face-and-emotion.com/dataface/anatomy/upperfacemusclesdetails.jsp (2006-11-12) http://face-and-emotion.com/dataface/anatomy/lowerfacemusclesdetails.jsp (2006-11-12) [A38] Saját készítésű ábra [A39-A48] Saját alkalmazásból készített képernyőmentés [A49] Saját készítésű ábra [A50] Saját alkalmazásból készített képernyőmentés [A51] SiSoftware Sandra Lite [P6] programból készített képernyőmentés [A52] Saját modellről készült képernyőmentés [A53] Xiao, Yongqin előadásából [5] kiemelt kép
51