OCH FJÄLL I MAYA. Mattias Lindblom

Relevanta dokument
Objektorienterad programmering

Skinning and Animation

Föreläsning 3.1: Datastrukturer, en översikt

Klassuppgift: Hinderrally

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Inledning. Kapitel Bakgrund. 1.2 Syfte

Strömsholmen. Mårten Svensson, Peter Zhu, Andreas Wetteborn,

Spel som interaktiva berättelser

Bézierkurvor och parametriska objektrepresentationer

Simulering av brand i Virtual Reality

FÖRKORTA DIN VÄG PÅ BANAN

Kv. Ogräset. Martin Stenmarck,

Senaste revideringen av kapitlet gjordes , efter att ett fel upptäckts.

Digitalt lärande och programmering i klassrummet. Introduktionsworkshop - Bygg ett akvarium i Scratch

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel

Inlämningsuppgift 4 NUM131

TSBK 10 Teknik för avancerade datorspel Fö 9: Nätverk, Peter Johansson, ISY

Inledning. Metod. Val av maskin. Vanliga funktioner som lätt blir fel

Föreläsning 6: Introduktion av listor

Post Mortem för Get The Treasure!

Föreläsning 4: Poster

9-1 Koordinatsystem och funktioner. Namn:

TAIU07 Matematiska beräkningar med Matlab

C-UPPSATS. Cinematic Animation in a Production Pipeline

Fotorealistiska bilder 1 PV360 kap 1 7: Grunder samt material och dekaler i Photoview 360

Kristian Pettersson Feb 2016

SLALOMINGÅNGAR hur svårt kan det vara?

LABORATIONSHÄFTE NUMERISKA METODER GRUNDKURS 1, 2D1210 LÄSÅRET 03/04. Laboration 3 3. Torsionssvängningar i en drivaxel

Att använda bildhanteringsprogram, del 2

Spelutveckling 3d-grafik och modellering. Grunder för 3d-grafik Blender Animering

Grunderna i stegkodsprogrammering

Projektarbete 2: Interaktiv prototyp

Sex goda skäl att styra trycket med gråbalansfält

Slutrapport för Pacman

magazine Höstens tema: BIM Stunden alla har väntat på: Lanseringen av Topocad 16 BIM i fokus när järnväg projekteras HÖST 2015


Innan passningen. Riktning och höjd

Nallelek Lärarvägledning

Min syn på visuella verktyg i produktutvecklingsprocessen

Programmering av stegmotorer ett miniprojekt i samarbete med Svensk Maskinprovning


Min syn på idéframställan

MagiCAD El & Rör. Varför MagiCAD och varför 2D/3D? Kollisionskontroll. MagiCAD El

Tärna Folkhögskola IT-pedagogutbildningen Individuellt fördjupningsarbete Vt IT I FÖRSKOLAN. Författare:Tove Andersson

MÅLVAKTSTIPS. Hans Gartzell Certifierad Målvaktstränarinstruktör

LEGO Robot programmering och felsökning Hur svårt ska det vara att följa den svarta linjen?

Ickelinjära ekvationer

PMSv3. Om konsten att hålla koll på ett vägnät

Skapande av en modifikation till Crysis

Laboration i Maskinelement

Introduktion till arv

Rhino3D. Schackbräde. Krav. Några detaljer som kan vara bra att känna till:

Concept Selection Chaper 7

Nödrop från Expedition C3: skicka fler tekniker!

Naturlagar i cyberrymden VT 2006 Lektion 6. Martin Servin Institutionen för fysik Umeå universitet. Modellering

Byggnation av en luftsolfångare

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Byggnationen av Cheopspyramiden - ett visualiseringsprojekt. Mathias Bergqvist, Rikard Gehlin, Henrik Gunnarsson

Bruksanvisning. Bestic software version Äthjälpmedel. Internet:

Slutrapport Fästanordning för fordons specifik bilbarnstol i framsätet

Matematik 5 Kap 3 Derivator och Integraler

Möjliga Världar. Skapande Skola, Halmstad. Robert Hais

Administrationsverktyg för marinvåg

6-stegsguide för hur du tänker positivt och förblir positiv.

Realtid. eda040project2010 MANUAL. - Christoffer Olsson. - Daniel Lehtonen

Space Invaders - Slutrapport

UTVÄRDERING AV UTSTÄLLNINGEN OMÄNSKLIGT/ OM TEKNIK / LÄSKORT OCH LURAR

Objektiv. Skillnad i egenskaper mellan objektiv med olika brännvidder (småbild)

C-UPPSATS. Rigga en karaktär för agent FX

År 4. Arbetsområde: Ämnesspecifika begrepp och ord: (Ämnesövergripande möjlighet inom parantes)

Två gränsfall en fallstudie

Vrid och vänd en rörande historia

OM KRITERIER av Emelie Johnson Vegh och Eva Bertilsson, publicerad i Canis 2004

TENTAMEN CAD. Material på web och server samt böcker i ämnet

Lära känna skrivbordet

Grafiska pipelinen. Edvin Fischer

Koordinatsystem och Navigation

Att montera lapptäcke utan vadd. Plocka fram de tyger du vill ha i täcket. Det du

QlikView - Lathund för Flödesmodellen bas

Chefens sju dödssynder - undvik dem och lyckas som ledare!

Macromedia Flash MX 2004

Tentamen, EDA501 Programmering M L TM W K V

Sätt att skriva ut binärträd

Omtentamen i DV & TDV

Betatestning - Solsystem

Chalmers tekniska högskola EDA390 Datakommunikation och Distribuerade system

General Rules Of Pocket Billiards

Övningar Dag 2 En första klass

T-tunika med formremsa i halsringningen

Nivå 2 Lära för att träna 9-10 år

Boon Edam har 140 års erfarenhet av att leverera snygga, miljövänliga entrélösningar av hög kvalitet och kan tillgodose i stort sett alla behov inom

Mimer Akademiens arbete med barnens matematikutveckling Ann S Pihlgren Elisabeth Wanselius

Real-time requirements for online games

Figur 1. Skärmbild med markerade steg i videon. Diagram och tabell som visar positionerna som funktion av tiden.

Kursplan. Ämnesövergripande

Viktiga moment i kursplanen

Nyheter i Creo Simulate 2.0:

Kommuniceramer än ord

Bilaga 4.1 Uppskattning av antalet erforderliga provpunkter och analyser vid detaljundersökningen. Bakgrund. Metod. Konfidensintervallens utveckling

Transkript:

ATT ANIMERA FJÄDRAR OCH FJÄLL I MAYA Mattias Lindblom 27 Maj 2006 Rapport för examensarbete i interaktions design, 20p Internhandledare, TFE, Umeå universitet: Håkan Gulliksson Externhandledare, Craft Animations: Luigi Tramontana Umeå University Department of Computing Science SE-901 87 UMEÅ SWEDEN

Abstract Today more and more movies contain characters partly or completely animated by the computer. Today there exist no solution specifically designed to animate birds and their feathers. This paper describes my master thesis which goal was to create such a solution. Furthermore it investigates the best method for interaction with the system. The system utilizes physics engines which simulate the feathers collisions and interaction with each others. And the solution is developed as a Maya plug-in. The method of interaction found to work the best was using interpolated key feathers and textures to describe how the feathers attributes such as density and length changed over the surface of the bird. Abstrakt Allt fler filmer använder idag sig av helt eller delvis dator animerade karaktärer. Vill man animera en fågel idag finns det inget verktyg utvecklat specifikt för att underlätta skapandet av fjädrarna och animeringen av dem. Det här examensarbetet syftar till att undersöka möjligheten till att skapa ett sådant verktyg genom utnyttjandet av en fysikmotor. Vidare undersöks det vilken interaktionsform som bäst skulle kunna passa verktyget. Fysikmotorn genomför dels kollisionsdetektionen mellan fjädrarna men simulerar också deras interaktion med varandra. Animeringsverktyget fungerar som en plugin i Maya. Interaktionsmetoden som visade sig fungera bäst innebar utnyttjandet av interpolation av nyckelfjädrar och texturer som beskriver hur fjädrarnas egenskaper förändrar sig över fågelns yta.

Innehållsförteckning 1. Introduktion... 1 2. Mål och metod... 2 2.1. Målgruppsanalys... 3 2.2. Utvecklingsprocessen... 4 2.2.1 Iterativ design... 4 3. 3d-animeringar... 5 3.1. Päls och hår i animerad film... 6 3.2. Fjäderuppbyggnaden... 9 3.3. Fjädrar i animerad film... 11 4. Fysikmotorn... 14 4.1. Kollisionsdetektionen... 14 4.2. Restriktioner... 15 4.3. Uppdatering av systemet... 16 4.4. Ageie PhysX... 16 5. Maya... 17 5.1. Mayas gränssnitt...18 5.2. Dependencygrafen och Mayanoder...18 5.2.1. Scenen...19 5.2.2. Dataflödet...19 5.2.3 Noden... 20 5.3. Quaternioner i Maya... 21 6. Användarutvärderingar... 22 6.1. Användarintervju... 22 6.2. Observation vid användandet av Shave and a haircut... 23 6.3. Användartest... 23 7. Interaktionsform för kamning... 23 7.1. Direktmanipulering... 25 7.2. Nyckelfjädrar... 28

7.3. Texturering av fjäderutseende och orientering... 28 7.4 Lösningen på interaktionen för orientering och böjning av fjädrar... 28 8. Placering av fjädrar... 29 8.1. Fast Surface Particle Repulsion... 30 8.2. Placering via sannolikhetsfördelning... 32 8.3. Kollisionsdetektion... 33 9. Spara och ladda tillstånd... 35 9.1 Interpolation av färger... 35 10. Implementation... 36 10.1. PhysXnoden... 36 10.2. Featherklassen... 38 11. Slutsatser och diskussion... 40 12. Litteraturförteckning... 42

Att animera fjädrar och fjäll i Maya 1 1. Introduktion Vid produktion av 3d-animerade filmer. måste man ofta styra varje enskilt objekt och delobjekts rörelse för varenda bildruta. Detta kan bli väldigt omständigt och ta en massa tid. Tid är ju pengar så därför finns det ett intresse för att snabba upp processen. Antingen genom att underlätta styrningen av objektens rörelser eller genom att själv göra en förenklad rörelse och låta mjukvaran styra detaljerna i rörelsen. Det vore väldigt tidskrävande att animera flera tusen fjädrar på en fågel för hand. Idag gör man det ofta automatiskt genom att utnyttja animeringsprogrammens inbyggda funktioner för animering av hår och päls. Dessa har dock en stor nackdel, nämligen att de tillåter penetration av hårstråna/fjädrarna med varandra, det vill säga att hår och fjädrar passerar genom varandra. Detta är inte någon större fara när det handlar om hår och päls eftersom det är svårt att se huruvida så tunna objekt passerar igenom varandra eller bara ligger väldigt nära. Men för fjädrar vilka är mycket bredare blir problemet betydligt tydligare. Det här examensarbetet är genomfört som ett delprojekt på företaget Craft animation vilka utvecklar verktyg för animering i 3d i realtid. Det fullständiga projektet syftar till att ge animatörerna ett verktyg för att animera fågelskrudar och fjällbeklädda ytor. Hela processen från att bygga upp fjädrarna/fjällens form och utseende till placering och rörelse skall stödjas. I det här examensarbete har följande delar behandlats. Möjligheten att i realtid kamma fjäderskruden, dvs. bestämma fjädrarnas riktning, lutning och kurvatur (fluffighet). Automatisk animering av fjädrarna/fjällen utan penetration. Utplacering av fjädrarna. Verktyget har implementerats i animeringsmiljön Maya och utnyttjar en fysikmotor med möjlighet till hårdvaruacceleration. Fysikmotorn som valdes var Agieas fysikmotor PhysX. En annan viktig aspekt i projektet var att få fram ett verktyg vilket tillåter animatörerna att arbeta effektivt. Det var också önskvärt att verktyget så mycket som möjligt jobbar enligt principerna för Maya och Mayanoder. Arbetet skedde på Craft Animations utvecklingskontor i Göteborg och bestod i två delar. Jakob Bränström som är en student från Chalmers hade hand om utvecklingen av det andra delprojektet. I det delprojektet studerades hur utformningen av fjädrarna ska gå till och hur de olika fjädertyperna interpoleras beroende på deras inbördes placering gentemot nyckelfjädrarna.

Att animera fjädrar och fjäll i Maya 2 Här i rapporten beskrivs de målsättningar projektet har och vilka metoder som använts. Efter att mål och metod har beskrivits kommer en kort introduktion till 3danimering och orsakerna till de problem som finns vid skapandet av realistiska animeringar. Tyngdpunkten i avsnitten om 3d-animering har legat på lösningar vilka tagits fram för animeringen av päls och fjädrar vid produktionen av Hollywood filmer. Filmer innehållande animerade karaktärer täckta med antingen päls eller fjädrar, så som King Kong, Narnia och Stuart Little 2. Därefter följer en genomgång av de två huvudkomponenterna i systemet, Maya och PhysX, vilket följs upp av en diskussion om hur placeringen av fjädrar samt interaktionen vid kamningen av fjädrarna lösts. Som avslutning innan sammanfattningen förklaras hur fjädrarnas orientering sparas i texturmappar och hur det färdiga systemet är uppbyggt. Det visade sig att det första angreppspunkten att kamma fjädrarna, genom att imitera hur man skulle gjort i verkligheten genom att dra en kam eller liknande verktyg över fjädrarna, inte var det effektivaste eller smidigaste metoden. Istället visade det sig vara bättre att utgå det sätt som animatörerna var vana att animera päls på och anpassa den metoden med nyckelkurvor och mappade texturer. 2. Mål och metod Projektet kunde delas upp i tre delmål där det första delmålet var att undersöka möjligheterna till att i realtid kamma en fjäderskrud. Med kamning menas att påverka fjädrarna som är placerade på en yta så att de lägger sig i önskad riktning och lutning utan att de för den skull penetrerar varandra. Se i figur 1 hur en plan yta med fjädrar vilken bara delvis blivit kammad ser ut. Kamningen har här skett i riktning mot det övre vänstra hörnet. För detta arbete skulle även lämpliga kamningsverktyg utvärderas. Det andra delmålet var att placera ut fjädrarna på en yta enligt en täthet som specificerades av användaren. Hur användaren skulle specificera tätheten behövde också undersökas. Möjligheten till en deterministisk utplacering var skulle speciellt undersökas. Som tredje delmål skulle fjädrarna/fjällen animeras och renderas automatisk med hjälp av en fysikmotor och Mayas inbyggda renderare alternativt sätta fjädrarnas transformmatris och kurvatur för de bildrutor som fysikmotorn används i. Fördelen är att användaren sedan kan gå in och förändra enstaka fjädrars matris eller kurvatur i efterhand. Fördelarna med att interagera lösningen med renderaren är för det första att man att användaren slipper köra simuleringssteget. Men också att renderaren kan utnyttja företagets eventuella renderingsfarm. Renderingen är den process där man lägger till alla de detaljer och effekter som är för tunga för att beräknas i realtid som

Att animera fjädrar och fjäll i Maya 3 till exempelvis belysning och skuggor. Man kan säga att det är lite som att framkalla animationen. En renderingsfarm är ett kluster av datorer som används för att köra renderingen och på så sätt öka beräkningskraften tillgänglig renderaren. Figur 1. En plan delvis kammad yta med fjädrar. 2.1. Målgruppsanalys Eftersom de större filmbolagen och animeringsstudiorna ofta har sina egna in-house lösningar för den här typen verktyg begränsar köparna av den slutliga produkten till små och medelstora animeringsstudior. Slutanvändaren är ofta texturerarna på ovan nämnda företag. En texturerare har i uppgift att lägga på struktur, färg, genomskinnlighet osv. till modellerna och objekten i 3d-scenen. Till exempel ser de till att ytan i ansiktet på en mänsklig 3dmodell ser ut som hud och inte som en slät metall på en robot. Texturerarna är oftast i 25-40 år åldern och de flesta i den undre delen av åldersgruppen. Att de är estetiskt lagda och intresserade av grafik kan man utgå från baserat på deras val av yrke. Eftersom arbetet kräver en mycket användande av datorer kan även stor datavana antas. Produkten kommer att vara en plugin till Maya och användaren kommer knappast byta utvecklingsmiljö enbart för få utnyttja den. Även kännedomen av Maya förutsätts vara åtminstone god och då särskilt av textureringsdelen. De flesta av slutanvändarna har tidigare använt sig av Mayas verktyg för hår och päls. De kan därför anses känna till metodiken för detta verktyg.

Att animera fjädrar och fjäll i Maya 4 2.2. Utvecklingsprocessen I ett första skede gällde det att sätta sig in i vad som var möjligt att göra med PhysXoch Maya SDK. Om det överhuvudtaget var möjligt att emulera så många fjädrar som behövs på en fågel i realtid. Sedan behövde det beslutas om vilken interaktionsmetod som ska användas vid kamning och hur fjädrarnas placering ska gå till. De delmål som delprojektet delats in i bygger till stor del på föregående dels funktionalitet, en iterativ utvecklings och design process blev därför naturlig. Efter att första delen genomförts och ett antal möjliga manipulationsverktyg tagits fram gjordes en användarintervju och observation av användningen pälsverktyget i Maya av några texturerare på animeringsbyrån Fido. 2.2.1 Iterativ design 1988 föreslog Barry Bohem en utvecklingsprocess som han kallade för spiralmodellen vilken gick ut på att utvecklingen skedde i flera steg och varje steg bestod av flera återkommande faser. Till exempel börjar man med en riskanalys följt av en planerings fas och implementering (1). Figur 2 beskriver hur processen har sett ut under projektets gång. Spiralmodellen bygger på en iterativ utvecklingsprocess vilket här innebär att först sker en analys av vilka krav som ställs på produkten innan en planeringsfas genomförs som följs av en implementeringsdel. Sedan börjades det om med en analys huruvida de ställda kraven är uppfyllda och om nya krav behövs och så fortsätter det tills projektet är slutfört. För fjäderprojektet blev det fyra iterationer. För det här projektet gjordes först en målgruppsanalys och en uppställning av krav på lösningen. Vid planeringen bestämdes det sedan att några enkla verktyg behövde implementeras för att kunna undersöka olika interaktionsformer samt se om det var möjligt att påverka så många fjädrar via fysikmotorn i realtid. Vid resten av iterationerna utvärderades föregående implementering dessutom gjordes tre användaranalyser i form av en intervju, en observation och ett test av de utvecklade verktygen. Figur 2. Förenklad modell av den iterativa processen.

Att animera fjädrar och fjäll i Maya 5 I varje iteration infördes ytterligare funktionalitet till lösningen. Först implementerades fysikemuleringen i Maya och sedan enklare verktyg för att kunna påverka fjädrarnas orientering. I fortsättningen kommer dessa verktyg att i rapporten refereras till som kamningsverktygen. I de två sista iterationerna implementerades möjligheten att påverka fjädrarna med hjälp av en mappad textur respektive simuleringen av fjädrarna för skapandet av animationen. Användaranalyserna skedde i de tre första iterationerna. 3. 3d-animeringar En film består av en serie stillbilder som visade i följd ger en illusion av rörelse. Bilderna tas av en filmkamera med ett fixt tidsmellanrum mellan bilderna. Ofta tar man 24 bilder per sekund eftersom det anses vara vid den hastigheten eller högre som ögats luras. Om bilderna inte tas med en filmkamera. De kan till exempel vara tecknade eller fotograferade med en stillbildskamera. Om animatören förändrar scenen något mellan varje foto eller teckning kan han skapa en animation. Idag är det vanligt med datorgenererade animationer som är både 2- och 3-dimesionella. De vanligaste teknikerna är keyframing eller att jobba med bildruta per bildruta. Keyframing innebär att animatören instruerar programvaran om hur ett objekt i scenen ser ut i en start- och en målbild. Sedan skapar programvaran alla mellanliggande bildrutor genom interpolation. Tekniken fungerar endast på enkla rörelser eller om man gör många nyckelrutor och då blir det väldigt arbetsamt. När betraktaren ser en animerad film skapas en föreställning om vilka fysiska lagar som gäller i denfilmens värld. Allt eftersom filmen fortgår cementeras de regler som antas gälla. Om miljön består av människor, bilar och andra vardagliga saker förväntar sig publiken omedvetet att saker och ting ska bete sig enligt de fysiklagar som existerar i vår verklighet. Om en karaktär eller ett objekt bryter mot en massa av dessa lagar så sticker objektet eller karaktären ut och verkar inte riktigt passa in i miljön (2). Även om det är svårt att animera realistiska rörelser i en helt datoranimerad film så går det att förenkla och anpassa karaktärerna och miljöns utseende och utryck för att göra arbetet lättare. Ett exempel är att se till att filmen uppfattas som mer tecknad eftersom där inte finns lika stora förväntningar exaktheten i rörelser och liknande. I en produktion där man blandar både datoranimerade karaktärer och filmade ställs ännu större vikt på att rörelserna är naturliga. Publiken kan ju hela tiden jämföra de animerade karaktärerna med de filmade. Ännu värre blir problemet om de filmade karaktärerna interagerar med de animerade.

Att animera fjädrar och fjäll i Maya 6 Idag har man börjat undersöka allt fler tekniker för att påskynda animeringsarbetet. Man har bland annat börjat utveckla datorstödd karaktärsanimering där användaren skapar en modell vilken riggas till ett skelett. Användaren behöver sedan bara instruera programmet vad man vill att karaktären ska göra som till exempel gå längs med en gata. Eller så räcker det med att styra en enstaka rörelse som att styra karaktärens hand att plocka upp ett glas så beräknar programstödet ut de resterande rörelserna som krävs. Bland annat hur lederna i armen rör sig och rörelser för att hålla balansen om glaset är tungt. Karaktärsanimering har bland annat Y. Abe och J. Popovi c undersökt i (3). Den här utvecklingen är något som man på Craft Animations har tagit fasta på och man har utvecklat ett antal verktyg för att direkt animera bland annat fordon. Iden är att man i realtid styr fordonet eller vad det nu är man vill animera med hjälp av en styrkontroll som till exempelvis en joystick. Objektets rörelser sparas sedan bildruta per bildruta i ett 3d animeringsprogram som Maya och 3d max studio. En annan teknik som växer fram är användandet av fysikmotorer för att simulera objektens rörelser på ett verklighetstroligt sätt. Att animera någonting som hår, päls och fjäderskrudar bildruta för bildruta är svårt. Den typen av strukturer består av flera tusen objekt och har ett väldigt komplicerat rörelsemönster. Istället har flera lösningar tagits fram som gör detta automatiskt vid renderingen av animationen. Nedan kommer ett mindre antal av lösningarna beskrivas och hur dessa har använts vid produktion av datoranimerade biofilmer. 3.1. Päls och hår i animerad film En vanlig metod för att skapa detaljer på ett objekt är att koppla en textur eller ett mönster till ytan på objektet. Texturen kan vara antingen en matris av färgvärden, en bild till exempelvis. Texturen kan även vara en funktion av något slag som ändrar objektets färg till exempel en matematisk funktion. Ett enkelt sätt att skapa en illusion av hår är att använda en bild av hår eller päls och mappa denna som en textur till objektet. En texturs normaliserade rymd beskrivs på intervallet (1,0). En två dimensionell texturs koordinat anges då som U och V där både U och V är på intervallet (1,0). Att mappa en textur innebär att definiera vilket värde i texturen som varje polygon/face upptar i texturrymden. Att göra på detta sätt duger ofta till spel och liknande men ger inte ett tillräckligt bra resultat för att duga i filmer som strävar efter fotorealistiska karaktärer. (4) Inför produktionen av filmen King Kong 2005 utvecklade företaget Weta Digital ett nytt system för animering av päls. Med detta kunde man med hjälp av visuell programmering både skapa, frisera och animera pälsen. Visuell programmering innebär att man programmerar systemet genom manipulera grafiska element istället för genom text (4). Ett exempel på visuell programmering är användandet av wiredeformerar beskrivet nedan. Genom ett nätverk av deformeringsnoder i Maya

Att animera fjädrar och fjäll i Maya 7 kunde man kontrollera varje hårstrå som växte fram på en yta. I det här fallet en subdivision yta, det vill säga en yta som vars geometri genomgåt en serie av utjämningar genom insättning av fler polygoner (5). Genom att låta håret växa rakt ut från ytan och därefter koppla samman en serie av deformeringsnoder styrde man hårets utseende och beteende. Deformeringsnoders funktion i Maya är att förändra en eller flera geometrier och/eller kurvor. Man la på flera lager av olika styreffekter som till exempelvis kamning, krusning eller att håret klumpar ihop sig. Kamningen eller riktningen av håret skapades med hjälp av hårsäcksdeformerare som drevs av målade texturer eller matematiska utryck. En hårsäcksdeformerare har i uppgift att ändra hur mycket och i vilken riktning som håret växer. Detaljer i hårstråna åstadkoms sedan genom att använda ytterligare deformerare. Flera nivåer av klumpningsdeformerare som gav olika stora klumpar av hår fanns att tillgå, och för att öka komplexiteten i pälsen använde man sig av deformerare som skapade ett intryck av en mer ovårdad päls. De kollisionsnoder man använde sig av hade i uppgift att se till så att hårstråna inte penetrerade geometrier som till exempel på Kongs rygg och ansikte där hårstråna skulle ligga tätt längsmed hudens yta. Genom att använda sig av wiredeformerare där animatören skapade en kurva som närliggande hårstrån drogs mot fick man en ökad kontroll, även här kunde flera nivåer av styrka användas. Hur en wiredeformerare fungerar syns i figur 3 där kurvorna följer den vita styrkurvan, wiredeformeraren. Figur 3. Wiredeformerare Tjockleken i Kongs päls gjorde det möjligt att använda sig av soft-body dynamik som sedan drev flera deformerare för att kunna animera rörelser i pälsen. Vind simulerades genom automatiskt skapade wiredeformerare (7).

Att animera fjädrar och fjäll i Maya 8 Rythm and Hues hade aldrig jobbat med hår och päls i den utsträckning som krävdes för The Chronicles of Narnia och utvecklade därför en helt ny lösning för hår dynamik som uppfyllde deras krav. Efter att ha iakttagit vilda djur så som till exempelvis lejon insåg man två krav som ställdes på lösningen. Man såg att hårstråna som skulle animeras dels var styva och men också att de rörde sig i klumpar på grund av interaktionen sinsemellan. Man bestämde sig för att man behövde ett stelt system med hår-hår interaktion. För att simulera hårstråna använde man en massfjädermodell. Hårstråna fick bestå av en serie massnoder som representerade delmassan i ett segment. Figur 4. Linjär fjädring i massfjädermodellen. Figur 5. Vinkelberoende fjädring i massfjädermodellen. Noderna bands samman av två typer av fjädringar, linjära och vinkelberoende. De linjära fjädringarna ser till att hålla segmenten på konstant avstånd och den vinkelberoende ser till att upprätthålla den relativa orienteringen. I figur 4 representerar linjerna som binder samman noderna den linjära fjädringen och bågen i figur 5 den vinkelberoende fjädringen. Alla massnoder har en vinkelberoende fjädring i förhållande till föregående nod även om bara en är utritad i figuren. Den här lösningen kunde hantera tusentals hårstrån på en sekund per bild om man utelämnade kollisionsdetektionen och hår-hår interaktionen. Det visade sig att full kollisionsdetektion och hår-hår interaktion skulle kräva 95 % av beräkningstiden. Ett tusental hårstrån simulerades istället och sedan fick varje hårstrå representera en volym av hårstrån som skulle renderas. På så sätt kunde man rendera miljontals med hårstrån. Två typer av kollisionsdetektion fanns i systemet Dels mellan hårstrån och andra objekt i scenen och dessutom för kollisioner mellan hårstrån. Kollisioner mellan andra objekt löstes på ett traditionellt sätt med standardmetoder som till exempelvis spatial hashning och AABB uppdelning där objektens geometrier angavs som kollisions ytor. Problem kunde uppstå om kollisionsobjekten klämdes fast mellan varandra eller om hårets hårsäckar hamnade under ytan av föremålet som karaktären

Att animera fjädrar och fjäll i Maya 9 låg eller släpades ovanpå. Flera metoder användes för att lösa dessa problem. Antingen kunde renderaren frysa områden där hårstråna börja bete sig märkligt alternativt kunde en medelrörelse tas ut. Ibland så skulpterades kollisionsobjektets yta om så att problem områdena försvann. Eftersom simulationen fungerade genom att ha ett antal nyckelstrån som representerade en viss volym av hårstrån och man ville simulera hår-hår interaktion var det viktigt att dessa volymer inte penetrerade varandra. Genom att införa ytterligare en fjäderkraft mellan hår som var i närheten av varandra undvek man problemet. Kraften bestämdes av variabler som avstånd, relativ rörelsehastighet och användarspecificerad hår-hår interaktionen. För att simulera vind använde man sig av två verktyg. Det ena tillförde en rörelsekraft med en slumpmässig variation i riktning med vinden på nyckelhåren. Det andra gav en viss kontroll av enstaka hårstråns rörelse. 3.2. Fjäderuppbyggnaden För att kunna skapa en lösning som ger verklighetstrogna animeringar av fjäderskrudar och fjädrarnas rörelser behövs en förståelse av hur en fjäder och fjäderskrud är uppbyggd. Det finns sex typer av fjädrar och vi kommer här beskriva de två huvudtyperna kontur- och dunfjädrar samt borst. I figur 6 kan du se exempel på fyra olika fjädrar. En genomsnittlig fågel har cirka 2 500 fjädrar, en ladusvala har cirka 1 500 fjädrar och en sångsvan har cirka 25 000 (5). Figur 6. Från vänster till höger har vi en konturfjäder, dunfjäder och två stycken borst.

Att animera fjädrar och fjäll i Maya 10 Först måste vi reda ut lite anatomiska begrepp. En fjäder består av tre huvudkomponenter, fjäderpenna, spole och fanstrålar. Fjäderpennnan är den mest proximala delen av spolen och är den delen av fjädern och som fäster i fågeln via fjädersäcken se figur 7. På spolen växer sedan fanstrålarna snett ut på båda sidorna. Fanstrålarna fäster sedan i varandra med hjälp av bistrålar med små hakar och bildar en plan yta som kallas fan. Det är på grund av avsaknaden av de små hakarna som fanstrålarna i dunet spretar, även proximalt på konturfjädrarna saknas dessa hakar (5) (9). 2 Distalt 3 1 4 Proximalt Figur 7. Fjäderns anatomiska benämningar. 1. fanstråle, 2. fan, 3. spole, 4. fjäderpenna. Begreppen som kommer användas i den här rapporten för läges- och riktningsbeskrivningar är proximalt och distalt för att beskrivar den relativa positionen längs med fjäderns längd. Proximalt innebär nära fågelns kropp. Anterior är den sida av fjädern som befinner sig framåt eller utåt från fågeln och posterior är motsatsen. Ventralt innebär inåt mot fågeln dvs. undersidan av fjädern och dorsalt är ovansidan av fjädern, den sida som syns mest. Den dorsala kammen blir då spolens ovansida och den ventrala kammen innebär spolens undersida, se figur 8.

Att animera fjädrar och fjäll i Maya 11 Figur 8. Schematiskvy över fjäderstrukturen. 1. distal bistråle, 2. proximal bistråle, 3. fanstråle, 4. dorsal kam, 5. ventral kam, 6. spole Konturfjädrar kallas de större fjädrarna som har en kraftig spole. De har också fanstrålar som har bistrålar med hakar. Det är konturfjädrar som sitter på fågelns vingar. Och det är den här typen av fjädrar som projektet i huvudsak syftar till att simulera. Den andra huvudtypen dunfjädrar saknar ofta eller har an klen spole. Dess fanstrålar saknar dessutom hakar på bistrålarna. Dunets huvudsyfte på en fågel är att fungera som ett isolerande lager. Det går i animeringssammanhang ofta bra att använda sig av päls för att få ett dunliknande utseende. Förutom dessa två typer av fjädrar finns det flera mellanting, som till exempelvis borst som är en dunliknande fjäder med kraftig spole. Borsten saknar de flesta fanstrålarna utom ett fåtal antingen poximalt eller distalt på spolen. Oftast sitter denna typ av fjädrar runt ögonen som skydd. I figur 6 går det att se exempel på hur dessa fjädrar kan se ut (9). 3.3. Fjädrar i animerad film Vid produktionen av Stuart Little 2 ställdes Sony Pictures Imageworks inför dilemmat om huruvida man skulle fuska med fjädrarna på fågelkaraktärerna i filmen eller använda sig av kompletta geometrier som fjädrar. Delvis på grund av att filmen filmades i den traditionella bemärkelsen med filmkamera och sedan hade ett flertal animerade karaktärer inlagda efteråt ställdes höga krav på realismen i animationerna. Man ansåg därför att alternativet att måla på fjädrarna med hjälp av texturer och liknande inte var aktuellt. Man behövde dessutom möjligheten att låta fjädrarna interagera med vind och föremål i scenen (2).

Att animera fjädrar och fjäll i Maya 12 Skillnaden mellan hår och fjädrar är att det mänskliga ögat inte kan skilja på enstaka hårstrån såvida man inte tittar på ett specifikt hårstrå. För hår och päls gör det inget om de penetrerar varandra, tillskillnad från fjädrar som är betydligt bredare och tydligt urskiljbara. För att skapa fjäderskrudarna i Stuart Little 2 använde man sig av päls för de allra finaste fjädrarna och lät dem övergå till större geometriska fjädrar där det behövdes. Man använde sig av 3 082 fjädrar och ungefär 70 000 hårstrån till karaktären Margalo. För att definiera en fjäder använde man sig av över hundra parametrar vilka kopplades till lika många gråskaletexturer för modellen. Några av parametrarna var längd, bredd, antalet fanstrålar, spolens kurvatur och hur sprucken den är. På en riktig fågel är fjädrarna placerade i rader som löper ner längs sidan på fågeln förutom på halsen där en stor mängd fjädrar sticker rakt ut. Vid skapandet av fjädersystemet för filmen ansåg man det inte nödvändigt att exakt kopiera sättet fjädrarna var placerade på fågeln utan det räckte med att de täckte modellen. Flygfjädrarna placerades ut separat efteråt. Placeringen av fjädrarna löste man genom att använda sig av en metod som kallas particle repulsion. På ytan placerades lika många partiklar/punkter som fjädrar som skulle placeras ut. Partiklarna stöter ifrån varandra så att det sker en jämn fördelning av partiklarna över ytan. I avsnitt 6.1 finns en djupare beskrivning av en optimerad variant av metoden. Nackdelarna med metoden var för det första att den var utvecklad för implicita ytor och modellerna av karaktärerna i filmen bestod av flera NURBS ytor som sattes samman. Man blev då tvungen att göra om delar av metoden för att klara av sammansatta NURBS ytor. Den andra nackdelen vara att man endast fick ut en likformig fördelning av fjädrarna på ytan. Vilket gjorde att algoritmen fick anpassa något. Particle repulsion användes endast till utplaceringen av fjädrarna och inte hårstrån. Problemet med att fjädrarna penetrerar varandra eller modellens hud blev extra tydligt på karaktären Falcon vars fjäderskrud hade en varierande teckning vilket gjorde penetration extra synbar. Margalo som hade samma färg på fjädrarna över stora delar av kroppen var det inte ett lika stort problem med. Precis som med päls utnyttjade man en hundratals nyckelkurvor som placerades ut på modellen. Sedan interpolerades nya mellan nyckelkurvorna så att tusentals kurvor kunde skapas automatiskt. Dessa kurvor motsvarade fjädrarnas spole. Problemet var att det på vissa ställen penetrerade fjädrarna ytan på modellen när modellen rörde på sig. I figur 9 illustreras i ett tvärsnitt hur penetration uppstår när hänsyn endast tas till nyckelkurvornas orientering och kurvatur i bakgrunden syns objektet innan det ändrat form på grund av rörelse. Lösningen blev att man även använde sig av information om kurvans höjd ovanför ytan den var fäst på, se figur 10.

Att animera fjädrar och fjäll i Maya 13 Figur 9. Även om kurvornas lutning följer med ytans förändring sker penetration. Figur 10. Varje punkt i kurvan hålls på konstant avstånd ovanför ytan. Nu följde fjädrarna med hudens rörelse utan att penetrera den och låg på konstant avstånd från en punkt på ytan. Men fjädrarna penetrerade fortfarande varandra och de vred sig konstigt, till exempelvis på fågelns hals när den vred på huvudet. Den streckade fjädern i Figur 11 visar en fjäder som vridit sig på ett felaktigt sätt relativt resten av gruppen. Kontrollpunkt Figur 11. Oönskad vridning av fjädern. Figur 12. Fanens geometri beskrivs med hjälp av kontrollpunkter Man byggde då vidare på metoden att hålla reda på spolkurvans höjd över ytan till fjäderns kontrollpunkter. Fjäderns kontrollpunkter är de punkter på fjädern som beskriver geometrin på fanen se figur 12. Nu låste man inte avståndet till ytan på en punkt till punkt basis som i fallet med spolkurvan. Istället såg man till att avståndet mellan kontrollpunkterna och ytan hölls konstant. Man blev då av med problemet att fjädrarna kunde vrida sig ut från ytan och samtidigt minimerade man även mängden penetration fjädrarna emellan till en acceptabel nivå (2). Inför filmen kammades varje fågel av en grafiker, han la för hand varje fjäder till rätta. Efter att detta gjorts en gång krävdes det en minimal insats av kamning inför varje scen. För kamningen fanns det verktyg som kunde vrida eller ändra riktning på enstaka fjädrar samt öka/minska böjningen.

Att animera fjädrar och fjäll i Maya 14 Till Maya finns det en populär plugin skapad av Joe Alter (10) som kallas för Shave and a haircut för animering av hår och päls. Shave and a haircut använder sig av nyckelkurvor för kamning av pälsen/frisyren. Den är en ofta använd plugin av animationsbyråer som inte har behov/möjlighet till en egen lösning och det är samma användare som utgör målgruppen för det här fjäderprojektet, eftersom det inte finns någon motsvarande lösning för fjädrar. 4. Fysikmotorn Utvecklingen av fysikmotorer drivs framåt av spelindustrin som vill ha mer realistiska spel. Ett sätt att uppnå det är att låta objekten i spelet interagera med varandra på ett fysikaliskt korrekt sätt. Låt säga att man skjuter på en plåtburk eller att en massa stockar rullar ner för en sluttning. Det går att programmera så att burken till exempelvis flyger upp i luften när den blir träffad, eller ge varje stock ett rörelsemönster att följa som ser realistiskt ut. Nackdelen är att burken flyger likadant oavsett var den blir träffad och stockarna rullar på samma vid även om spelaren står i vägen för dem. En fysik motor har i huvudsak tre uppgifter (11). Upptäcka kollisioner Lösa restriktioner som till exempel Newtons lagar och leder Uppdatera systemet genom att beräkna systemets nya tillstånd 4.1. Kollisionsdetektionen För att veta huruvida två objekt rör vid varandra och därmed påverkar varandra behöver fysikmotorn utföra en stor mängd beräkningar för varje objekt. Kollisionsdetektionen är den del av fysikmotorn som tar mest beräkningskraft, ofta omkring 90 % av beräkningstiden. I värsta fall blir det (n-1)n/2 kollisionspar för test av penetration/intersektion där n är antalet objekt. Det blir snabbt en stor mängd tester. För 2 500 fjädrar behövs 3 123 750 tester per systemuppdatering om varje fjäder endast består av ett kollisionsobjekt. Det finns ett flertal tekniker för att minska antalet beräkningar. Alla teknikerna bygger på samma grundidé, nämligen att genom flera steg minska antalet möjliga kollisionspar genom att gå från mindre till mer komplexa och beräkningstunga metoder. Ett första steg är ofta att ta reda på vilka kollisionspar som är möjliga, en vanlig metod för det är att göra en spatialuppdelning av kollisionsrymden. Det finns flera olika sätt att göra detta på bland annat Optimized Spatial Hashing som här används vid utplaceringen av fjädrarna och för att avgöra om en fjäder ligger inom påverkningsbart avstånd från kamningsverktygen.

Att animera fjädrar och fjäll i Maya 15 Sedan fortsätter man med mer komplicerade tester som till exempelvis att testa om ett objekts alla vertexar (cirklarna i figur 13) ligger på framsidan av de plan som det andra objektets polygoner spänner upp. I fallet beskrivet i figur 13 har det alltså inte skett någon kollision. Figur 13. Kollisionstest mellan två kuber. I varje steg utesluts allt fler kollisionspar tills man kommer till sista steget. Då kontrolleras om de verkligen har kolliderat eller ej. Andra sätt att minska antalet kollisionspar är att definiera flera kollisionsgrupper där kollisioner endast kan ske mellan objekt i samma grupp. Eller att tillfälligt inaktivera kollisioner för vissa objekt under ett begränsat antal tidssteg (11). 4.2. Restriktioner Fysikmotorn behöver lösa flera olika sorters restriktioner för hur krafterna verkar på objekten. De mest grundläggande är Newtons lagar vilka bland annat påverkar objektens acceleration och kollisionskrafterna. Sedan finns restriktioner som till exempelvis leder, fjädringar och friktion. Här nedan visas i figur 14 exempel på några olika leder. Förutom att begränsa objektets rörelseomfång kan lederna även innehålla en fjädringseffekt vilket syns i form av den grå gummidelen i leden i figur 14. Denna led föreställer den typ av led vilken fungerar som fågelfjädrarnas fjädersäck och -penna (9).

Att animera fjädrar och fjäll i Maya 16 Figur 14. Olika typer av leder i fysikmotorn. 4.3. Uppdatering av systemet Till skillnad från i verkligheten så sker inte en kontinuerlig rörelse av objekten utan simuleringen sker i diskreta tidssteg. Givet ett objekts tillstånd såsom positionen och krafter som verkar på objektet kan dess tillstånd vid en annan tidpunkt approximeras. Approximationen sker genom integration av ett antal differentialekvationer som beskriver objektens rörelser. Det fins flera olika numeriska metoder för lösningen med olika prestanda och precision (11). 4.4. Ageie PhysX Fysikmotorn som används i det här arbetet är Agiea PhysX vilket är en kommersiell fysikmotor med möjlighet till hårdvaruacceleration via en PPU (Physics Processor Unit) ansluten till PCI-porten. Versionen som har använts är 2.6.2. Den har används för fysik simulering av fjädrarna i form av stela objekt och leder. Beroende på hur noggrann approximation av fjädern som önskades används olika många kollisionsprimitiver och leder. Se figur 15 för de fyra första detaljnivåerna. De blåa/mörkare delarna är kollisionsobjekt och de gula/ljusa leder. Ageia PhysX består av ett C++ API med vilket man skapar en scen i vilken sedan initierar de objekt man vill simulera. Scenen existerar och exekveras separat från resten av lösningen i det här fallet separat från Maya. Kommunikationen mellan scenen/fysikmotorn och Maya sker i tre steg. Först anropas motorn för att instruera den om hur lång tid som ska simuleras och sedan ber man att objekten i scenen uppdateras med deras nya tillstånd. Förfrågan kan ske antingen genom att låsa exekveringen av programmet tills resultatet är färdigberäknat eller genom att loopa runt förfrågningsraden tills ett resultat returneras. I loopen kan man göra andra beräkningar medans resultat beräknas. Slutligen när objektens tillstånd uppdaterats går det att hämta information om aktuellt tillstånd. Om man väljer att utnyttja

Att animera fjädrar och fjäll i Maya 17 hårdvaruacceleration är den begränsad till 4 000 primitiver i scenen om alla steg i kollsionsdetektionen ska acceleras och 64 000 primitiver om första steget inte accelereras (9). Detta innebär att för simuleringen av fjädrarna kan inte första steget accelereras eftersom vår modell kan innehålla över 2 500 fjädrar med minst två leder och tre objekt. Figur 15. Fyra olika mycket detaljerade fjäderobjekt i fysikmotorn. 5. Maya Maya är en modellerings- och animeringsmiljö för 3D utvecklat av Alias Wavefront. På marknaden finns idag en mängd verktyg och program för att producera 3D animationer. Den snabba utvecklingen inom animeringsbranschen innebär att det snabbt och ofta kommer ut nya program och uppdateringar av befintliga verktyg. Utvecklarna på Alias Wavefront insåg att de omöjligen skulle kunna tillgodose varje användare med alla funktionaliteter och förmågor som de skulle kunna tänkas vilja ha. De satsade istället på att göra det möjligt för användaren att anpassa och utveckla paketet som denne ville. Både genom att ändra användargränssnittet och genom att lägga till nya funktioner.

Att animera fjädrar och fjäll i Maya 18 Den stora skillnaden med Maya gemfört med andra 3D-program är att man valt att i stället för att scenen representerar en mängd objekt så representerar scenen i Maya istället ett nätverk med noder som kallas för dependecygrafen. Ett exempel på hur dependecygrafen kan se ut ses i figur 15. Dessa noder har olika funktioner såsom till exempelvis en formförändring eller position och tillsammans utgör noderna objekten i scenen. 5.1. Mayas gränssnitt Vad som händer när användaren interagerar med Mayas användargränssnitt är att ett MEL kommando exekveras. MEL är Mayas script språk. Användargränssnittet är egentligen bara en visualisering av de kommandon som används för att styra Maya. De flesta kommandona påverkar dependencygrafen vilken kan ses som själva scenen och innehåller all data som behövs för att beskriva 3D-världen såsom objekt, animeringar, dynamik, ljus och så vidare. Användargränssnittet är helt anpassningsbar. Det är till och med möjligt att jobba med endast en kommandoprompt som användargränssnitt. 5.2. Dependencygrafen och Mayanoder För att kunna utnyttja Maya fullt ut behöver användaren förstå den underliggande metodiken och strukturen i Maya. För en utvecklare är detta en nödvändighet. Istället för att använda det traditionella modulera angreppssättet vid utvecklingen av Maya har man utnyttjat ett perspektiv där man kollar på flödet av data genom en serie operationer. Du kan till exempel stoppa in en 3D-modell i ena sidan och få ut en mängd pixlar på andra. Data som kommer ut behöver alltså inte vara av samma typ som stoppades in. Mayas kärna är implementerad enligt detta paradigm i form av dependecygrafen. Paradigmet är dock modifierat enligt en push-pull modell. Byggstenarna i grafen är en mängd noder som kopplas samman. Varje nod har ett antal in och ut parametrar och varje nod har dessutom en mindre deluppgift i hela grafen. En transformationsnod har till exempel i uppgift att multiplicera objektet med en transformationsmatris som beräknas utifrån nodens invariabler som rotation, förflyttning med mera. För att göra en mer komplicerad förändring av indata behövs ett nätverk av noder. All funktionalitet i som modellering, animation, texturering och dynamik i Maya skapas med hjälp av sådana nätverk av noder. Redan efter ett fåtal operationer har antalet noder i dependecygrafen i figur 16 blivit påfallande många (13).

Att animera fjädrar och fjäll i Maya 19 Figur 16. Dependecygrafen. Vill man lägga ytterligare funktionalitet till Maya så skapas en ny typ av nod och ett MEL kommando för att koppla upp noden i grafen. Sedan kan gränssnittet byggas ut så att det inkluderar det nya kommandot. På så sätt kan man bygga ut Maya utan att det syns för användaren att funktionen inte var något som följde med Maya från början. 5.2.1. Scenen När man pratar om scenen i 3D-animerings sammanhang menar man modellerna, animeringarna, ljusen, texturerna kamerorna och övrig information som behövs för renderingen. I Maya består scenen av dependencygrafen och det data som lagras internt i varje nod. Traditionellt brukar dock scenen lagras i en databas med objekten. I en sådan databas är lätt att slå upp t.ex. alla ljuskällor. Den dynamiska naturen som följer av dependencygrafens uppbyggnad gör samma uppgift betydligt svårare. Programmeringsinterfacet gör å andra sidan att man som programmerare inte behöver känna till varje detalj runt uppbyggnaden av dependecygrafen men en övergripande förståelse för hur scenen lagras gör det lättare att skapa effektiva tillämpningar för Maya. 5.2.2. Dataflödet Dataflödet i Maya går till så att det för varje attribut i en nod finns det en flagga som säger om värdet är aktuellt eller inte. Dessutom innehåller varje nod en tabell över vilka inattribut som påverkar vilka utattribut. Så fort ett utattribut anses inaktuellt undersöker Maya vilka noder som är anslutna till attributet och noterar att även de till det inaktuella utatributet anslutna inattributen är inaktuella. På så sätt sprids informationen vidare genom grafen, och då vet Maya vilka attribut som behöver räknas om. Men värdet beräknas inte om förrän det aktuella värdet efterfrågats. Dataflödet i Maya är välbeskrivet av D. Gould i (13). I figur 17 syns hur dataflödet ser ut vida skapandet av en kub. PolyCube1 skickar vidare data som behövs för att noden pcubeshape1 ska kunna skapa en mesh i form av en kub. Meshen skickas sedan vidare till initialshadinggroup som skuggar och färglägger kuben så att den syns vid rendering och i viewporten.

Att animera fjädrar och fjäll i Maya 20 Figur 17. Dataflödet mellan noder i Maya vissualiserat i dependecygrafen. 5.2.3 Noden Varje nod består av en uppsättning in- och utvärden. Egenskaperna som dessa värden representerar refereras till som nodens attribut. Till exempel vis håller attributet rotatex rotationsmängden runt X-axeln. Den enkla noden i figur 18 har två attribut, input och output. Även om det inte visualiseras i Maya har alla noder också en funktion compute(). Funktionen Compute() har i uppdrag att utifrån en eller fler inattribut beräkna en eller flera utattribut. enkelnod input output compute() Figur 18. En Enkelnod. Tänk dig den nod som beskrivs i figur 19. Den har två attribut cirkelradie och cirkelarea. Båda attributen håller en double, det finns inget som indikerar om de är input- eller outputattribut. Men eftersom en cirkels area är beroende av radien och vice versa så kan man mistänka att de är beroende på varandra. Skulle radien förändras är inte längre det lagrade värdet i areaattributet aktuellt. Skulle en annan nod ansluten till area attributet fråga efter aktuellt värde så behöver det beräknas via computefunktionen.

Att animera fjädrar och fjäll i Maya 21 cirkel cirkelradie cirkelarea compute() Figur 19. Cirkelnod. En nods attribut kan vara en primitiv datatyp såsom integer, string, double, bolean också vidare eller så kan det vara något mer komplicerad data som till exempelvis en mesh eller beizerkurva. Det kan också vara ett enstaka värde eller en serie av värden. Vilka attribut som påverkar vilka andra definieras när noden skapas, likaså om man läsa, skriva till eller både och från attributet. 5.3. Quaternioner i Maya Quaternioner är ett kraftfullt sätt att representera rotationer på ett mer kompakt sätt. I Maya APIn finns det en klass som hanterar quaternioner inklusive sammanslagning av och interpolation mellan två quaternioner. Det är också möjligt att ange ett objekts orientering med hjälp av en quaternion. Quaternioner är hyperkomplexa tal och har ett 4 dimensionellt vektorrum. En quaternion anges här på formen eller q = (q 0, w), där w = (q 1,,q 2, q 3 ) q = q 0 + iq 1 + jq 2 + kq 3 Här är q 0 skalärdelen och w är vektordelen. Talbaserna i, j, k är imaginära och för dem gäller följande samband i 2 = j 2 = k 2 = ijk = -1 ij = -ji = k jk = -kj = i ik = -ki = j Den viktigaste tillämpningen av quaternioner på senare tid är att representera rotationer i 3 dimensioner. Den konventionella metoden att beskriva rotationen med en serie eulervinklar. Dessa eulervinklar är rotations mängden runt tre oberoende axlar. Enligt en välkänd eulersats är det möjligt att genomföra vilken rotation som helst av en kropp runt en punkt som en enda rotation runt en axel som passerar genom punkten. Denna rotation går att beskriva i form av en quaternion där vektordelen är axeln som rotationen sker runt och skalären är mängden av rotation.

Att animera fjädrar och fjäll i Maya 22 Det beror främst på tre egenskaper att quaternioner ofta är att föredra framför eulervinklar för att representera rotationer. Första orsaken är quaternioner är kompaktare och bara består av 4 element istället för 9. Det är bland annat detta som gör att antalet beräkningar minskar till 60 % när man slår ihop två rotationer med hjälp av en multiplikation. Men framförallt så slipper man oroa sig för gimbal-locks. Gimbal-locks är ett känt fenomen som innebär att man kan förlora en eller flera frihetsgrader vid användandet av eulervinklar på grund av singularitetsproblem. Ytterligare en födel är möjligheten att interpolera mellan två quaternioner och då ta den kortaste vägen. Se Mukundas arbete (14) för formler och härledningar till hur en quaternion beräknas samt används. 6. Användarutvärderingar Utvärderingarna har gjorts vid tre tillfällen. Dels via användarintervjuer och observationen av hur verktyget Shave and a haircut användes professionellt för att skapa päls på djur genomfördes på animeringsbyrån Fido i Stockholm. Och dels via ett enkelt användartest av kamningsverktygen som genomfördes på Craft Animations kontor i Göteborg. Syftet med användarutvärderingarna var dels att ta reda på vilka behov som fjäderlösningen syftade till att uppfylla och dels vilken interaktionsform som passade att använda sig av. 6.1. Användarintervju Det var framförallt tre texturerare på Fido som intervjuades. Det som frågades om var bland annat vilka förväntningar de hade på den här typen av verktyg och vad det absolut var tvunget att klara av. Det var också intressant att få reda på vilka lösningar som idag används till att animera päls och vad de tyckte om dessa. Andra frågor som dök upp angick hur de skulle kunna tänka sig interagera med ett system för kamning av fjädrar. Besöket pågick under en halv dag. De hade inga preferenser för hur de skulle kunna tänka sig att interaktionen skulle gå till men tyckte att resonemanget om att kamma fjädrarna i realtid för att man direkt skulle se resultatet lät vettigt. Texturerarna tyckte vidare att det var nödvändigt att kunna lägga till både slumpmässig och kontrollerad variation i fjädrarnas utseende så inte alla fjädrar såg likadana ut. De föreslog ett flertal tekniker så som bland annat texturering och shape blending. Shape blending innebar att man blandar två former/geometrier och får ut en tredje. Det är då möjligt att ställa in vilken av original geometrierna den nya skulle likna mest och hur mycket mer den skulle likna den.

Att animera fjädrar och fjäll i Maya 23 Ett väl använt verktyg för animering av päls berättade de var Joe Alters (10) Shave and a haircut. De var tydligen väldigt nöjda med kraften och effektiviteten i detta verktyg. 6.2. Observation vid användandet av Shave and a haircut Vid nästa besök på Fido visade en av texturerarna hur de jobbade med animation av päls. Verktyget de använde sig av var Shave and a haircut och det utnyttjar nyckelkurvor vilka beskrev hårstrån på djurets kropp. På varje djur använde man sig av 50-100 sådana nyckelkurvor och sedan kunde flera tusen hårstrån genereras. Man använde sig av lager på lager med olika sorters hår. Till varje lager hade man en uppsättning med texturer som beskrev saker som tätheten, färgen och tjockleken på håren. Han visade på problemen som kunde uppstå eftersom interpolationen av nyckelkurvorna skedde i världskoordinater istället för i förhållande till ytans normal. Men visade också fördelarna om man till exempel vill skapa en frisyr på en människa med mycket hårprodukter typ stubb eller en mangafrisyr. En annan sak som han visade upp var hur man jobbar med mappning av texturer och han förklarade att mappningen av texturer inte var något som ett nytt system behövde sköta. Det var snarare så att systemet inte fick sköta det eftersom det var något textureraren ville ha full kontroll över och var van vid att göra för hand. 6.3. Användartest Något avancerat användartest på första versionen av verktyg behövde aldrig göras. Orsaken var att när kamningsverktygen var klara gjordes en väldigt preliminärt test av verktygen av två medarbetare på Craft Animations. Testet gick ut på att kamma en plan yta samt en sfär med verktygen och det insågs direkt att det inte alls var lämpligt att använda sig av den här formen av kamningsverktyg. Beslutet blev då att istället satsa på den beprövade metoden med nyckelkurvor som på ett eller annat sätt återfinns i alla lösningar för hår, päls och fjäder animation som stöts på under arbetet med projektet. Den nya metoden att kontrollera fjädrarna har dock inte hunnits med att utvärdera i någon större grad men är betydligt effektivare och exaktare än den första metoden. 7. Interaktionsform för kamning Vid kamningen av fjädrar ansågs det finnas ett intresse av att påverka fjädrarnas orientering och kurvatur i realtid. Både på enskilda fjädrar eller på en mängd av fjädrar. Detta ansågs intressant dels för att behålla företagets nisch med inriktning på animeringsverktyg i realtid, men främst på grund av antagandet att om användaren hela tiden kan se det färdiga resultatet av kamningen så går det både snabbare och

Att animera fjädrar och fjäll i Maya 24 smidigare att uppnå önskat resultat eftersom man då skulle slippa gå via renderings- /simuleringssteget. För det system som byggts under projektet gäller följande angående fjäderns koordinatsystem. Det är uppbyggt på så sätt att Y-axeln rör sig distalt från fjäderpennan upp mot fjäderns spets, X-axeln går i längs med fanstrålarna posteriort och Z-axeln rör sig ventralt från fjädern. Rotationspunkten ligger i spetsen på fjäderpennan. Koordinatsystemet visas i figur 20. y z Figur 20. Koordinatsystemet som använts för fjädrarna i projektet. Det är endast nödvändigt att rotera i två axlar eftersom det endast är i specialfall man skulle vilja vrida fjädern på ett sådant sätt att den inte låg med undersidan/ventralakammen längs med den ytan den är fäst på. När fjäderns orientering sätts roteras den alltid först runt Y-axeln och sedan runt X-axeln oavsett i vilken ordning användaren anger dem. Man låter inte systemet vrida fjädern runt fjäderns z-axel. Vid produktionen av Stuart Little 2 löste man istället problemet med fjädrar som vred sig ut i från ytan genom låsning av avståndet mellan fjäderns kontrollpunkter och ytan. Hur den oönskade vridningen ser ut beskrivs i figur 12. Tre olika orienteringslägen ansåg behövas för att bestämma hur fjäderns orientering förändras. De tre lägen beskriv i figur 21 och är: x Lutning, vinkeln fjädern är fäst i ytan med ändras. Riktning, förändring av vilket håll fjädern ska lutas. Både lutning och riktning.

Att animera fjädrar och fjäll i Maya 25 Figur 21. De tre orienteringslägena är från vänster till höger,endast lutning, endast riktning samt både lutning och riktning. 7.1. Direktmanipulering Första ansatsen till att ta fram ett verktyg för kamning av fjäderskruden var att använda direktmanipulation genom att låta någon form av verktyg påverka en eller flera fjädrar i viewporten. Viewporten är det fönster i Maya där man ser en förenklad 3D-representation av scenen. Det fanns två huvudsakliga orsaker till att det var ett naturligt val. Den första orsaken var att ur ett rent användarperspektiv anses direktmanipulation ofta underlätta inlärningen och kan ge en bättre förståelse till hur systemet fungerar (14). Den andra orsaken var önskan att i realtid kunna se hur fjäderskruden förändrade sig under kamningen och då kändes direktmanipulation som ett naturligt val. En brainstorming över vilka ett egenskaper direktmanipulerande verktyg skulle kunna tänkas ha resulterade i följande lista. Frihetsgrader o 3 dimensioners frihet, kan röra sig i hela scenen. o 2 dimensioners frihet, följer ytan som kammas. Orienteringslägen o Lutning, vinkeln fjädern är fäst i ytan med ändras. o Riktning, förändring av vilket håll fjädern ska lutas. o Både lutning och riktning. Mängd av påverkan o Lutar/roterar fjädern mer och mer Inställbar hastighet Förutbestämd hastighet o Lutar/roterar fjädern till ett bestämt läge Gradvis Hela vägen på en gång

Att animera fjädrar och fjäll i Maya 26 Som ett första experimentellt kamningsverktyg användes ett delvis transparent sfärliknande objekt. Objektet kunde föras över ytan som skulle kammas. Och ju närmare centrum av sfären fjädern befann sig desto större påverkan utsattes den för enligt formeln:, där 0 < d < r Avståndet från sfärens centrum till fjädern är lika med d. Sfärens radie är lika med r. Genom att öka sfärens avstånd från ytan minskade man mängden påverkan av fjädrarna. Ungefär som att minska trycket när man stryker någonting. Sfären kunde påverka fjädrarna i ett av de tre lägena och beroende på valt orienteringsläge ändrades sfärens utseende. På så vis kunde användaren se på verktyget hur och vilka fjädrar den påverkar. Hur dessa experimentella kamningsverktyg såg ut syns i figur 22. Figur 22. Första verktyget roterar riktningen på fjädern, andra verktyget ändrar fjäderns lutning och tredje verktyget är en kombination av de båda första. Både i funktion och i utseende. Efter ett tags användande insågs det att ytterligare ett orienteringsläge behövdes. Med ett måldefinierat kamningsverktyg skulle användaren kunna definiera fjäderns orientering och kurvatur. När användaren sedan förde det måldefinierade verktyget över ytan så orienteras fjädrarna mot den av användaren definierade orienteringen. Användaren definierar orienteringen genom att vrida verktyget i önskat läge. Med detta verktyg skulle det även vara möjligt att rotera fjädern runt sin egen axel. Se figur 23. På det måldefinierade verktyget är en pil målad så att användaren kan se hur fjädern kommer att orientera sig.

Att animera fjädrar och fjäll i Maya 27 Figur 23. Måldefinerat kamningsverktyg. Verktygens utseende var endast tänkta som tillfälliga lösningar för att hålla isär dem, mer intuitiva utseenden behövdes om verktygen skulle användas vidare. Bland annat var det tvetydigt vad pilen på det måldefinierade verktyget representerade, var det vilket håll under- eller översidan av fjädern peka. Eller var det riktningen från fjäderpenna till spets. En alternativ och betydligt tydligare lösning skulle vara att ha en fjäder i som beskriver hur de kammade fjädrarna kommer att se ut inne i sfären. För att ställa in orienteringen skulle man istället använda sig av reglage och endast fjädern skulle vrida på sig och inte hela sfären. Även ha ett reglage för mängden böjning skulle implementeras och även denna böjning skulle representeras av fjädern i verktyget. En prototyp av verktyget syns i figur 24. Figur 24. Prototyp av ett tydligare måldefinerat kamningsverktyg.

Att animera fjädrar och fjäll i Maya 28 7.2. Nyckelfjädrar En annan möjlighet är att bygga på samma metod som de flesta pälslösningarna använder och låta användaren definiera upp ett antal nyckelfjädrar och sedan interpolera mellan dessa. Nackdelen är då att man inte ser resultatet förrän man renderar scenen. Det finns även en risk för antingen en väldigt homogen fjäderskrud eller att väldigt många nyckelfjädrar behöver skapas. För varje nyckelfjäder använder man i så fall Mayas inbyggda verktyg för att ange orienteringen och ett reglage för att ange mängden böjning. Det är den relativa orienteringen av fjädern gentemot ytans normal som ska interpoleras. På så sätt undviker man att fjädrarna hamnar i ett läge de pekar in i ytan istället för ut ifrån. Med Joe Alters päls och hår plugin interpoleras hårstråna istället i världskoordinater vilket kan orsaka problem om inte tillräckligt många nyckelkurvor används. 7.3. Texturering av fjäderutseende och orientering I Shave and a haircut använder man sig av mappade texturer för att definiera många av hårstrånas egenskaper hos hårstrån som till exempelvis längd, tjocklek, täthet, opacitet och böjning. På samma sätt är det meningen att fjädrarnas längd och täthet ska mappas inför utplaceringen av fjädrarna. Även egenskaper för ljuseffekter och skuggning av fjädrarna mappas, den delen av projektet som behandlar de enstaka fjädrarnas texturering är dock inte påbörjad ännu. I användarintervjuerna av erfarna texturera som var vana av att använda sig av päls lösningen i Maya kom det fram att de tyckte att lösningen med texturkartor fungerade bra ypperligt. En möjlighet som särskilt uppskattades var möjligheten att använda funktioner som gradienter och brus i ritprogrammen som användes för redigering och skapandet av texturerna. Fjädrarnas orientering är i form av quaternioner. Och eftersom quaternioner består av fyra tal skulle det vara möjligt att även mappa fjädrarnas orientering i en textur med fyra bytes djup, rött, grönt, blått och alpha. Sedan skulle en separat textureringskarta behövas för att kunna mappa fjädrarnas kurvatur. Med hjälp av 3d-paint verktyget i Maya kan man rita/ändra texturen på objekten direkt i Maya och se resultatet direkt i viewporten. Det blir då möjligt att ändra fjädrarnas orientering och böjning i realtid direkt i Maya. 7.4 Lösningen på interaktionen för orientering och böjning av fjädrar När testanvändarna provade de första alternativen till kamningsverktyg visade det sig att det antingen tog för lång tid att få fjädrarna att rotera ett halvt varv eller så blev det inte tillräckligt noggrant och verktygen kändes klumpiga. Men ett ännu större

Att animera fjädrar och fjäll i Maya 29 problem var att det var ganska svårt att förflytta kamningsverktygen i 3 dimensioner vilket innebar att man skulle vara tvungen att tvinga sfären att följa objektets yta och bara kontrollera den med 2 frihetsgrader. Nackdelen blev då att man förlorade möjligheten att påverka kraftens styrka genom att hålla sfären lite högre ovanför objektetsyta. Sammanfattningsvis kan man säga att det ansågs klumpigt och ineffektivt att använda den här typen av direktmanipulation. Även om alla identifierade egenskapers påverkan ännu inte undersökts lämnades direktmanipulationsalternativet. Det är möjligt att det gått att få till en smidig lösning men de tidigare intervjuade texturerarna tyckte att den befintliga lösningen för modellering av päls med nyckelkurvor och texturer fungerade utmärkt så istället koncentrerades arbetet på hur de kunde anpassas och eventuellt förbättras. Genom att kombinera de två alternativen av nyckelfjädrar och texturering kan man först använda nyckelfjädrarna för att snabbt få en fjäderskrud som man sedan kan varieras med hjälp av textureringen. Det går även att jobba med endast det ena alternativet om man skulle vilja. Man börjar alltså med att först skapa nyckelfjädrarna sedan kör man ett MEL kommando med en mappad textur över tätheten. Här används en placeringsalgoritmen för att bestämma antalet fjädrar och deras positioner och de nya fjädrarna skapas med hjälp av interpolation mellan nyckelfjädrarna. MELkommandot skapar sedan physxnoden och kopplar de skapade fjädrarna till noden tillsammans med eventuella mappade texturer som innehåller information om variationer i orientering och böjning. Med hjälp av textureringen blir det enkelt för användaren att lägga till brus och slumpmässighet i fjädrarnas utseende och orientering för att kunna till exempel kunna skapa en mer ovårdad fjäderskrud. 8. Placering av fjädrar Innan några fjädrar kan skapas måste man veta var de ska placeras. Detta gäller särskilt när fjädrarnas skapas genom interpolation av nyckelfjädrar. Några huvudkrav fanns för utplaceringen av fjädrarna. Variation i avståndet mellan fjädrarna skall vara möjlig Tätheten ska variera över ytan och kunna definieras Två fjädrar fick inte hamna på samma ställe eller alldeles bredvid Möjlighet att återskapa en tidigare fördelning För att användaren ska slippa göra om allt jobb med kamningen av fjädrarna även om denne skulle upptäcka att fjädrarna sitter för glest/tätt på ett område och vill ändra

Att animera fjädrar och fjäll i Maya 30 detta måste det vara möjligt att ändra tätheten i efterhand utan att kamningen går förlorad. I naturen växer fjädrarna i rader, med en liten variation i placeringen av varje fjäder. Att komma fram till hur alla rader skulle ligga oavsett om det skedde automatiskt eller manuellt skulle kräva alldeles för mycket tid. Det är dessutom osannolikt att resultat skulle bli särskilt bra. Dock var det önskvärt att få en variation av fjädrarnas avstånd till varandra för att få ett mindre konstgjort utseende. Perfekt symmetri är ju ytterst ovanligt i naturen. På en fågel varierar både fjädrarnas storlek och täthet beroende på var på kroppen de sitter. Båda ska gå att mappa med hjälp av en textur. Utplaceringsalgoritmen ska placera fjädrarna glesare där tätheten är lägre på fågeln och tvärtom där den är hög. I den mappade texturen motsvarar ett vitt område maximalt täthet och ju mörkare områdena är desto glesare ska fjädrarna sitta. På samma sätt är det när storleksskalan på fjädrarna texturmappas. Fjädrarna får inte penetrera vandra och får därför inte placeras i samma punkt eller för nära varandra. Då kan problem uppstå i form av oscillationer av fjädrarnas rörelse. I de fall att användaren skulle vilja skapa två modeller som ser exakt likadana ut behöver utplaceringen av fjädrarna kunna återskapas. Valet stod mellan tre olika tekniker, kollisionsdetektion av cirklar, Fast Surface Particle Repulsion, eller någon form av sannolikhetsfördelning. Som beslutsunderlag av vilken teknik som skulle användas jämfördes teknikerna med listan av krav som ställdes på den slutgiltiga lösningen. Dessutom var det önskvärt att det gick så snabbt som möjligt att få fram placeringarna eftersom system ska fungera i realtid. 8.1. Fast Surface Particle Repulsion I artiklar om fjäder, päls- och hårlösningar förekommer ofta en teknik som kallas Surface Particle Repulsion eller kort PR [källor som använder PR]. Heckberts (15) variant Surface Particle Repulsion är en relativt snabb och effektiv lösning med möjlighet att på en 100 MHz grafikdator simulera 10 000 partiklar med en iterationsoch uppritningstid på en sekund. Fast surface particle repulsion algoritmen består av tre steg. Varje partikel har en rörelse energi och hastighet. Hastigheten beräknas parvis mellan alla partiklar med den Gaussiska formeln e -r²/2σ². I formeln är r det euklidiska avståndet mellan de två partiklarna och σ är repulsionsradien, det vill säga ett styrkemått på hur nära de får komma varandra. Fördelen med den Gaussiska formeln är att den har ett maxvärde om r = 0 vilket inte är fallet om man använder den fysikaliska formeln -1/r². En annan fördel är att den avtar väldigt snabbt. Redan med ett avstånd på 3σ är värdet endast 1% av det maximala, partiklar längre bort än så kan man i praktiken bortse från.

Att animera fjädrar och fjäll i Maya 31 För att snabba upp det hela jämfört med den tidigare varianten av surface particle repulsion beräknas repulsionskraften inte för alla par utan endast de som ligger inom 3σ om noggrannheten är 1 %. Om man ska kunna göra detta måste det vara möjligt att hitta alla partiklar som ligger inom en viss radie från partikeln. Detta sker genom att lägga alla partiklar i ett 3 dimensionellt rutmönster (grid) av kuber och varje kub får en hink (bucket) kopplad till sig. I denna hink läggs alla partiklar som befinner sig i kuben. I figur 25 visas hur ett 2 dimensionellt rutnät med partiklar skulle kunna se ut. Här har en förfrågan ställts efter de partiklar som befinner sig inom cirkelns radie. Figur 25. Vill man sedan ha reda på alla partiklar inom avståndet r plockar man upp alla partiklar i hinkarna som är kopplade rutorna inom avståndet r från cirkelns centrum. Efter att partiklarna flyttats enligt summan av deras parvisa energier/hastigheter ligger partiklarna i regel inte längre på ytan och måste därför flyttas in till ytan inför nästa iteration. Varje partikel har full kontroll över sin egen repulsionsradie och kan öka den om inga andra partiklar finns tillräkligt nära för att den ska röra på sig. Den kan också minska radien om för många påverkar den. På så sätt hålls anatalet grannar ganska konstant. Om antalet partiklar inom ett visst delområde är för stort eller för få skapas eller förstörs partiklar i det området för att upprätthålla tätheten även om ytans form förändras. Man kan tyvärr inte använda sig av en varierad täthet med PR men i Stuart Little 2 löste man det genom att modifiera algoritmen något. Utplaceringen av fjädrarna blir trots det stel och onaturlig när avstånden är jämnt fördelade.

Att animera fjädrar och fjäll i Maya 32 8.2. Placering via sannolikhetsfördelning Fördelarna med att använda sig av en sannolikhetsfördelning är dels att komplexiteten är linjär med tätheten som genereras och dels att det är enkelt att implementera den. För att kunna få en varierbar täthet kan man använda sig av en teknik som kallas uttunning. I det här fallet går uttunningen till så att ett antal fjäderpositioner genereras med ytans största möjliga täthet. För varje position genereras ett slumptal och om slumptalet är större än kvoten mellan tätheten i den positionen och maximal täthet så tas den bort. Genom att genera fjäderpositionerna i normaliserade UV koordinater, det vill säga (X, Y) där 0<= X <=1 och 0<= X <=1 går det att hämta tätheten i aktuellt koordinat från en UV mappad textur. I figur 26 och 27 hämtas tätheten från en sådan textur vilken även visas som referens i bakgrunden. Det finns många olika sannolikhetsfördelningar att välja mellan men en sannolikhetsfördelning som brukar användas för att simulera träds positioner i en skog är 2-dimensionell poissonfördelning. Det man vill uppnå med det valet av fördelning är att sannolikheten för att ett träd existerar i en punkt är ökar med avståndet från föregående träd. Samma egenskap är önskvärd hos placeringen av fjädrarna. En 2-dimensionell poissonfördelning i form av en cirkel med radien R centrerad på origo skapas genom att låta en 1-dimensionell poissonfördelning rotera runt origo. Algoritmen för att skapa en 2 dimensionell poissonfördelning är: 1. X= 0, i = 0 2. Generera slumtalet U med likformig fördelning mellan 1 och 0 3. Låt X i = X i-1-1/theta max log U 1. om I > theta max sluta 4. Låt R i = sqrt((x 1, X 2,, X i )/pi) 5. Generera slumtalet U med likformig fördelning mellan 1 och 0 6. Låt punkten p i ha polärkoordinat (R i,2piu i ) 7. i = i +1 8. Gå till 2 Och uttunningen sker med hjälp av nedanstående algoritm. 1. i = 0, j = 1 2. så länge som i++ < N 1. U = likformigt fördelade slumptal mellan 0 och 1 2. Låt theta p vara tätheten i punkten p i 3. Om theta/theta p >= U låt punkten s j = p i och j = j + 1

Att animera fjädrar och fjäll i Maya 33 De punkter som fjädrarna ska placeras på är s i, där i = 1,, j. Även om man inte kan få punkter som ligger på samma ställe så hamnar de ibland för tätt för att det ska gå att använda för att få en tillräckligt jämn fågelskrud. Resultatet var dock bättre än för en likformig fördelning bestående av N stycken punkter med koordinat (X i,y i ). Där X i och Y i likformigt fördelade slumptal mellan 0 och 1 och i = 1,.., N. Genom att använda samma frö för att starta slumptalsgenereringen kan man generera samma fördelning igen. 8.3. Kollisionsdetektion Med tekniken particel repulsion låter man alla partiklar påverka varandra med en repellerande kraft. Ett alternativ för att få ner antalet partiklar som påverkar varandra är att endast räkna partiklar som ligger tillräckligt nära varandra. De kommer då uppträda som skumgummicirklar som trängs med en radie motsvarande kraftens räckvidd. För fast particel repulsion är skulle skumgummicirkelns radie bli 3σ. I figur 26 och 27 syns skillnaden när skumgummicirkelns radie är σ och σ antingen är 1 eller mindre än 1. Figur 26. Fjäderfördelning med högre täthet där texturen är ljusare. Figur 27. Fjäder fördelning där σ < 1 och kala fläckar uppstått. Om antalet cirklar inte är tillräckligt många eller deras radie för liten för att täcka upp hela ytan undviker man att fjädrar på ett område med samma fjädertäthet ligger jämnt fördelade men problemet blir då att man riskerar kala fläckar. En avvägning mellan hur ojämnt fjädrarna ska ligga och risken för kala fläckar är nödvändig. Användaren har möjlighet att ange hur mycket av ytan som ska täckas upp med hjälp av en variabel σ, där 0< σ <. Om σ = 1 är cirklarnas kraftradie så stor att hela ytan täcks och inga kala fläckar uppstår men man får då istället samma avstånd mellan fjädrarna med samma fjädertäthet. Om σ = 0 så sker ingen repellering alls och man får den oförändrade sannolikhetsfördelningen. Med ett väldigt litet σ

Att animera fjädrar och fjäll i Maya 34 blir cirklarnas kraftradie väldigt liten och fjädrarna måste ligga väldigt nära varandra för att repellera varandra. Risken blir då stor för fjädrar som ligger tät och kala fläckar. Om cirklarna genereras inom en kvadrat med arean 1 så kan fjädertätheten texturmappas med hjälp av en normaliserad UV mappad textur. För att veta cirklarnas radie behöver vi vet värdet på r vilket beror på λ vars värde fås från den UV mappade texturen. För att beräkna cirklarnas radie utnyttjas formeln för kristall packning. Se figur 28. Antalet romber i kvadraten är detsamma som antalet cirklar och dess sammanlagda area är densamma som kvadraten. Cirklarna är packade tätast möjligt så vilket är önskbart om σ =1. Sambandet mellan cirkelns radie fås då från figuren och resulterar i följande matematiska härledning.. För fullständig täckning av en yta med arean 1 och fjädertätheten λ behöver rombens area vara 1/λ. Och om rombens area fås av ger detta att. Cirkelns kraftradie är då lika med σr. Ekvationen kan härledas ur figur 28. Antalet romber i kvadraten är lika många som antalet cirklar. Rombernas sammanlagda area är detsamma som kvadraten. Figur 28. Sambandet mellan rombens area och cirkelns radie fås från figuren till höger. Om kvadraten har sidorna lika med 1 är rombens area lika med 1/(antalet cirklar).