Skinned Animation Textures
Abstract
Skjelettanimasjoner er en mye brukt teknikk for å posere og animere 3D-modeller ved bruk av et virtuelt skjelett. Prosessen med å deformere punker på modellen ved hjelp av en skjelettstruktur kalles skinning, og utføres vanligvis hvert simuleringstrinn. Denne prosessen kan bli svært krevende når et stort antall animerte modeller skal tegnes samtidig. Denne oppgaven utforsker teknikker som lagrer animasjons data inn i piksler på bilder. Dette gjør at animasjonene kan oppbevares på grafikkprosessoren, noe som mulig reduserer kommunikasjon kostnader mellom CPU og GPU. Oppgaven ser på to måter å kode animasjonene på: vertex animasjonsteksturer og bein-animasjonsteksturer. Vertex texturer koder de deformerte punktene direkte, og hopper over skinning trinnet. Bein-teksturer må fremdeles utføre skinning prosessen, men er uavhengig av modellkompleksiteten, noe som generelt betyr teksturer av en mindre skala, og at de kan deles mellom forskjellige modeller. Den første teknikken har tidligere blitt brukt av spillutviklere for å oppnå høyere ytelse når de tegner store mengder animerte figurer, mens beinteksturer som utviklet i denne oppgaven er en ny tilnærming.
De to teknikkene ble ferdigutviklet og testet i en applikasjon, der de produserte animasjonsteksturer fra eksisterende skjelettanimasjoner. Applikasjonen støttet alternativer for å endre kodingsmetoder og samplingsfrekvenser gjennom et enkelt grafisk brukergrensesnitt. De produserte animasjonene ble visualisert side om side i et vindu som kunne sammenlignes med de tilsvarende animasjonene produsert av tradisjonelle skinning metoder. Det ble etablert en ytelsesvurderingsenhet for å evaluere den relative forskjellen mellom de forskjellige metodene som ble testet i denne oppgaven. Funnene konkluderte med at animasjonsteksturer er i stand til å oppnå ytelsesverdier langt bedre enn de som ble produsert av tradisjonelle metoder, men kun når antall tegne-kommandoer har en betydning på ytelsen. Skeletal animations are a widely used technique to pose and animate 3D models with the use of a virtual skeleton. This process of deforming vertices by the means of a skeleton structure is called skinning, and is usually performed every simulation step. Skinning can be computationally expensive when a large number of animated characters are drawn concurrently. This thesis explores techniques which samples animations, and encodes them into pixels on to an image. This allows the animation data to be stored on the graphics processor, potentially reducing communication overhead. The thesis looks at two ways of encoding the animations: vertex animation textures, and bone animation textures. The vertex implementation encodes the deformed vertices directly, skipping the real-time skinning step altogether. Bone textures still perform the skinning step, but are independent on the model complexity, which generally means smaller textures that can be shared between models. The first technique have been previously used by game developers to achieve higher performance when rendering large amount of skinned animated characters, while bone textures, as implemented in this thesis, is a novel approach.
The two techniques were developed and tested in an application, producing animation textures from existing skeletal animations. It supported options to change encoding methods and sampling frequencies through a simple graphical user interface. The encoded animations were visualized side by side in a window to be compared to the ground truth animation produced by traditional skinning methods. A performance rating metric was established to evaluate the relative difference between the skinning implementations tested in this thesis. The findings concluded that animation texture skinning is able to surpass the performance of traditional skinning techniques by orders of magnitude, when the number of draw calls is the performance bottleneck.