Simulering av mänskligt hår



Relevanta dokument
Inledning. Kapitel Bakgrund. 1.2 Syfte

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

PROCEDUELL TERRÄNG. Proceduella metoder för bilder (TNM084) Jimmy Liikala Institutionen för teknik och naturvetenskap

MODELLERING AV EN HELIKOPTERS RÖRELSER I LUFTEN

Veckoblad 1, Linjär algebra IT, VT2010

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

Simulering och rendering av gräs och vind i realtid

MATEMATIK GU. LLMA60 MATEMATIK FÖR LÄRARE, GYMNASIET Analys, ht Block 5, översikt

Gel esimulering 22 mars 2008

Vi har väl alla stått på en matta på golvet och sedan hastigt försökt förflytta

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

EXPERIMENTELLT PROBLEM 2 DUBBELBRYTNING HOS GLIMMER

Robotarm och algebra

Kursens olika delar. Föreläsning 0 (Självstudium): INTRODUKTION

Inlämningsuppgift 4 NUM131

Definitioner: hastighet : v = dr dt = r fart : v = v

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Tentamen TNM061, 3D-grafik och animering för MT2. Tisdag 3/ kl 8-12 TP51, TP52, TP54, TP56, TP41, TP43. Inga hjälpmedel

LÖSNINGAR TENTAMEN MEKANIK II 1FA102

Integraler av vektorfält Mats Persson

Sidor i boken Figur 1: Sträckor

Två gränsfall en fallstudie

Modellering av Dynamiska system. - Uppgifter till övning 1 och 2 17 mars 2010

Mer om geometriska transformationer

Mer om analytisk geometri

Tentamen Mekanik F del 2 (FFM520)

Målsättningar Proffesionell kunskap. Kunna hänvisa till lagar och definitioner. Tydlighet och enhetliga beteckningar.

Linjär algebra på några minuter

1 Vektorer i koordinatsystem

Vågrörelselära och optik

October 9, Innehållsregister

Vektorgeometri för gymnasister

1 Vektorer och tensorer

TNM022 Proceduella Bilder Rendering av proceduell päls i realtid

Planering mekanikavsnitt i fysik åk 9, VT03. och. kompletterande teorimateriel. Nikodemus Karlsson, Abrahamsbergsskolan

Begrepp:: Kort om Kryssprodukt

Omtentamen. TNM077 3D-datorgrafik och animering kl 8-12 Inga hjälpmedel. (samt även TNM008 3D-datorgrafik och VR)

Självkoll: Ser du att de två uttrycken är ekvivalenta?

Vektoranalys I. Anders Karlsson. Institutionen för elektro- och informationsteknik

Final i Wallenbergs Fysikpris

Mekanik SG1108 Mekanikprojekt Dubbelpendel

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

e 3 e 2 e 1 Kapitel 3 Vektorer i planet och i rummet precis ett sätt skrivas v = x 1 e 1 + x 2 e 2

KOKBOKEN 1. Håkan Strömberg KTH STH

Vektorgeometri för gymnasister

TANA17 Matematiska beräkningar med Matlab

Karta över Jorden - viktigt exempel. Sfär i (x, y, z) koordinater Funktionen som beskriver detta ser ut till att vara

Vektorgeometri för gymnasister

TAIU07 Matematiska beräkningar med Matlab

Newtons 3:e lag: De par av krafter som uppstår tillsammans är av samma typ, men verkar på olika föremål.

Procedurell renderingsmotor i Javascript och HTML5

Beräkningsuppgift I. Rörelseekvationer och kinematiska ekvationer

Andra EP-laborationen

AB2.1: Grundläggande begrepp av vektoranalys

Integraler av vektorfalt. Exempel: En partikel ror sig langs en kurva r( ) under inverkan av en kraft F(r). Vi vill

Tillåtna hjälpmedel: Physics Handbook, Beta, kalkylator i fickformat, samt en egenhändigt skriven A4- sida med valfritt innehåll.

Repetion. Jonas Björnsson. 1. Lyft ut den/de intressanta kopp/kropparna från den verkliga världen

SF1626 Flervariabelanalys

Institutionen för matematik SF1626 Flervariabelanalys. Lösningsförslag till tentamen Måndagen den 5 juni 2017 DEL A

Moment 4.2.1, 4.2.2, 4.2.3, Viktiga exempel 4.1, 4.3, 4.4, 4.5, 4.6, 4.13, 4.14 Övningsuppgifter 4.1 a-h, 4.2, 4.3, 4.4, 4.5, 4.

Linjära avbildningar. Låt R n vara mängden av alla vektorer med n komponenter, d.v.s. x 1 x 2. x = R n = x n

MMA127 Differential och integralkalkyl II

DIFFERENTIALEKVATIONER. INLEDNING OCH GRUNDBEGREPP

1 Ortogonalitet. 1.1 Skalär produkt. Man kan tala om vinkel mellan vektorer.

SF1626 Flervariabelanalys Lösningsförslag till tentamen DEL A

Mekanik Föreläsning 8

Stelkroppsmekanik partiklar med fixa positioner relativt varandra

Föreläsning 5: Acceleration och tidsderivering (kap ) . Sambandet mellan olika punkters hastigheter i en stel kropp: v A

Approximation av funktioner

λ = T 2 g/(2π) 250/6 40 m

Omtentamen TNM077, 3D datorgrafik och animering (samt även TNM008, 3D datorgrafik och VR)

Geometriska transformationer

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28

Gemensamt projekt: Matematik, Beräkningsvetenskap, Elektromagnetism. Inledning. Fysikalisk bakgrund

UPG5 och UPG8 Miniprojekt 1: 2D datorgrafik

Lösningar Heureka 2 Kapitel 3 Rörelse i två dimensioner

z = 4 + 3t P R = (5 + 2t, 4 + 2t, 4 + 3t) (1, 1, 3) = (4 + 2t, 3 + 2t, 1 + 3t)

Mekanik III, 1FA103. 1juni2015. Lisa Freyhult

Transformationer i R 2 och R 3

1 Den Speciella Relativitetsteorin

Explorativ övning Vektorer

1. För vilka värden på konstanterna a och b är de tre vektorerna (a,b,b), (b,a,b) och (b,b,a) linjärt beroende.

SF1624 Algebra och geometri

Komihåg 5: ( ) + " # " # r BA Accelerationsanalys i planet: a A. = a B. + " # r BA

Frågorna 1 till 6 ska svaras med ett kryss för varje korrekt påstående. Varje uppgift ger 1 poäng. Använd bifogat formulär för dessa 6 frågor.

Tentamen Mekanik F del 2 (FFM521 och 520)

Lösningsförslag Inlämningsuppgift 1 elstatikens grunder

Ansiktsigenkänning med MATLAB

DIFFERENTIALEKVATIONER. INLEDNING OCH GRUNDBEGREPP

Om ellipsen och hyperbelns optiska egenskaper

SG1108 Tillämpad fysik, mekanik för ME1 (7,5 hp)

Lennart Carleson. KTH och Uppsala universitet

" e n Föreläsning 3: Typiska partikelrörelser och accelerationsriktningar

Laboration 1 Mekanik baskurs

kan vi uttrycka med a, b och c. Avsnitt 2, Vektorer SA + AB = SB AB = SB SA = b a, Vi ritar först en figur av hur pyramiden måste se ut.

Vectorer, spannet av vektorer, lösningsmängd av ett ekvationssystem.

Mekanik FK2002m. Vektorer

= 0. Båda skärningsvinklarna är således π/2 (ortogonala riktningsvektorer).

Vetenskapsdagen 2016 SciLab för laborativa inslag i matematik eller fysik

SF1624 Algebra och geometri Lösningsförsag till modelltentamen

Transkript:

Simulering av mänskligt hår Linköpings Universitet, Campus Norrköping TNM085, Modelleringsprojekt, VT 2008 Christoffer Ahlbin...chrah108@student.liu.se Erik Edespong...eried115@student.liu.se Gustav Gahm...gusga293@student.liu.se Filip Gruvstad...filgr175@student.liu.se Niklas Oldéen...nikol143@student.liu.se 24 mars 2008

2

Sammanfattning Denna rapport beskriver arbetsgången och presenterar resultatet från ett projekt i kursen Modelleringsprojekt, TNM085, vid Linköpings Universitet under våren 2008. Arbetet som projektgruppen tagit sig an är att utifrån en fysikalisk modell simulera mänskligt hår. Den fysikaliska modellen har tagit inspiration från flertalet vetenskapliga rapporter inom området och utgår ifrån en modell kallad fjäder-balk-system. Modellen innefattar påverkan från externa krafter i form av gravitation, luftmotstånd, vind och kollisioner. För att bespara processorkraft vid simuleringen används en så kallad Wisps-modell för att få ner antalet hårstrån som behöver simuleras fysikaliskt. Detta innebär att ett hårstrå simuleras enligt den fysikaliska modellen, sedan renderas ytterligare ett antal hårstrån i en närhet av det simulerade hårstrået för att bilda en fullständig hårslinga. För att förhöja realismen används parameterkartor för att styra håregenskaper som längd, färg och spretighet. Utöver detta har även en anisotropisk reflektionsmodell implementerats för att uppnå en mer realistisk ljussättning av håret. Det slutgiltiga resultatet är i form av ett program som kör simuleringen utifrån givna startparametrar, dock inte i realtid men med möjlighet att rendera till film. Resultatet anser vi är till synes fysikaliskt korrekt och visuellt tilltalande där hårstråna rör sig som man skulle kunna vänta sig utifrån påverkan av gravitation, luftmotstånd, vind och kollisioner.

4

Innehåll 1 Inledning 9 1.1 Syfte.................................................. 9 1.2 Bakgrund............................................... 9 1.3 Metod................................................. 9 1.3.1 Avgränsningar........................................ 10 1.4 Källor................................................. 10 1.5 Struktur................................................ 10 2 Arbetsgång 11 2.1 Fysikalisk modell........................................... 11 2.1.1 Externa krafter........................................ 13 2.1.2 Diskretisering av momentekvationerna........................... 14 2.2 Implementation............................................ 15 2.2.1 Koordinatsystem och basbyten................................ 15 2.2.2 Generering av vind...................................... 15 2.2.3 Kollisioner.......................................... 15 2.2.4 Wisps............................................. 16 2.2.5 Parameterkartor........................................ 16 2.2.6 Ljusmodell.......................................... 17 3 Resultat 19 3.1 Simulering............................................... 19 3.2 Möjligheter till optimering...................................... 19 4 Diskussion och förslag på vidareutveckling 21 Referenslista 23 5

6

Figurer 2.1 Ett hårstrås uppbyggnad....................................... 11 2.2 Koordinatsystemens uppbyggnad för ett hårstrå........................... 12 2.3 Enhetsvektorer som används för kraftprojektion i θ- och φ-planet.................. 13 2.4 Krafter i verkan vid kollisionshantering............................... 16 2.5 Parameterkarta för färg med tillhörande resultat........................... 17 2.6 Parameterkarta för längd med tillhörande resultat.......................... 17 2.7 Parameterkarta för spretighet med tillhörande resultat........................ 17 2.8 Bild på de vektorer och vinklar som används i Kajiya-Kays ljusmodell............... 18 3.1 Simulering............................................... 20 3.2 Resultat av att använda parameterkarta för att kontrollera hårets färg................ 20 7

8

Kapitel 1 Inledning 1.1 Syfte Under första halvan av vårterminen 2008 hålls kursen TNM085 - Modelleringsprojekt vid Linköpings Universitet, Campus Norrköping. Kursen syftar till att ett fysikaliskt system ska modelleras och en simulering skall implementeras och på så sätt generera en animation av det valda systemet. Denna rapport beskriver en metod för hur mänskligt hår kan modelleras. Målet är att finna en modell som beskriver mänskligt hår under påverkan av yttre krafter såsom gravitation, vind och kollisioner med andra objekt. Ett annat mål är att få animationen av simuleringen att vara visuellt tilltalande. 1.2 Bakgrund Mänskligt hår är ett komplext system som består av tiotusentals tunna och böjbara hårstrån som interagerar både med varandra och med kroppen de sitter på. Hårsimulering som område är relativt nytt i jämförelse med simulering av exempelvis stelkroppar och vätskor, som har studerats under lång tid. Området dök upp under slutet av 1900- talet då realistiska animationer av människor behövdes inom bland annat filmindustrin. Av anledning att området är så pass nytt finns det ingen vedertagen modell för hur hår ska modelleras, utan istället flera modeller som är mer eller mindre kompletta. Möjligheten att prova på något som både anses relativt nytt och komplext lockade oss till valet att modellera hår. 1.3 Metod Vid projektets början saknade projektgruppen kunskap om hur hår kan modelleras och därför även vilka metoder som är praktiskt användbara och används inom t.ex. filmindustrin. Vi visste heller inte om det var realistiskt möjligt att utan tidigare erfarenhet implementera en simulering av hår på 8-10 veckor. Arbetet påbörjades därför med att läsa igenom flertalet forskningsrapporter och publiceringar om hårsimulering för att erhålla en bra grund att stå på inför det fortsatta arbetet. Det finns tre vanligt förekommande metoder för att modellera hår, alla med sina för- och nackdelar. Den tidigaste metoden bygger på ett så kallat fjäder-massa-system [1], vilket innebär att ett hårstrå modelleras som en mängd massor sammansatta med hjälp av fjädrar. Denna modell är enkel att implementera men gör att håret blir elastiskt. Då hår i verkligheten inte är märkbart elastiskt valde vi att istället titta närmare på de andra metoderna. Den mest moderna och kompletta modellen som finns beskriven är den så kallade Super-Helix-modellen [2]. Den var dock för komplex för att anses realistisk att implementera med de kunskaper vi besitter och den tidsram vi hade till förfogande. Därför valde vi den modell som kallas för fjäder-balk-modellen, vilken beskrivs i denna rapport. Modellen implementeras i C++ tillsammans med OpenGL och GLSL då flertalet gruppmedlemmar har tidigare erfarenhet av dessa programmeringsspråk. Språken är dessutom relativt snabba vilket passar bra för att göra tunga beräkningar som t.ex. simuleringar. 9

1.3.1 Avgränsningar För att mängden arbete under projektet inte skulle bli överväldigande sett till projektets tidsram gjordes vissa avgränsning. Den mest betydande avgränsning som gjorts var valet av modell, en modell baserad på ett fjäderbalk-system och inte Super-Helix-modellen. Kollisioner mellan hårstrån har uteslutits helt ur modellen då det är en beräkningstung operation. För att underlätta implementationen av kollisioner mellan hårstrån och huvudet har huvudets form begränsats till en sfär. En annan betydande förenklig som gjorts är att vinden påverkar håret lika mycket på alla hårstrån oberoende av ett hårstråets position. Därmed hindras inte vinden att nå ett hårstrå som befinner sig i skydd av huvudet, vilket är fallet i verkligheten. 1.4 Källor Huvudsakligen använde vi oss av vetenskapliga rapporter för att finna inspiration till hur hår kan simuleras. Förutom vetenskapliga rapporter och vetenskaplig litteratur har vi fått hjälp av lärare på universitetet med förklaringar och lösningar till de partier vi har haft svårt att förstå. De som hjälpt oss under arbetets gång är: Dr. Anna Lombardi, Universitetslektor vid ITN 1 Dr. Ulf Sannemo, Universitetslektor vid ITN Gunilla Waldenström, Universitetsadjunkt vid ISV 2 Trovärdigheten hos de källor vi valt att använda anser vi vara bra. Mycket är taget från internet 3, men då de kommer från seriösa domäner och det faktum att arbeten vi använt frekvent refereras till i andra tekniska rapporter ökar deras trovärdighet. Däremot finns det en del tveksamma förenklingar, det är därför viktigt att göra egna utvärderingar innan något används. Eftersom forskning inom visualisering av hårets dynamik är ett ganska ungt område finns det flera olika lösningar och ingen vedertagen bästa lösning. Det är därför viktigt att även titta på hela systemet ur en fysikalisk synpunkt och inte ta för givet att tidigare arbeten är kompletta. Matematiken och fysiken som används i de vetenskapliga rapporter vi tagit del av anser vi rimliga då de ligger som grund till vårt samhälle. 1.5 Struktur Det första kapitlet förklarar syfte, bakgrund, metod och diskuterar rimligheten hos våra källor. Det andra kapitlet innefattar implementation och ingående förklaring av den fysiska modell som använts samt hur den implementeras. I det tredje kapitlet visas resultatet av arbetet och diskuterar dess rimlighet. Fjärde och sista kapitlet är diskussionsdelen, där rimlighet samt framtida användningsområden diskuteras tillsammans med exempel på vidareutveckling och förbättringar av systemet. Rapporten avslutas med referenser till den litteratur vi använt oss av. 1 Institutionen för teknik- och naturvetenskap 2 Institutionen för samhälls- och välfärdsstudier 3 SIGGRAPH-kopplade arbeten och universitetssidor 10

Kapitel 2 Arbetsgång 2.1 Fysikalisk modell Ett hårstrå modelleras som en serie av raka linjesegment s i (1 < i < k) som sammanbinds mellan par av på varandra efterföljande nodpunkter p i (0 < i < k), se Figur 2.1. Varje nodpunkt har ett eget sfäriskt koordinatsystem vilket utgör det koordinatsystem som nästkommande nodpunkt är definierad i, se Figur 2.2. Utifrån hur de sfäriska koordinatsystemen är definierade så ligger alltid nästkommande koordinatsystems y-axel i samma riktning som föregående segment. För att beskriva interaktionen mellan segmenten har vi begränsat oss till att ta hänsyn till vridmomenten mellan dem. De sfäriska koordinatsystemen gör det möjligt att definiera momentekvationenerna i φ- och θ-planen och därmed ges variablerna θ och φ med avseende på tiden enligt Ekvation 2.1. [3] d θ p 1 s 1 s 2 2 p 2 s k p k p 0 Figur 2.1: Ett hårstrås uppbyggnad 11

y p i θ s i p i-1 Φ x z Figur 2.2: Koordinatsystemens uppbyggnad för ett hårstrå I i d 2 θ i dt 2 I i d 2 φ i dt 2 + γ i dθ i dt = M θ,i dφ + γ i i dt = M φ,i (2.1) I i är tröghetsmomentet för segment s i, γ i är dämpningskoefficienten och M θ,i samt M φ,i är vridmomentet i θ- respektive φ-planet. Tröghetsmomentet för ett element, s i, ges av Ekvation 2.2, där λ representerar massa per längdenhet, k fjäderkonstanten och d segmentens längd. I i = 1 3i λk4 d 3 (2.2) När ett segment vrids från sin ursprungsposition skapas vridmomenten M θ,i,spring och M φ,i,spring. Ekvationerna för dess kraft beror linjärt på skillnaden mellan nuvarande position och ursprungspositionen med en faktor k (fjäderkonstanten i respektive led) enligt Ekvation 2.3. M θ,i,spring = k θ (θ i θ 0,i ) M φ,i,spring = k φ (φ i φ 0,i ) (2.3) Vridmomenten M θ,i samt M φ,i som uppstår på grund av gångjärnseffekten beräknas sedan genom att summera M θ,i,spring och M θ,i,external med M φ,i,spring och M φ,i,external som innefattar vridmoment påverkat av yttre krafter, enligt Ekvation 2.4. M θ,i = M θ,i,spring + M θ,i,external M φ,i = M φ,i,spring + M φ,i,external (2.4) För att beräkna de externa momenten behöver först de externa krafterna definieras, formeln för detta ges av Ekvation 2.5 [4]. F external = ρdg + F d (2.5) I Ekvation 2.5 representerar ρ massa per längdenhet, d längden på ett segment och F d är den kraft som luftmotstånd och vind ger upphov till. 12

Då momentekvationerna är separerade i θ- och φ-planet krävs också att påverkan av F external beräknas i dessa plan. Hur stor del av F external som verkar för att rotera segmentet i θ-led ges av skalärprodukten mellan F external och v θ, en vektor av enhetslängd som är vinkelrät mot segmentets riktning i θ-planet. På samma sätt ges hur stor del av den externa kraften som verkar för att rotera segmentet i φ-led av skalärprodukten mellan F external och v φ, där v φ är den vektor som är vinkelrät mot hårsegmentets projektion i φ-planet. Vektorerna v θ och v φ ges av Ekvation 2.6 och illustreras i Figur 2.3. v θ = y d v φ = ( y d) d (2.6) De externa momenten beräknas sedan enligt Ekvation 2.7, där u är halva segmentlängden ( d 2 ) och v är halva längden av segmentets projektion i φ-planet. y p i d v θ p i-1 v Φ x z Figur 2.3: Enhetsvektorer som används för kraftprojektion i θ- och φ-planet M θ,i,external = uf θ M φ,i,external = vf φ (2.7) 2.1.1 Externa krafter När modellen simuleras verkar olika externa krafter på håret och påverkar därmed dess rörelse. Bland dessa finns exempelvis gravitation och vind. Alla dessa krafter summeras enligt Ekvation 2.5 för att få fram den slutgiltiga kraften som verkar i varje enskild nodpunkt. Nedan beskrivs hur dessa separata krafter beräknas i varje punkt. Alla dessa krafter beräknas först till storlek och riktning i världskoordinater för att sedan transformeras in i det lokala koordinatsystem som den aktuella nodpunkten är definierad i. 13

Gravitation När det gäller gravitationen använder vi oss av Newtons andra lag. Det viktigaste är att få fram storleken på kraften. Riktningen är redan känd och är i negativt y-led. Storleken på kraften ges av F g,i = m i a, där a är accelerationen och m i är den uppskattade vikten av ett segment. Hela segmentets vikt approximeras att ligga i den aktuella nodpunkten. Vind och luftmotstånd När det finns en relativ hastighet mellan luften och ett hårsegment uppstår en kraft, luftmotstånd, som verkar i motsatt riktning mot den relativa hastigheten. Hastigheten kan antingen uppstå då hårsegmentet rör sig genom luften eller då luften rör sig genom håret (vind). Luftmotståndet beräknas enligt formel 2.8 [5]. F d = 1 2 C dρv 2 Aˆv (2.8) I Ekvation 2.8 är C d en dimensionslös konstant som uppskattats till 1,1 [6]. Vidare är d längden för ett hårsegment, ρ är densiteten för luft, v är farten för hårsegmentet i förhållande till luften och ˆv är en enhetsvektor som beskriver den relativa hastighetens riktning. Den effektiva tvärsnittsarean A approximeras enligt Ekvation 2.9, där d är hårsegmentets längd, r är hårstråets radie och R är en förhållandefaktor som ges av Ekvation 2.10. A = Rdr (2.9) R = 1 ˆx ˆv (2.10) I Ekvation 2.10 är ˆx en normerad vektor som beskriver segmentets riktning. Denna approximation baseras alltså på att skalärprodukten ger förhållandet mellan segmentvektorn och vindvektorn. Luftmotståndet räknas ut och appliceras på samtliga hårsegment. Eftersom hårsegment faller med olika hastighet beroende på var de befinner sig, blir effekten att håret rör sig på ett naturligare sätt än om endast en konstant dämpningskoefficient använts. 2.1.2 Diskretisering av momentekvationerna För att implementera differentialekvationen från Ekvation 2.1 i simuleringen är det nödvändigt att diskretisera denna. Detta görs i form av en Euler-approximation i två steg vilket resulterar i Ekvation 2.11 och 2.12. dθ(t) dt d 2 θ(t) dt 2 1 t (θ(t + t) θ(t)) 1 t ( dθ(t+ t) dt dθ(t) dt ) = 1 t 2 (θ(t + 2 t) 2θ(t + t) + θ(t)) (2.11) Samma diskretisering görs av φ och ekvationen ovan skiftas tillbaka två steg varefter den sätts in i Ekvation 2.1 för att bilda Ekvation 2.12. θ(t) = 2θ(t t) θ(t 2 t) + t 2 1 I M θ t γ I θ(t t) + t γ I θ(t 2 t) (2.12) φ(t) = 2φ(t t) φ(t 2 t) + t 2 1 I M φ t γ I φ(t t) + t γ I φ(t 2 t) 14

2.2 Implementation 2.2.1 Koordinatsystem och basbyten För vissa beräkningar i simuleringen krävs vetskap om nodpunkters positioner i världskoordinater utöver de i lokala koordinater, detta främst vid hastighetsberäkningar och kollisionshantering. Utifrån hur nodpunkternas lokala koordinatsystem är definierade så är en nodpunkts position beroende av tidigare punkters lokala koordinatsystem. Då y-axeln (r-axeln sett i sfäriska koordinater) i punktens lokala koordinatsystem ligger i linje med vektorn som beskriver föregående segment innebär det att hårstrået blir rakt om alla vinklar är satta till noll. En nodpunkts position i världskoordinater fås genom matrismultiplikation av föregående nodpunkters koordinatsystems transformationsmatriser. Då de sfäriska koordinatsystemet definierar θ i intervallet [0, π] och φ i intervallet [0, 2π] har det implementerats funktionalitet som tar hand om fallen då vinklarna beräknas till värden utanför desssa intervall. Vid fallet att θ blir negativ, så sätts θ till positiv och koordinatsystemet vrids istället korrekt genom att addera π till φ. Fallet då θ överstiger π tas omhand genom att θ sätts till 2π θ och på samma sätt som i det negativa fallet, vridning π radianer i φ-planet. Denna kompensering kräver också att det direkt efterföljande koordinatsystemet vrids π radianer i φ-planet. Detta för att ytterligare kompensera efterföljande nodpunkter så att de inte vrids π radianer fel på grund av den ursprunliga kompensationen. 2.2.2 Generering av vind För att få mer liv i håret implementerades en vindgenerator. Önskvärt är att vinden har ett slumpartat men kontrollerat beteende, på så sätt att riktningen för vinden i en tidpunkt hela tiden är beroende av riktningen i föregående tidpunkt. Detta beteende hos vinden implementeras genom att addera värden, slumpade från en normalfördelning, till vindvektorn vid varje iteration i simulationen. Slumptalen genereras utifrån en Box-Muller-transformation, vilket innebär att slumpade tal från en normalfördelning ges av Ekvation 2.13 [7], där w är vinden, w(t t) är vinden i förra tidpunkten och U 1 och U 2 är likformigt fördelade slumptal i intervallet ]0, 1]. De likformigt fördelade slumptalen genereras med den inbyggda slumptalsfunktionen rand() i C++. w(t) = w(t t) + 2 ln U 1 cos 2πU 2 (2.13) 2.2.3 Kollisioner Kollisionshantering har avgränsats till kollisioner mellan hårstrån och huvudet. Grundidén i kollisionshanteringen är att kontrollera om en nodpunkt befinner sig innanför huvudet, och i det fallet applicera en motkraft som håller nodpunkten utanför huvudet. Vår metod utgår ifrån den reaction-constraint-metod som beskrivs i [3] och [4], men skiljer sig i hur det avgörs om en nodpunkt befinner sig innanför huvudet. Då det enda objekt vi kontrollerar kollisioner mot är huvudet, som approximeras som en sfär, kan vi reducera problemet till att avgöra om avståndet mellan nodpunkten och huvudets centerpunkt (i världskoordinater) är mindre än huvudets radie r. Om en nodpunkt befinner sig innanför sfären appliceras krafter enligt reaction-constraint-metoden för att hålla nodpunkten utanför. Krafterna som appliceras är uppdelad i två komposanter, F c och F u. F c är begränsad i ytans normalriktning och är till för att föra nodpunkten utanför sfären. F u är den komposant av kraften som kommer från den ursprungliga kraften som verkat på punkten, se Figur 2.4. Om en nodpunkt p i befinner sig innanför sfären beräknas den närmaste punkten T på sfären. Denna punkt och även ytans normal n i punkten T krävs för beräkningarna av krafterna. Krafterna beräknas enligt Ekvation 2.14, där F input betecknar den kraft som ursprunligen verkat på nodpunkten, v är nodpunktens hastighet, k kontrollerar styrkan av kraftrestriktionen och c är dämpningskoefficient. 15

p i-1 N T i p i F c F u F input Figur 2.4: Krafter i verkan vid kollisionshantering F u = F input (F input n) n F c = (k T p i + c( v n)) n (2.14) Den kraft F output som slutligen appliceras på nodpunkten ges av Ekvation 2.15. F output = F u + F c (2.15) För att simulera oelastiska kollisioner appliceras endast krafterna för kollisionshanteringen då den ursprungliga kraften verkar för att föra nodpunkten in i sfären, eller då hastigheten är riktad in mot sfären. Detta uppfylls då F input n < 0 eller v n < 0. 2.2.4 Wisps För att ett hår ska se verklighetstroget ut behöver det innehålla tiotusentals hårstrån. Att simulera varje enskilt hårstrå tar lång tid, i regel flera timmar på en vanlig persondator. För att korta ner tiden används ett naturligt fenomen för hår vilket innebär att flera intilliggande hårstrån ofta klumpar sig samman och rör sig tillsammans. Vi utnyttjar detta i form av att implementera den så kallade Wisps-modellen vilket innebär att endast en delmängd av alla hårstrån simuleras [4]. Resterande hårstrån skapas sedan genom att ett antal kopior av varje simulerat hårstrå renderas i närheten av originalet. Kopiorna ändras även en aning i sitt utseende för att inte vara helt identiska med varandra, vilket ger en större variation i håret. 2.2.5 Parameterkartor En parameterkarta är en kvadratisk färgbild som UV-mappas på en tänkt sfär motsvarande huvudet. Utifrån var ett hårstrå är placerat på huvudet hämtas motsvarande UV-värde på kartan och på så vis sätts parametern för hårstrået [8]. Den stora fördelen med parameterkartorna är att vi på ett enkelt och intuitivt sätt kan ändra parametrar för hårets egenskaper och utseende. Ytterlihare en fördel är att det går att ha olika parametrar för hårstrån beroende var på huvudet det sitter. Vid användning av parameterkartor för att styra hårets färg resulterar färgvärden i parameterkartan motsvarande färg på håret, se Figur 2.5. Parameterkartorna för längd respektive spretighet mappar istället färgintensiteter mellan 0 och 1 i parameterkartan till olika längder respektive spretighet, se Figur 2.6 och Figur 2.7. 16

Figur 2.5: Parameterkarta för färg med tillhörande resultat Figur 2.6: Parameterkarta för längd med tillhörande resultat Figur 2.7: Parameterkarta för spretighet med tillhörande resultat 2.2.6 Ljusmodell För att få en ökad känsla av realism i håret räcker det inte med att färgen för varje hårstrå varierar över huvudet, utan färgen måste även variera längs med varje hårstrå. Detta kan göras med hjälp av en lokal ljusmodell. Eftersom hår är ett anisotropiskt material, vilket innebär att det reflekterar mer ljus längs med hårfibrerna än vad det gör i övriga riktningar, använder vi en modell som tar med detta i beräkningarna. Ljusmodellen som valdes är Kajiya- Kay-modellen som approximerar ett hårsegment som en smal och slät cylinder. Ljuset delas upp i två komponenter, en för diffust och en för spekulärt ljus [9]. Den diffusa komponenten använder Lamberts ytmodell och beräknas genom att integrera en avtagande cosinusfunktion över halva omkretsen av den del av cylindern som är synlig från ljuskällan [10]. Hur ljusintensiteten ges utifrån Lamberts modell är relativt komplex, men tack vare vårt val av koordinatsystem för hårstrån ges ljusintensiteten enligt Ekvation 2.16, där k diffuse är en materialkonstant och α är vinkeln mellan hårsegmentet och den vektor som beskriver ljuskällans riktning. I diffuse = k diffuse sin(α) (2.16) 17

y l α β e Figur 2.8: Bild på de vektorer och vinklar som används i Kajiya-Kays ljusmodell Den spekulära kompontenten modelleras genom att inkommande ljus sprids mest utmed hårstrået och sedan med minskande intensitet desto större vinkel i förhållande till segmentets riktning. På så sätt skapas en kon av reflekterat ljus. Ljusblänk beräknas med Phongs ljusmodell [11] enligt Ekvation 2.17 där k s en materialkonstant, y är nästa segments y-axel, l är vektorn som pekar mot ljuskällan och e är vektorn i riktning mot betraktaren. Vidare är α vinkeln mellan y och l och β är vinkeln mellan y och e, se Figur 2.8. Till sist är σ en konstant som bestämmer storleken på blänket. [10] I specular = k s (( y l)( y e) + sin(α)sin(β)) σ (2.17) Det slutgiltiga intensiteten erhålls genom att addera den diffusa och den spekulära termen enligt Ekvation 2.18 vilket resulterar i en visuellt tilltalande ljussättning med relativt få beräkningar. I = I diffuse + I specular (2.18) 18

Kapitel 3 Resultat Genom att implementera den fysikaliska modell som beskrivits i ovanstående sektioner har vi erhållit ett resultat som är visuellt tilltalande och till synes fysikaliskt korrekt. Håret rör sig som väntat utifrån påverkan av gravitation, luftmotstånd, vind och kollisioner. 3.1 Simulering Då det främsta målen inom projektet varit att skapa ett visuellt tilltalande och fungerande system har realtidssimulering inte prioriterats. Det är möjligt att simulera ett begränsat antal hårstrån i realtid, men vid en viss gräns beroende på datorprestanda, så är realtidssimulering inte möjligt. På grund av detta renderas en bild trettio gånger per sekund och kan sedan sättas samman till en film med hjälp av ett videoredigeringsprogram, t. ex. Adobe After Effects. Vi har så långt det är möjligt hållit oss till att använda fysikaliskt motiverade konstanter som kunnat återfinnas i rapporter eller andra källor. Dock har vi ibland varit tvungna att tumma på dessa, eller helt enkelt fått prova oss fram till egna konstanter för att få ett realistiskt beteende hos håret. Dessa justeringar av konstanterna har lett till bieffekten att simuleringen inte är helt korrekt med avseende på tiden i form av att förloppet går långsammare än det borde. För att kompensera för detta spelas bilderna upp i snabbare takt än de renderats för. I Figur 3.1 illustreras en simulering av 30 centimeter långt hår då det till en början står rakt ut från huvudet varpå de sedan faller av påverkan från externa krafter. Användandet av parameterkartor för att variera hårets karaktäristik gjorde det möjligt att framställa hår som ses i Figur 3.2. 3.2 Möjligheter till optimering Som nämnts tidigare har ingen tid lagts på att försöka optimera koden för att få en så effektiv programkod som möjligt. Det finns emellertid ett antal saker vi hade kunnat göra om vi haft mer tid. På moderna grafikkort finns möjligheten att göra andra beräkningar än enbart grafikberäkningar på GPU:n 1. Optimeringsteget som är möjligt är att man då kan simulerar flera olika hårstrån parallellt istället för att som vi gör nu, simulera dem efter varandra på CPU:n 2. 1 Graphical Processing Unit 2 Central Processing Unit 19

Ytterligare en möjlighet till optimering som observerats är att enhetsvektorerna v θ och v φ som används vid momentberäkningarna är likadana vektorer som efterföljande punkts koordinatsystems x- och z-axlar. I dagsläget beräknar vi både v θ och v φ samt koordinatsystemsaxlarna vilket innebär onödiga beräkningar. Det skulle räcka med att enbart beräkna v θ och v φ och använda dem som koordinataxlar. Figur 3.1: Simulering Figur 3.2: Resultat av att använda parameterkarta för att kontrollera hårets färg 20

Kapitel 4 Diskussion och förslag på vidareutveckling För att bredda användningsområdet för simuleringsapplikationen är ett naturligt steg att utvidga modellen till att behandla rotation och translation av huvudet. En annan del av modellen som ligger nära till hands att utveckla är kollisioner mellan håret och andra sfäriska objekt utöver huvudet. Detta då den kollisionshantering som är implementerad är allmän för sfäriska objekt. Att implementera funktionalitet för kollisioner hårstrån sinsemellan skulle kunna ge mer realistiska interaktioner inom håret och det skulle troligen även resultera i ett mer realistiskt rörelseförlopp för håret som helhet. En utökning av ljusmodellen i form av stöd för självskuggning i håret skulle kunna ytterligare förhöja det visuella intrycket. Det arbete som presenterats beskriver en metod för att utifrån en fysikalisk modell simulera hår, med möjlighet att simulera allt ifrån ett hårstrå till en hel frisyr. Under utvecklingen och främst vid justering av konstanter har vi observerat att vår modell även skulle gå att använda till att simulera högt gräs och liknande växtlighet. Med tanke på tidsramen och de förkunskaper projektgruppen hade anser vi att resultatet överstigit våra förväntningar. 21

22

Litteraturförteckning [1] K. Ward & F. Bertails & T-Y.Kim & S. Marschner & M-P. Cani & M. Lin. A survey on hair modeling: Styling, simulation, and rendering. Website, 2007. http://www.cs.unc.edu/~geom/hairsurvey/ WBKMCL07.pdf. Tillgång: 12 mars 2008. [2] M. Bergbom. Super-helices for hair modelling and dynamics. Website, 2007. http: //www.diva-portal.org/diva/getdocument?urn_nbn_se_liu_diva-10412-1 fulltext.pdf. Tillgång: 12 mars 2008. [3] T. Kurihara & K. Anjyo & D. Thalmann. Hair animation with collision detection. Website, 1993. http://vrlab.epfl.ch/publications/pdf/kurihara_anjio_thalmann_ca_ 93.pdf. Tillgång: 26 februari 2008. [4] T. Kurihara & D. Thalmann & N. Thalmann & A. Daldegan. An integrated system for modelling, animating and rendering hair. Website, 1993. http://vrlab.epfl.ch/publications/pdf/daldegan_ and_al_eg_93.pdf. Tillgång: 26 februari 2008. [5] D. Halliday & R. Resnick & J. Walker. Fundamentals of physics. John Wiley & sons INC, United States, 2005. [6] Unknown. Drag coefficient. Website, 2007. http://en.wikipedia.org/wiki/drag_ coefficient. Tillgång: 10 mars 2008. [7] G.E.P Box & M. Muller. A note on the generation of random normal deviates. Website, 1958. http://projecteuclid.org/dpubs/repository/1.0/disseminate?view= body&id=pdf_1&handle=euclid.aoms/1177706645. Tillgång: 10 mars 2008. [8] E. Weisstein. Stereographic projection. Website, Mathworld, 2008. http://mathworld.wolfram. com/stereographicprojection.html. Tillgång: 10 mars 2008. [9] J. T. Kajiya & T. L. Kay. Rendering fur with three dimensional textures. Website, 1989. http://portal. acm.org/citation.cfm?id=74361. Tillgång: 20 mars 2008. [10] G.E.P Box & M. Muller. Real-time hair simulation and visualization for games. Website, 2007. http: //graphics.cs.lth.se/theses/projects/hair/report.pdf. Tillgång: 10 mars 2008. [11] A. Watt. 3D Computer graphics. Addison-Wesley Publishing, United States, 2000. 23