Rendering av realistiska fågelfjädrar i realtid

Storlek: px
Starta visningen från sidan:

Download "Rendering av realistiska fågelfjädrar i realtid"

Transkript

1 Examensarbete Rendering av realistiska fågelfjädrar i realtid Henrik Edin LiTH - ISY - EX / SE

2

3 Rendering av realistiska fågelfjädrar i realtid Bildkodning, Institutionen för systemteknik, Linköpings Universitet Henrik Edin LiTH - ISY - EX / SE Examensarbete: 20p Nivå: D Handledare: Luigi Tramontana, Craft Animations AB Examinator: Ingemar Ragnemalm, Bildkodning, Institutionen för systemteknik, Linköpings Universitet Linköping: September 2007

4

5 Presentationsdatum Publiceringsdatum (elektronisk version) Institution och avdelning Institutionen för systemteknik Department of Electrical Engineering Språk x Svenska Annat (ange nedan) Antal sidor 54 Typ av publikation Licentiatavhandling x Examensarbete C-uppsats D-uppsats Rapport Annat (ange nedan) ISBN (licentiatavhandling) ISRN LiTH-ISY-EX--07/3883--SE Serietitel (licentiatavhandling) Serienummer/ISSN (licentiatavhandling) URL för elektronisk version Publikationens titel Rendering av realistiska fågelfjädrar i realtid Författare Henrik Edin Sammanfattning I den här rapporten så visas hur realtidsrendering av fågelfjäder kan implementaras. Ett lindenmayersystem (L-system) används för att skapa geometri med hjälp av ett fåtal bézierkurvor. Naturliga variationer hos fjädrar modelleras genom att introducera externa krafter som ackumuleras slumpmässigt när L-systemet genererar geometrin. Bidirectional texture functions (BTF) används för färgsättning och effektiv modellering av fjäderns finstruktur. BTF är en sexdimensionell struktur som kan representera verkliga material genom att innehålla, förutom de två vanliga texturkoordinaterna, koordinater för betraktnings- och belysningsvinklar. För att kunna använda BTF-texturer på grafikhårdvara så kompakteras dess representation så att den ryms i en tredimensionell textur. Anpassningar görs också för att stödja texturfiltrering och mip-mappning. För att ta fram informationen som BTF-texturen innehåller så modelleras finstrukturen i ett externt animationsverktyg, där ljuskälla och kamera animeras över de samplingspunkter som definierats. Strålföljning används sedan för att generera hur materialet ser ut vid dessa olika vinklar. Nyckelord Fågelfjädrar, datorgrafik, direct3d, rendering, bidirectional texture functions, lindenmayer system

6

7 Sammanfattning I den här rapporten så visas hur realtidsrendering av fågelfjäder kan implementaras. Ett lindenmayersystem (L-system) används för att skapa geometri med hjälp av ett fåtal bézierkurvor. Naturliga variationer hos fjädrar modelleras genom att introducera externa krafter som ackumuleras slumpmässigt när L-systemet genererar geometrin. Bidirectional texture functions (BTF) används för färgsättning och eektiv modellering av fjäderns nstruktur. BTF är en sexdimensionell struktur som kan representera verkliga material genom att innehålla, förutom de två vanliga texturkoordinaterna, koordinater för betraktnings- och belysningsvinklar. För att kunna använda BTF-texturer på grakhårdvara så kompakteras dess representation så att den ryms i en tredimensionell textur. Anpassningar görs också för att stödja texturltrering och mip-mappning. För att ta fram informationen som BTF-texturen innehåller så modelleras nstrukturen i ett externt animationsverktyg, där ljuskälla och kamera animeras över de samplingspunkter som denierats. Strålföljning används sedan för att generera hur materialet ser ut vid dessa olika vinklar. vii

8 viii Sammanfattning

9 Tack Först och främst så vill jag tacka Craft Animations AB för att fått möjligheten att få utföra det här examensarbetet hos dem. Vidare så vill jag ge ett stort tack till min familj och alla andra som har hjälpt och stöttat mig under arbetet. Ingemar Ragnemalm på ISY vid Linköpings Universitet ska ha ett speciellt tack för att inte bara vara examinator utan även för den expertis han har tillhandahållit. ix

10 x Tack

11 Innehåll Sammanfattning Tack vii ix 1 Inledning Bakgrund Syfte och mål Språk Kapitelindelning Grundläggande teori Fjäderns anatomi Struktur Färg Fjädertyper Lindenmayersystem Formella grammatiker Användning inom datorgrak Parametriserade L-system Implementering Snöingan (Koch-kurvan) Ljussättning Modell av verkligheten Phongmodellen Texturmappning Översikt Linjära mönster Kvadratiska mönster Volymmönster Mappningsprocessen Begränsningar Bump-mapping Texturltrering Klassicering Texturförstoring Texturförminskning Sampling av närmaste granne Linjär ltrering xi

12 xii INNEHÅLL Anisotropisk ltrering Filtrering med högre ordningens lter MIP-mappning Denition Texturltrering och mip-mappning Bidirectional texture functions Motivering Denition Anskaning av data Lagring och rendering Avslutning Rendering av realistiska fågelfjädrar i realtid Metoder Geometri Modell Generation Naturliga variationer Färgsättning med BTF Översikt Sampling Kompaktering Stödja mip-mappning Stödja texturltrering Explicit texturltrering Exempel på beräkning av färgvärde Avslutning Implementation System Programmeringsspråk och plattformar Externa verktyg Egna verktyg Lindenmayer system Implementation i C Generation av spole Generation av fanstråle Normaler Texturkoordinater Bidirectional texture functions Scen för generation av textur Efterbehandling av bilder Kompaktering till BTF Rendera på GPU Avslutning

13 Innehåll xiii 5 Resultat Geometri Utseende Prestanda Problem Slutsats Framtida arbete Litteraturförteckning 41

14 0 Innehåll

15 Kapitel 1 Inledning Det här dokumentet presenterar resultaten av mitt examensarbete hos Craft Animations AB hösten I det första kapitlet kommer en kort bakgrund till arbetet att presenteras tillsammans med en överblick över resterande kapitel. 1.1 Bakgrund Människan har sedan urminnes tider varit facinerad över den naturliga skönheten hos fjädrar. Indianstammar har använt fjäderskrudar på grund av deras vackra färger medan fåglar bär dem varje dag för att hålla sig varma, attrahera fränder och för att yga. Trots att de förkommer överallt i naturen nns det ingen systematisk metod för att modellera och rendera dem inom datorgrakens område. [12] beskriver hur de gick till väga för att klä en fågel med fjädrar i lmen Stuart Little 2. Där behandlas mestadels problemen med placering och interpenetration mellan fjädrar. Andra behandlar problem med att modellera individuella fjädrar. [9] föreslår ett generellt system som bygger på bézierkurvor som klarar av att modellera de esta typerna av fjädrar. Även [1] behandlar hur indivuduella fjädrar kan modelleras, de använder dock ett rekursivt system som kan bygga upp en fjäder från ett fåtal parametrar. Ett annat system för att bygga upp en fjäder från ett fåtal parametrar nns beskrivet i [15]. Det systemet bygger på interpolation istället för rekursion. Andra behandlar närliggande ämnen, som exempelvis [14] där de beskriver en sannolikhetsmodell för att rendera päls eektivt utan att behöva modellera varje strå. 1.2 Syfte och mål Den här rapporten kommer att undersöka vilka metoder som är lämpade för att modellera och rendera individuella fjädrar. Valet av metod påverkas av några önskvärda egenskaper från Craft Animations AB. Det här systemet är i deras synvinkel även ett sätt att visualiera på ett snabbt och eektivt sätt hur en fjäder kommer att se ut efter en tung icke realtidsrendering. Fjädern ska därför modelleras på ett sådant sätt som profesionella modellerare skulle vilja modellera en fjäder på. För att även fjäderns utseende ska bli så likt en fjäder som är renderad med strålföljning så kommer metoder möjliggöra detta undersökas. 1

16 2 Kapitel 1. Inledning 1.3 Språk Detta examensarbete är skrivet på svenska, med vissa engelska termer. I många av de berörda ämnesområdena så bedrivs forskning och användning enbart med det engelska språket. De berörda nyckelord som saknar en svensk översättning kommer därför att benämnas med deras engelska namn. 1.4 Kapitelindelning Rapporten är uppdelad i fem kapitel där de, utom det här kapitlet, har följande innehåll: Kapitel 2 tar upp grundläggande teorier om fjädrar, datorgrak och andra tekniker som används för teorin. Kapitel 3 behandlar teorin bakom de metoder som har använts. Kapitel 4 handlar om aspekter gällande implementationen av de valda metoderna. Kapitel 5 redovisar resultaten med slutsatser och förslag på framtida utökningar.

17 Kapitel 2 Grundläggande teori I det här kapitlet kommer grundläggande koncept som är viktiga för att förstå arbetet att tas upp. De olika delarna kan verka självständiga men de kopplas ihop i kapitel 3 där teorin för examensarbetet presenteras. 2.1 Fjäderns anatomi Fjädrar är det särdrag som karaktäriserar fåglar mest. De utgör ett starkt, lätt, varmt och exibelt hölje hos fåglar. De har en avancerad struktur där de har väldigt olika utseende beroende på vilken typ av fjäder eller vilken fågel den kommer från. Fjäderns anatomi i kommande delkapitel är enligt [4] Struktur En typisk fjäder består av ett långt skaft kallat spole (eng. rachis), som utgör mitten av fjädern. Vid spolens båda sidor så sitter det exibla vindöjlar, kallade fan (eng. vane). Spolen delas vanligtvis upp i ytterliggare delar men det är inte av intresse för det här examensarbetet. De båda fan kan antingen vara symmetriska eller asymmetriska runt spolen, beroende på fjäderns roll under ygning. En fan består av hundratals små parallella strån kallade fanstrålar (eng. barb) som förgrenar sig från någon av spolens sidor. Dessa fanstrålar förgrenar sig i sin tur till ytterliggare små grenverk som vi kan kalla bistrålar (eng. barbules). På dessa bistrålar sitter det små krokar som håller ihop närliggande fanstrålar så att de tillsammans ska ligga parallellt och på så sätt bilda en vindöjel. Bistrålarna är knappt synliga för det mänskliga ögat men om man fysiskt separerar fanstrålar på en stor fjäder så kan man se små bistrålar som ser ut som små hår vid sidorna på fanstrålarna. Figur 2.1 illustrerar namnen på de olika delarna av en fjäder. Vingpennan kommer klumpas ihop med spolen i benämningen i fortsättningen Färg Fåglar är bland de mest färgglada djuren som nns i naturen, bara skar vid korallrev i de tropiska haven har ett sån brett omfång av färger och mönster som fåglar. Färgerna skapas av olika pigment och strukturer hos fjädrarna. Det 3

18 4 Kapitel 2. Grundläggande teori Figur 2.1: De olika delarna på en fjäder. 1. Fan, 2. Spole, 3. Fanstråle, 4. Afterfeather, 5. Vingpenna. Bild från [20]. nns tre grundläggande typer pigment där varje typ skapar olika grupper av färger, grupperna är: Melanis ger svart, grått och brunt. Carotenoids ger en livlig röd och gul färg. Porphyrins ger ett brett omfång av rött, brunt och grönt. För att komplicera det ytterliggare så är det så att t.ex. de esta blåa och gröna fjädrar inte har något blått eller grönt pigment utan färgen kommer ifrån komplexa mönster av reektioner och brytningar av ljus Fjädertyper Det nns många olika typer av fjädrar. De sex huvudsakligas engelska namn är contour feathers, down feathers, semiplumes, loplumes, powder feathers och bristles. Tillsammans så skapar de här typerna en väldigt bred variation av användningsområden; isolation från värme och kyla, skydd mot slitningar av huden, skydd för ögon, öron och näsborrar, sensorer för att avgöra yghastighet och många er. Contour feathers Contour feathers är den vanligaste typen av fjädrar och brukar vara de man menar när man endast säger fjädrar. Det är dessa fjädrar som bildar fan och de nns i era olika former på fågeln, dels på fågelkroppen men också som större fjädrar på vingar och stjärt där de kallas för ygfjädrar. Down feathers Down feathers används för att skapa isolering och nns placerade under contour feathers på fågelkroppen, de saknar eller har en väldigt kort spole. Fanstrålarna saknar krokar. Detta gör att dessa fjädrar inte kan bilda fan, istället så spretar fanstrålarna åt olika håll och påminner då lite om päls.

19 2.2. Lindenmayersystem 5 Semiplumes Semiplumes är ett mellanting mellan contour feathers och down feathers. Dessa har en spole men fanstrålarna saknar även här krokar. 2.2 Lindenmayersystem Lindenmayersystem, eller L-system, är enligt [2] en formell grammatik utvecklad 1968 av den ungerska biologen Astrid Lindenmayer. L-system har idag en användning inom datorgrak i t.ex. generation av fraktaler och modellering av växter, två klassiska användningsområden Formella grammatiker Formella grammatiker fokuserar på konceptet omskrivning. Det går ut på att deniera komplexa objekt genom att successivt ersätta delar av ett simpelt initialt objekt genom att använda en mängd omskrivningsregler och produktioner. De mest studerade och använda omskrivningssystemen fungerar på strängar av tecken. En så kallad Chomsky formell grammatik är kontextfri (eng. context free) och består av en kvadrupel: G = (N, Σ, P, S) [5], där: N är en ändlig mängd av icke terminerande symboler. Σ är en ändlig mängd av terminerande symboler. P är en ändlig mängd av produktionsregler med en vänster- och en högersida av symboler. S N är startsymbolen. Ett exempel är denna enkla grammatik som denierar språket av alla ord på formen a n b n. Alltså n st av tecknet a följt av n st av tecknet b: N = {S}, Σ = {a, b} S asb S ab Användning inom datorgrak Framsteg inom teorin om formella grammatiker och språk väckte ett intresse att beskriva bilder med hjälp av strängar av tecken. Målet var att kunna känna igen objekt, såsom handskrivna bokstäver genom att koda bilderna för att sedan kunna analysera de resulterande strängarna. Man undersökte samband mellan bilder och formella språk, men resultaten var en besvikelse då man fann att för enkla klasser av bilder så som raka linjer med godtycklig lutning och cirklar med godtycklig radie var alla kontextkänsliga (eng. context sensitive) medan de praktiska resultaten inom formella språk refererade till språk som var kontextfria.

20 6 Kapitel 2. Grundläggande teori Parametriserade L-system L-system är lösningen på problemen beskrivna i kapitel 2.2.2, de skiljer sig från vanliga Chomsky grammatiker beskrivna i kapitel på sättet man applicerar produktioner [2]. I Chomsky grammatiker så appliceras produktionerna sekvensiellt, en efter en, medan i L-system utförs de alla parallellt så alla tecken i ett givet ord ersätts samtidigt. Den här skillnaden har den väsentliga inverkan på egenskaperna hos L-system där vissa språk som inte kan genereras av Chomsky kontextfria grammatiker kan genereras av kontextfria L-system. Till dessa språk hör speciellt exemplen beskrivna i kapitel och detta är anledningen att L-system används inom datorgrak. I detta examensarbete kommer en utökning av L-system att användas, de så kallade parametriserade L-systemen. De använder samma typ av produktioner som är beskrivna i kapitel med den skillnaden att man kan ange ett villkor för en parameter för att produktionen skall få användas. Detta gör att en icketerminerande symbol inte nödvändigtvis har några produktioner som får användas och symbolen kan då tolkas som att den vore terminerande. Utseendet på produktionerna som användas ser ut på detta sätt [1]: id : pred : cond succ (2.1) Där id är produktionens unika namn för att enkelt kunna referera till den och cond utgör villkoret beskrivet ovan Implementering L-system som används inom datorgrak brukar vanligtvis implementeras genom att använda så kallad turtle graphics [2]. Idén bakom Turtle graphics är att man placerar en penna på en sköldpadda som blir instruerad att göra saker som att gå framåt, rotera 60 och så vidare. Genom att använda dessa byggstenar så kan man skapa komplicerade former och gurer, som exempelvis trianglar och cirklar. När sköldpaddan får ett kommando utför den det relativt till sin aktuella position, det gör att kommandosekvensen gå framåt, rotera 90, gå framåt ger en gur som en 90 graders vinkel. Turtle graphics programmering utförs ofta i ett språk som kallas för Logo. Det är ett funktionellt programmeringsspråk väldigt likt lisp men enklare att läsa då det inte använder parenterser på samma sätt. Logo kan användas för andra saker än turtle graphics men detta är det mest kända och använda området för Logo idag Snöingan (Koch-kurvan) Hur översätts då L-system denierade i kapitel och till turtle graphics? Ett L-system för att rita upp en snöinga kan denieras på det här sättet [22]: N = {F }, Σ = {+, }, S = F F F (2.2) p 1 : F F + F F + F Där F betyder att sköldpaddan ska gå framåt, + anger en rotation på 60 åt höger och anger en rotation på 60 åt vänster. Startsymbolen S och produktionen p 1 är visualiserade med turtue graphics i gur 2.2. Snöingans utseende

21 2.3. Ljussättning 7 Figur 2.2: Från vänster, startsymbolen och produktionen för att generera en snöinga med formel 2.2. Bild från [22]. Figur 2.3: Genererad snöinga med formel 2.2. Från vänster visas resultatet med 0, 1, 2 respektive 3 iterationer. Bild från [22]. vid ett antal olika iterationer, där produktionen p 1 appliceras parallellt, med turtle graphics visas i gur Ljussättning Ljussättning inom datorgrak handlar om att modellera den komplexa interaktionen mellan ljus och olika material. I detta kapitel kommer det beskrivas vad i verkligheten som brukar modelleras och varför samt redogöra kortfattat för en populär modell Modell av verkligheten Interaktionen mellan ljus och material beror på era karaktäristiker hos både ljuset och materialet som ljuset reekteras mot [18]. När ljus träar ett material så sker tre typer av interaktion: Reektion Ljuset reekteras på ytan. Absorption Ljuset absorberas av materialet och energin omvandlas till värmeenergi. Transmission Ljuset transmitteras genom materialet. De tre olika typerna av interaktion illustreras i gur 2.4. Eftersom energi bevaras så är det reekterade + absorberade + transmitterade ljuset lika med det inkommande. När man ska modellera hur ljus och material ska interagera så sätter man upp ett antal variabler; ju verkligare modell desto er variabler. En verklighetstrogen modell kan t.ex. innehålla variabler för:

22 8 Kapitel 2. Grundläggande teori Figur 2.4: Interaktionen av ljus beror på fysiska egenskaper hos materialet. Bild från [18]. Inkommande och utgående vinklar. Inkommande och utgående våglängder. Inkommande och utgående polarisering. Inkommande och utgående position (pga. så kallad subsurface scattering). Tidsfördröjning mellan inkommande och utgående ljusstrålar. Detta är dock alldeles för många för att kunna användas praktiskt i datorgrak. För att kunna använda modellen praktiskt så vill vi representera färg med en trippel bestående av en röd, en grön och en blå komponent (RGB). Vidare önskar man ignorera avancerade fenomen som polarisering, skiftningar i position och tidsfördröjningar på grund av att det huvudsakliga utseendet inte kommer från dessa. Kvar blir då endast inkommande och utgående vinklar och funktionen som beror på dessa kallas en BRDF, bidirectional reectance distribution function. En BRDF som inte beror på positionen på materialet är en positionsoberoende BRDF och har följande notation [18]: BRDF λ (θ i, φ i, θ o, φ o ) (2.3) Där λ är våglängden på ljuset, θ i och φ i riktningen hos det inkommande ljuset i sfäriska koordinater och θ o och φ o är riktningen hos det utgående ljuset i sfäriska koordinater Phongmodellen Phongmodellen är en enkel BRDF som ofta används i datorgrak för att approximera ljusberäkningarna och är idag inga problem att utföra i realtid på grakhårdvara. Den kan skrivas så här [3]: I = W (θ)i l cos ns (φ) (2.4) Där I l är intensiteten hos ljuskällan, φ är betraktningsvinkeln, n s är den så kallade specular-reektionsexponenten och W (θ) är den så kallade specularreektionskoecienten. Phongmodellen sätter intensiteten proportionellt mot cos ns (φ). Betraktningsvinkeln φ kan tilldelas värden mellan 0 och 90, så att

23 2.4. Texturmappning 9 cos(φ) varierar från 0.0 och 1.0. Reektionsexponenten n s anger glansigheten hos materialet. Ett väldigt glansigt material modelleras med ett stort n s medan matta ytor modelleras med ett lågt n s. En perfekt reektor modelleras i phongmodellen genom att använda ett oändligt n s. Vidare används W (θ) för att modellera egenskaper för varierande vinklar hos det inkommande ljuset. 2.4 Texturmappning Texturmappning är den vanligaste metoden för att lägga till detaljer till ett objekt inom datorgrak. I detta kapitel kommer olika typer av texturer, hur de används och vad texturmappnings tekniken har för begränsningar, att beskrivas Översikt Texturmappning går ut på att mappa olika former av mönster, kallade texturer, till objektets geometriska beskrivning [3]. Mönstren är vanligtvis denierade som en samling av färgvärden som är ligger i ett en-, två- eller tredimensionellt så kallat texturrum (eng. texture space). För att peka ut en viss del i texturrummet används en uppsättning texturkoordinater för varje dimension i texturrummet. Texturkoordinaterna spänner sig över intervallet 0.0 till 1.0. Texturmappningsprocessen kan beskrivas som en matematisk funktion där man med hjälp av texturkoordinater får ut ett färgvärde. Ett färgvärde som användaren av grakpaketet vanligtvis tillåts deniera på ett ertal olika sätt, det kan t.ex. bestå av fyra RGBA (RGB + alpha) komponenter eller en enkel intensitetskomponent. De här färgvärdena som utgör en komponent i beskrivningen av en textur brukar betecknas som ett texturelement, eller en texel Linjära mönster Ett endimensionellt, eller linjärt, texturmönster kan speciceras i en endimensionell array av färgvärden. Om exempelvis 32 st RGB-färgvärden ska lagras så behövs tre komponenter för varje texel. Detta ger en array av storlek 32 3 = 96. De första tre elementen kommer då att innehålla RGB-komponenterna hos den första texeln, nästa tre element innehåller det andra texelns komponenter och så vidare. Då mönstret är 1-dimensionellt så behövs endast en texturkoordinat för att referera till texturrummet. Denna brukar betecknas s-koordinat. Om vi återgår till exemplet där varje texel består av tre färgkomponenter betyder refereringen s = 0.0 den första texelns RGB-komponenter, s = 1.0 innebär den sista texelns RGB-komponenter och s = 0.5 den mittersta texelns komponenter Kvadratiska mönster En textur för en yta, eller en area, denieras vanligtvis med ett rektangulärt mönster, och positionerna i texturrummet refereras med tvådimensionella koordinater (s, t). Mönstret kan då exempelvis denieras i en tredimensionell array, där den tredje dimensionen utgör färgkomponenterna. Om till exempel ett mönster av RGB-värden ska lagras kommer arrayen att innehålla = 768 element. I ett tvådimensionellt texturrum har texturkordinaterna s och t värden som varierar mellan 0.0 och 1.0. Texlarna som motsvarar dessa

24 10 Kapitel 2. Grundläggande teori Figur 2.5: 5 5-textur med lagrad i en array med rader och kolumner. Bild från [17]. adresser kan lagras exempelvis i en array likt den i gur 2.5. Figuren visar en array för ett 5 5-mönster där varje cell i arrayen innehåller information om den motsvarande texelns färgvärde. Texturkoordinaterna (0.0, 0.0) i texturrummet refererar då den första texeln i den första raden medan (1.0, 1.0) refererar den sista texeln i den sista raden. Den här representation av färgvärden i en array kan göras på era olika sätt. Metoden som visades här är den som Direct3D använder sig av Volymmönster Man kan ytterliggare utöka texturrummet till tre dimensioner så att man refererar positionerna med tredimensionella (s, t, r) koordinater. Utökningen från två till tre dimensioner är analog med utökningen från en till två dimensioner och kommer inte att förklaras utförligare här. Detta är den högsta dimensionen på texturmönster som de vanliga 3D-graksystemen som Direct3D och OpenGL kan hantera idag Mappningsprocessen Mappningen av texturmönster går till så att man tilldelar texturkoordinater till positioner på objektet som ska mappas, de är koordinater i objektrymden (eng. object space) [3]. Dessa koordinater brukar för tvådimensionella objekt (ytor) kallas för (u, v) koordinater. Mellan st-koordinater och uv-koordinater sker en linjär transformation som beräknar vilket färgvärde från texturarrayen (gur 2.5) som ska tilldelas de olika pixlarna med hjälp av de tilldelade uvtexturkoordinaterna på ytan. För exempelvis ett linjärt mönster används de olika färgvärdena för att skapa en erfärgad linje mellan de två specicerade u- koordinaterna. Ytterliggare en transformation utförs, ett segement med pixlar på skärmen (bildrymden) ska mappas till ett objekt, denna transformation kallas för vy- och projektionstransformation. En överblick över mappningsprocessen visas i gur 2.6. Mappningsprocessen kan ske åt två håll, antingen kan man mappa texturmönstret till objektrymden för att sedan mappa vidare till bildrymden eller går man från varje pixel area i bildrymden till objektrymden till texturrummet. Att mappa ett texturmönster till pixelkoordinater kallas för texture scanning medan att mappa från pixelkoordinater till texturmönster kallas för pixel-order scanning. Detta illustreras i gur 2.6 där pilarna åt höger motsvarar texture scanning och pilar åt vänster är pixel-order scanning. Vanligtvis så använder man sig av

25 2.4. Texturmappning 11 Figur 2.6: Referenssystem för tvådimensionell texturrymd, objektrymd och bildrymd med transformationer. Figur 2.7: Mappningsprocessen enligt pixel-order scanning. Bild från [17]. pixel-order scanning på grund av att mappning av texturmönster till projektionsrymden gör att det valda textursegmentet inte säkert matchar pixelgränser vilket då gör att man måste utföra subpixel-beräkningar. Med pixel-order scanning så blir det dessutom enkelt att applicera texturltrering. Nackdelen är att inverserna av vy-, projektions- och texturmappningstransformationerna måste beräknas. Pixel-order scanningsprocessen visas i gur 2.7 mer om detta och texturltrering behandlas i kapitel Begränsningar Texturmappning kan lägga till mycket detaljer till ytor dock är de inte eektiva för att representera ojämnheter hos ytor, eftersom texturmappning inte gör någon skillnad för till exempel ljusitensitet för olika betraktningsvinklar eller från vilket håll ljuskällan benner [7]. Då fjädrar består av små ojämnheter, inte minst mellan olika fanstrålar behövs bättre tekniker. Det nns olika metoder för att ta hänsyn till de här sakerna, alla med sina fördelar och nackdelar. En vanlig och enkel metod att implementera i realtid är bump-mappning beskriven kortfattat i kapitel 2.4.7, en annan mycket mer avancerad och modern är

26 12 Kapitel 2. Grundläggande teori bidirectional texture functions redogjord för i kapitel Bump-mapping Bump-mapping går ut på att genom att applicera en funktion som ändrar på ytnormalen som används vid ljusberäkningarna. Man erhåller då en yta där man kan variera ljusitensiteten beroende på ojämnheter. Med hjälp av en så kallad bumptabell i samma storlek som den vanliga texturen kan man matcha partier hos texturmönstret med variationer hos normalen och få ett önskat utseende. Nackdelen är man fortfarande inte tar hänsyn vare sig betraktningseller belysningsposition vilket gör att fenomen där de små ojämnheterna döljer delar av ytan är inte möjliga att modellera. För mer information angående bump-mappning rekommenderas [3]. 2.5 Texturltrering När en yta textureras färgsätts varje pixel med hjälp av motsvarande texlar i en textur, enligt beskrivningen i kapitel 2.4. Men eftersom en texturerad yta kan vara på godtyckligt avstånd eller betraktad från en godtycklig vinkel är det bara i undantagsfall som en pixel överensstämmer exakt mot en texel, detta illustreras i gur 2.7. Hur en pixels färgvärde beräknas från en eller era olika texlar kallas för texturltrering, en form av interpolation Klassicering Man brukar dela in texturltrering i tre olika kategorier beroende på varför ltrering behövs utföras. De tre kategorierna är [17]: Förstoring (eng. magnication) Förminskning (eng. minication) MIP Inom dessa tre kategorier kan man utföra ltrering på olika sätt beroende på hur man prioritera kvalitet mot prestanda. De huvudsakliga typerna som det alltid nns hårdvarustöd för i dagens hårdvara är: Sampling av närmaste granne Linjär ltrering Anisotropisk ltrering I kommande delkapitel kommer dessa sex punkter att förklaras närmare i en ordning som motiverar deras existens Texturförstoring Texturförstoring uppträder då ytan benner sig nära betraktaren och kommer täcka ett stort antal pixlar. Då kommer en texel att vara större än en pixel och era pixlar mappas mot samma texel. För att mappningen ska fungera måste texturen skalas upp i upplösning så att en texel blir lika stor som en pixel, se gur 2.8.

27 2.5. Texturltrering 13 Figur 2.8: Figuren till vänster illustrerar texturförstoring, ett litet texturelement förstoras för att passa en större yta. Figuren till höger illustrerar texturförminskning, ett stort texturelement förminskas för att passa en mindre yta. Bild från [19] Texturförminskning Texturförminskning är det omvända scenariot jämfört med förstoring. Ytan be- nner sig långt ifrån och täcker ett litet antal pixlar och en pixel täcker era texlar. Texturen måste nu förminskas så upplösningen matchar pixlarnas upplösning, se gur Sampling av närmaste granne Sampling av närmaste granne är egentligen ingen ltrering och det är det man brukar syfta på när man inte använder sig av texturltrering [17]. Även om man inte använder texturltrering måste man göra något i de fall förstoring eller förminskning av textur behöver göras. Det som har hänt då är att det underliggande systemet (Direct3D, OpenGL, m..) har beräknat texturadressen som ett yttal som inte entydigt pekar ut en texel under mappningsprocessen beskriven i kapitel När ingen ltrering ska utföras avrundas det här värdet och den närmaste texeln returneras. Detta kan fungera bra när man vet att det kommer att vara små skillnader mellan texturens storlek och ytans storlek på skärmen. Risken är dock stor att artefakter uppkommer vid de områdena där den beräknade adressen ligger mellan två texlar. Systemet kan då växla abrupt mellan vilken texel som väljs och immer kan uppstå. Vid förstoring ger närmaste granne ett blockigt utseende och vid förminskning uppkommer aliasing och immer, för ett exempel på hur förstoring kan se ut se gur 2.9. Generellt så brukar man undvika sampling av närmaste granne och istället använda linjär ltrering, beskriven i kapitel Sampling av närmaste granne används när man specikt vill ha beteendet med att närmaste texel väljs för att inte få ett suddigt resultat som linjär ltrering kan ge. Detta är önskvärt vid vissa tillämpningar som exempelvis då en textur innehåller text Linjär ltrering Linjär ltrering är standardformen av texturltrering, när texturadressen har beräknats som ett yttal och inte pekar ut en entydig texel. För linjära mönster

28 14 Kapitel 2. Grundläggande teori Figur 2.9: Figurerna visar skillnaderna i bildkvalitet för en bild som har skalats upp med sampling av närmaste granne, linjär ltrering respektive bikubisk ltrering (ett högre ordningens lter). Bild från [21]. innebär det att man pekar mellan två texlar och för ett rektangulärt mönster så pekar adressen på en punkt som stängs in av fyra texlar i ett 2 2-mönster. I fallet rektangulära mönster, som trots allt är de vanligaste, kallas linjär ltrering för bilinjär ltrering och med det namnet menas att linjär ltrering utförs i två axlar. Den linjära ltreringen beräknar ett viktat medelvärde av färgerna för de texlar som ligger närmast, två texlar vid ett linjärt mönster och fyra texlar vid ett kvadratiskt mönster. Viktningen sker så att varje kringliggande texel får en vikt beroende på avståndet till den utpekade adressen. Resultatet blir att man erhåller jämna övergångar istället för skarpa som är fallet för sampling av närmaste granne, se gur 2.9. När kraftig ltrering behöver utföras så ger linjär ltrering ett suddigt resultat. Linjär ltrering har idag, som tidigare nämnts, ett bra stöd i hårdvara vilket gör att prestandaskillnaden mellan sampling av närmaste granne och linjär ltrering är mycket liten Anisotropisk ltrering Anisotropisk ltrering är den kraftfullaste formen av texturltrering som dagens 3D-hårdvara klarar idag. Det ligger utanför omfattningen hos det här examensarbetet men kort så tar anisotropisk ltrering hänsyn till vilken vinkel man tittar på ett texturerat objekt och inte bara rakt framifrån som linjär ltrering gör. Utför man linjär ltrering på dessa ytor så erhålls ett suddigt resultat vilket kan undvikas med anisotropisk ltrering Filtrering med högre ordningens lter Utöver sampling av närmaste granne och linjär ltrering som motsvarar nollte respektive första ordningens lter kan man utföra ltrering med hjälp av lter av högre ordning, se [11]. Filtrering med högre ordningens lter kan ge bättre bildkvalitet men eftersom dagens grakhårdvara inte har inbyggt stöd för dem får de implementeras genom att utföra era texturuppslagningar. Det gör att det blir en stor prestandakostnad och att högre ordningens lter sällan används för realtidsapplikationer. Se gur 2.9 för ett exempel på bildkvaliteten man kan erhålla med ltrering med ett högre ordningens lter.

29 2.6. MIP-mappning 15 Figur 2.10: Upplösningen minskar med hälften för varje mip-nivå n när man använder mip-mappning. 2.6 MIP-mappning MIP-mappning är en operation som används av två anledningar, dels för att det underlättar för texturförminskning och dels för att det det kan höja bildkvaliteten. Termen mip kommer från latin [3], multum in parvo vilket kan översättas till mycket på ett litet objekt Denition När texturförstoring sker så behövs, vid linjär ltrering av kvadratiska mönster, som mest 4 texlar tas hänsyn till. I fallet texturförminskning så kan i värsta fall hela texturen mappas till en pixel och väldigt många texturuppslagningar behöver göras, med dåliga prestanda som följd. För att komma till rätta med problemet har mip-mappning utvecklats vilket innebär att man använder förltrerade texturer i mindre storlek än originalet. När den texturerade ytan hamnar längre bort så börjar systemet använda den mindre förltrerade texturen istället för originalet. Dessa mindre texturer sparas tillsammans i minnet och brukar benämnas mip-nivåer. Den första nivån, nivå 0 är originalet, nivå 1 är en förminskad version och nivå 2 är en ytterliggare förminskad version och så vidare. Varje mip-nivå har hälften av upplösningen kring alla axlar än den föregående nivån, så om nivå 0 innehåller en textur som är så är nivå och nivå Se gur Eftersom mip-mappning använder sig av förltrerade texturer kan man kosta på sig att använda sig av mer avancerade ltreringsalgoritmer än den linjära ltrering som utförs i realtid på hårdvaran. Det gör att problemen med aliasing som moirémönster som kan uppstå vid förminskning av texturer inte bara kan reduceras genom att använda mip-mappning utan också höja prestanda såväl som förbättra bildkvaliteten. Kostnaden är blott en marginell ökning av minnesbehovet Texturltrering och mip-mappning När mip-mappning används syns det ofta väldigt tydligt när beräkningarna går från en mip-nivå till en annan. För att undvika det utför man ofta ännu ett steg av linjär ltrering som därför, analogt med bilinjär ltrering, kallas för trilinjär ltrering. Vid trilinjär ltrering utförs bilinjär ltrering på texturerna

30 16 Kapitel 2. Grundläggande teori vid de två närmaste mip-nivåerna där resultatet sedan viktas ihop med en linjär interpolation där viktningen är avståndet till mip-nivåerna. 2.7 Bidirectional texture functions När man vill karaktärisera utseende hos ytor inom datorgrak, vilket är ett fundamentalt problem, beror utseendet på era olika faktorer; vy, ljussättning och i vilken skala som materialet är betraktat från [6]. Vid en grov skala, där lokala variationer på ytan är på en subpixel-nivå, karaktäriseras utseendet väldigt bra av en BRDF. Vid en nare skala, där ytvariationer ger lokala variationer i ljusintensiteten så kan inte detta modelleras med en BRDF. Istället kan man använda sig av något som kallas för en bidirectional texture function, en BTF Motivering Vanliga texturer är en bra representation för att kunna representera material vid en n skala, de tar dock inte hänsyn till varifrån belysning eller betraktning sker. Tekniker som bump-mappning möjliggör att lägga till ett utseende av skrovlighet. De är hyfsade då de ger ett visst skrovligt utseende, men lokala skuggor från ojämnheter renderas inte. BRDF-modellen är tvärtom, vilket tidigare observerats, hänsyn tas från var belysning och betraktning sker men inte hur materialet ser ut Denition För att komma till rätta med problemet beskrivet i kapitel så föreslår [6] en kombination av de båda teknikerna. Resultatet blir en textureringsfunktion som är parametriserad av belysnings- och betraktningsvinklar vilken de kallar för en BTF, bidirectional texture function. En BTF blir då en sexdimensionell funktion på formen: T (s, t, θ v, φ v, θ l, φ l ) (2.5) Där s, t är de vanliga koordinaterna från den tvådimensionella textureringsfunktionen från kapitel θ v och φ v representerar betraktningsvinkeln med sfäriska koordinater och θ l och φ l representerar belysningsvinkeln på samma sätt. De är alltså utgående respektive inkommande vinkel från BRDF denitionen i kapitel Anskaning av data Att skapa en BTF är en process man kan dela upp i två olika steg, det första steget handlar om hur man får fram all nödvändig data. Det nns i huvudsak två olika metoder för att anskaa den data som är krävs av en BTF. Vilken man väljer är både en kostnadsfråga samt vad man ska använda sin BTF till. Den första metoden används när man vill visualisera ett verkligt material och representera alla dess egenskaper så verklighetstroget som möjligt. Metoden som är framtagen av [6] bygger på en mekanisk anordning där en kamera och en lampa kan röra sig i en halvsfär över materialet oberoende av varandra. Det är en lösning som är dyr, krånglig och tidskrävande, men om rätt utförd kan samla in data som i princip inte går att hämta på annat sätt.

31 2.8. Avslutning 17 Figur 2.11: Exempel på ett material av ull där betraktnings- och belysningsvinklar skiljer sig kraftigt. Bilderna från [16]. Den andra metoden används när det inte nödvändigtvis behöver se ut exakt som verkligheten [1], bara det ser bra ut. Den används när man vill ha dessa lokala variationer på ett material utan att behöva en extremt detaljerad mesh. Man skapar istället den här väldigt detaljerade meshen i en fristående renderare där man låter en kamera och ljuskälla röra sig på en halvsfär likt den första metoden. Där man sedan helt enkelt renderar ut sin BTF med strålföljning och andra verklighetstrogna men dock krävande metoder. Figur 2.11 visar ett material av ull från [16] där betraktnings- och belysningsvinklarna skiljer sig Lagring och rendering Eftersom en BTF är en sexdimensionell struktur, enligt formel 2.5, kräver den väldigt mycket minne att lagra, uppåt era hundra megabyte. Därför nns det era olika metoder för att koda informationen så det blir möjligt att lagra det i grakminnet och rendera med godkända prestanda. De olika metoderna bygger på att man tolkar formel 2.5 olika. Antingen tolkar man en BTF som en mängd tvådimensionella texturer betraktade och belysta från olika vinklar, eller så tolkar man formeln som era olika BRDF, en för varje position i 2D strukturen. Avancerade BTF-implementationer använder den senare metoden och kombinerat med smart kodning och kvantisering erhåller man en kompakt representation som är lämplig för lagring och rendering i hårdvara. Det nns väldigt många alternativ att göra detta, se [13, 10]. Dessa ligger dock utanför omfånget hos det här examensarbetet. Lösningen ligger istället i att använda ett trick föreslaget av [1] som bygger på att det just är fågelfjädrar som BTFtexturen ska användas till. Mer om detta i kapitel Avslutning Kapitlet har beskrivit grundläggande datorgrak samt introducerat begreppen lindenmayersystem (L-system) och bidirectional texture functions (BTF).

32 18 Kapitel 2. Grundläggande teori I kommande kapitel kommer dessa begrepp att knytas ihop och deras användbarhet vid rendering av fågelfjädrar kommer att beskrivas. Den grundläggande datorgraken underlättar förståelsen för teorin bakom implementationen av de här teknikerna.

33 Kapitel 3 Rendering av realistiska fågelfjädrar i realtid Det här kapitlet kommer att behandla teorin för hur fågelfjädrar kan modelleras och renderas i realtid med så hög realism som möjligt. Några olika metoder för att åstadkomma detta kommer att presenteras där den valda metoden sedan kommer att beskrivas i detalj. 3.1 Metoder Det nns ett antal metoder för att modellera fågelfjädrar och tekniker för att sedan rendera dem med hög realism. [9] behandlar hur man kan modellera fanstrålarna på fjäderns fan på ett väldigt generellt sätt så att systemet kan hantera ett ertal olika fjädertyper. De använder sig av individuella bézierkurvor för varje fanstråle, nackdelen med en så generell metod är att beskriva hur en hel fjäder ska se ut med ett fåtal parametrar. Även [15] använder sig av bézierkurvor för att modellera fanstrålar, de har dock valt ett system med att deniera ett par nyckel-fanstrålar för att sedan generera övriga med hjälp av interpolation. En intressant teknik som tyvärr ger ett något articiellt utseende. Metoder för att utföra själva renderingen och åstadkomma stor realism utan att behöva modellera även fanstrålarnas bistrålar som geometri är inte ett speciellt utforskat område. [1] presenterar dock en metod för att generera fjäderns fan och dess fanstrålar rekursivt med hjälp av ett lindenmayersystem (se kapitel 2.2). Vidare använder de sig av så kallade bidirectional texture functions (se kapitel 2.7) för att få med mikrostrukturen som bistrålarna utgör vid renderingen. Det är den här metoden som jag har valt att basera det här examensarbetet på och undersöka implementationsdetaljer med en sådan lösning. 3.2 Geometri En fjäder har en geometrisk struktur som är väldigt lik den hos växter. Spolen på en fjäder är lik en stjälk hos en blomma eller en trädstam. På en trädstam växer det grenar vilket motsvaras av fanstrålar hos en fjäder. I kapitel 2.2 så 19

34 20 Kapitel 3. Rendering av realistiska fågelfjädrar i realtid Figur 3.1: Illustration över de fem kurvorna som används för att modellera en fjäder, den högra guren har kurvorna separerade för ökad tydlighet. Bild från [1]. beskrevs att L-system används för att generera växter rekursivt, vilket motiverar att L-system borde vara lämpliga för att generera geometri hos en fjäder Modell Det nns väldigt många olika typer av fjädrar vilket visades i kapitel Det ställer till med svårigheter för ett system som ska modellera fjädrar, det här examensarbetet kommer därför att enbart behandla de så kallade konturfjädrarna (eng. contour feathers). När ordet fjäder används är det konturfjäder som menas. En fjäders spole och fanstrålar är väldigt långsmala med mjuka böjningar vilket gör att en fjäders geometri kan modelleras på ett enkelt och kraftfullt sätt genom att använda bézierkurvor. Figur 3.1 visar de olika kurvorna som använts för att modellera en fjäder, dessa är: Spolen modelleras med en bézierkurva r(t) Fanstrålarna som växer ut på spolens vänstra respektive högra sida sida modelleras med en bézierkurva b l (t) respektive b r (t) Två bézierkurvor med C 0 samt C 1 kontinuitet anger en klippningsyta för längden för de vänstra fanstrålarna o l (t) Två bézierkurvor med C 0 samt C 1 kontinuitet anger en klippningsyta för längden för de högra fanstrålarna o r (t) Dessutom har vi parametrar som anger: Var fanstrålarna börjar växa på spolen Spolens längd Spolens tjocklek Fanstrålarnas täthet på fan Hur stor andel naturliga variationer som fjädern innehåller

35 3.2. Geometri 21 För enkelhets skull antas alla fanstrålar på en sida av spolen se likadana ut så när som deras längder och kan därför modelleras med samma kurva. Denna kurva föryttas längs spolen för att skapa fanstrålar på korrekta positioner för att resultatet ska bli en fan. Längden på varje fanstråle avgörs av var fanstrålskurvan b(t) skär en klippningskurva o(t). Den intuitiva lösningen på var detta sker är att beräkna skärningspunkten där dessa två kurvor skär varandra. Nackdelen med detta är förstås att det blir väldigt mycket extra beräkningar vid skapade av geometrin. Det gör det till en dålig metod i de fall geometrin ska skapas under körning vid varje bildruta. En annan lösning är att sätta upp krav för de olika kurvorna, [1] föreslår att ställa kravet att fanstrålen som börjar växa vid r(t) ska sluta växa vid o(t). Med det kravet blir beräkningarna för längden hos fanstrålarna mycket snabb att beräkna men mycket av den frihet som beziérkurvor ger går förlorad. Klippningskurvorna o(t) kommer att bero väldigt mycket på fanstrålekurvorna b(t) och en förändring i den ena resulterar i en förändring i den andra. Resultatet är att det blir svårt att få antingen fanstrålskurvorna eller klippningskurvorna att se ut som man önskar. Då detta examensarbete inte innehåller någonting som gör att fjäderns geometri behöver beräknas era gånger så valdes metoden där skärningspunkter beräknas för att erhålla full frihet vid design av de olika kurvorna. Men i en mer praktisk applikation där yttre påverkningar tvingar fram förändringar hos fjädern rekommenderas en lösning där skärningspunkterna snabbt kan beräknas Generation Ett L-system ska användas för att skapa geometri bestående av primitiver som kan användas för att rendera fjädern. [1] föreslår ett L-system som genom att utnyttja de rekursiva egenskaperna där varje produktion bygger på med en liten byggsten åt gången. Spolen och fanstrålarna delas därför upp i sektioner där en sektion byggs på vid varje produktion. En sektion på spolen blir därför ett cylinderelement som har höjden av en triangelprimitiv medan en sektion på en fanstråle blir ett rektangulärt element med en triangelprimitivs längd. Det föreslagna L-systemet med produktioner på samma form som i formel 2.1 ser ut på detta sätt: N = {R(i), B L (i, j), B R (i, j)}, S = R(0) p 1 : R(i) : i < M B L (i, 0)B R (i, 0)R(i + 1) p 2 : B L (i, j) : j < M L B L (i, j + 1) p 3 : B R (i, j) : j < M R B R (i, j + 1) (3.1) Där M anger antalet sektioner som spolen består av, vilket i sin tur ger spolens längd och densiteten hos fanstrålarna. M L och M R anger längden hos den vänstra respektive högra fanstrålen, dessa beräknas vid produktionen p 1 när p 2 och p 3 anropas. Startsymbolen R(0) kommer alltså att generera en spole med en fan på varsin sida bestående av ett antal fanstrålar. Produktionen p 1 producerar ett litet segment av spolen enligt kurvan r(t) och växer en fanstråle på varje sida genom rekursion hos produktionerna p 2 och p 3. Produktionen p 2 producerar ett litet segment av den vänstra fanstrålen, vid den i:te sektionen hos spolen, enligt b l (t) medan p 3 fungerar på samma sätt för den högra sidan.

36 22 Kapitel 3. Rendering av realistiska fågelfjädrar i realtid Naturliga variationer Problemet med L-systemet i kapitel är att den resulterande fjädern inte innehåller några naturliga variationer och resultatet ser för perfekt ut. På en riktig fjäder så sitter närliggande fjädrar ihop med varandra för att förhindra att luft tränger igenom vilket är viktigt när fåglarna ska yga. Om den här kopplingen blir störd, då till exempel en liten kvist trycks igenom en fjäder så bildas, till synes, slumpmässiga glapp mellan fanstrålarna på samma sida av spolen. Detta är ett fenomen som är önskvärt att modellera medan grupper av fanstrålar fortfarande ska sitta ihop eftersom på fanstrålarna sitter det bistrålar med krokar som håller ihop dem. Detta modelleras enligt [1] genom att introducera externa krafter i L-systemet som då blir enligt följande: N = {R(i, F L, F R ), B L (i, j), B R (i, j)}, Σ = {O L, O R }, S = R(0, 0, 0) p 1 : R(i, F L, F R ) : i < M && F L F 0 && F R F 0 B L (i, 0)B R (i, 0)R(i + 1, F L + F e, F R + F e ) p 2 : R(i, F L, F R ) : i < M && F L > F 0 && F R F 0 [O L B L (i, 0)]B R (i, 0)R(i + 1, 0, F R + F e ) p 3 : R(i, F L, F R ) : i < M && F L F 0 && F R > F 0 B L (i, 0)[O R B R (i, 0)]R(i + 1, F L + F e, 0) p 4 : R(i, F L, F R ) : i < M && F L > F 0 && F R > F 0 [O L B L (i, 0)][O R B R (i, 0)]R(i + 1, 0, 0) p 5 : B L (i, j) : j < M L B L (i, j + 1) p 6 : B R (i, j) : j < M R B R (i, j + 1) (3.2) F L och F R är de totala ackumulerade krafterna på vänster respektive höger fanstråle. O L och O R är rotationer runt spolen för vänster respektive höger fanstråle som respons på krafterna F L och F R. Produktionerna p 1 till p 4 är fyra varianter på p 1 i L-system 3.1 och det är här krafterna introduceras. Nu när vi går längs spolens kurva r(t) och bygger upp spolen inkrementerar vi F L och F R med en slumpmässig extern kraft F e. Om F L (eller F R ) vid något tillfälle överstiger tröskelvärdet F 0 roteras den vänstra (högra) fanstrålen med en slumpmässig vinkel θ. Rotationen sker i planet som spolens och fanstrålens tangenter spänner upp vid punkten där spolens kurva r(t) och fanstrålens kurva b(t) skär varandra. Den slumpmässiga rotationsvinkeln beräknas enligt θ = λr k (s) där r k (s) är det k:te slumptalet som genereras med slumpfunktionens frö s. När rotationen är utförd nollställs F L (eller F R ) så ackumulationen börjar om igen. Om L-systemet skulle köras för varje bildruta kan s sparas så fjädern genereras på samma sätt varje gång. 3.3 Färgsättning med BTF Detta kapitel kommer behandla hur bidirectional texture functions kan användas för att modellera fjädrarnas struktur på en n nivå. Vidare kommer det beskrivas hur BTF-texturen kommer att representeras i grakminnet och vilka problem det nns för att stödja mip-mappning och texturltrering.

37 3.3. Färgsättning med BTF Översikt Fjäderns geometri modelleras och genereras med ett L-system som är beskrivet i kapitel 3.2. Det som modelleras där är spolen och fanstrålarna. Bidirectional texture functions kommer att användas för att ge en tredimensionell känsla till fjäderns fan och för att modellera fanstrålarnas bistrålar. För att få fram informationen som BTF-texturen kommer att innehålla så kommer metoden från kapitel där man modellerar sitt material i ett fristående program som utför en högkvalitativ rendering med bland annat strålföljning att användas. Utöver BTF-texturen på fanstrålarna så kommer en vanlig tvådimensionell textur att användas för att ge mönster i en större skala till fjäderns fan. Detta sker på traditionellt sätt beskrivet i kapitel Sampling Enligt denitionen av BTF i formel 2.5 så är fyra av parametrarna till den sexdimensionella funktionen latituder och longituder i ett sfäriskt koordinatsystem som anger varifrån betraktning respektive belysning sker. Men eftersom BTFtexturen ska lagras med en ändlig storlek, och dessutom så liten som möjligt, måste dessa latituder och longituder samplas i diskreta punkter. I [6] har man jämt fördelade samplingar över halvsfären, jag har istället valt en lösning på steg i både latitud och longitud på 15 grader. Detta innebär en större koncentration av punkter vid sfärens nordpol. Men då beräkningarna blir enklare för texturltreringen (kapitel 3.3.5) har ändå denna lösning valts. Eftersom materialet ligger på ekvatorn så behövs inga samplingar då latituden är 0 grader, materialet skulle inte synas. Längst upp på halvsfären, vi kan kalla det nordpolen, där latituden är 90 grader så säger inte longitud någonting vilket gör att det räcker med en sampling där. Summerat har vi fem latitudvinklar (15, 30, 45, 60 och 75 ) där vi ska sampla longitud och en latitudvinkel (90 ) där vi inte ska sampla longitud. Ett varv på 360 grader ger 24 longitudsamplingar och totalt ger detta = 121 samplingar. Men eftersom belysningsvinkel ska kunna anges oberoende av betraktningsvinkel har vi = olika kombinationer. Alla dessa samplingar illustreras i gur 3.2 där de ligger på en halvsfär Kompaktering En fjäders fan har ett speciellt utseende. Alla fanstrålar ligger arrangerade parallellt och ser i grunden likadana ut, sånär på färgen då en fjäder kan ha mönster av olika slag. Istället för att texturera alla fanstrålar samtidigt med en tvådimensionell textur så kan man istället texturera dem individuellt med en linjär textur som läggs på tvären på varje fanstråle och som sedan repeteras längs hela fanstrålens längd. Översätter man detta resonemang till BTF-texturering så innebär det att istället för att använda en sexdimensionell BTF så använder man sig av en femdimensionell på detta sätt: T bb (s, θ v, φ v, θ l, φ l ) = T (s, t 0, θ v, φ v, θ l, φ l ) (3.3) Detta resulterar i att kraven på minne minskar avsevärt, med en faktor på 64 eller 128 beroende på hur högupplösta BTF-texturer man använder. Eftersom BTF:en ska användas som en textur måste den även lagras som en textur, men

38 24 Kapitel 3. Rendering av realistiska fågelfjädrar i realtid Figur 3.2: Samplingar vid olika betraktnings- och belysningsvinklar för BTF. Materialet är i origo och samplingarna är från halvsfärens hörn. Den utpekade punkten har de sfäriska koordinaterna θ = 30, φ = 15. enligt kapitel så kan en textur inte vara femdimensionell utan som högst tredimensionell. För att komma runt denna begränsning så representeras de båda variablerna för belysningsvinkeln som en linjär funktion, vilken kan lagras i en dimension, som utgör textur-yta transformationen i texturmappningsprocessen från kapitel Variablerna för betraktningsvinkeln representeras på samma sätt. Istället för en yta med (u, v)-koordinater så har vi alltså en linje med (u, θ v, φ v, θ l, φ l )-koordinater. När den här funktionen ska designas står två önskvärda egenskaper mot varandra; att använda så lite minne som möjligt och att betrakta alla latituder på samma sätt. Ska alla latituder behandlas på samma sätt, dvs att inte spara minne vid nordpolen då longitud inte säger någonting behövs 144 minnesplatser istället för 121 enligt kapitel 3.3.2, det låter inte så mycket mer men med tanke på att storlekar på texturer ska vara en potens av två innebär det att det inte ryms i 128 texelar utan 256 måste användas och då vi har två individuella vinklar blir minnesökningen 4 gånger så stor. Funktionen designades därför på detta sätt: { f(φ, θ) = 0, φ = 90 f(φ, θ) = φ 15 + θ , φ 90 (3.4) Den här funktionen används både för betraktningsvinkel och belysningsvinkel och gör så att vi kan lagra BTF:en i en tredimensionell textur och formel 3.3 reduceras till: T BT F (s, f v, f l ) (3.5) Stödja mip-mappning Det är önskvärt att stödja mip-mappning på BTF-texturen eftersom fanstrålarna är väldigt små vilket kommer resultera i texturförminskning vilket i sin tur kan resultera i moirémönster. Problemet med traditionell mip-mappning är att alla axlar minskas till halva upplösningen för varje mip-nivå, se kapitel Det innebär dels det önskvärda, att detaljnivån i texturen minskas, men även att betraktnings- och belysningsvinklarna får mindre minnesutrymme vilket leder till att det inte får plats lika många olika vinklar. Det stora problemet är

39 3.3. Färgsättning med BTF 25 dock att formel 3.4 inte längre gäller och att använda sig av onödiga dynamiska villkor i beräkningarna ger oönskade kostnader i form av prestanda. Istället valdes en metod där kompakteringsfunktionen kan vara likadan för alla mip-nivåer. MIP-mappnings-beräkningarna sker explicit genom att utöka storleken på texturen så den rymmer alla mip-nivåer och att införa ytterliggare en linjär funktion för att packa in mip-mappning i en av axlarna hos textureringsfunktionen. Eftersom att man vet att parametrarna för betraktnings- och belysningsvinkel alltid understiger 128 så implementeras mip-mappning vid en av dem. En ny mip-nivå kan således läggas vid var 128:e minneselement enligt följande: { f(φl, θ l, n) = 128n, φ l = 90 f(φ l, θ l, n) = φ 15 + θ n + 1, φ l 90 (3.6) Symbolen n betecknar mip-nivå. Då de endimensionella mönstrena som parametriseras av belysnings- och betraktningsvinklarna halveras i upplösning för varje mip-nivå, trots att de lagras i en struktur som inte minskar sin storlek, innebär att parametern s i formel 3.5 måste anpassas. Ingen direkt översättning från u-koordinaten från ytan kan längre göras. För till exempel u = 1.0, n = 1 så används bara halva strukturens minnesutrymme och s måste översättas till 0.5. Generaliserat till godtyckliga mip-nivåer ger: s = f s (u, n) = u n + 1 Textureringsfunktionen 3.5 förändras för sista gången till: Stödja texturltrering (3.7) T BT FMIP (f s, f v, f l ) (3.8) Både formel 3.4 och formel 3.6 för att representera en femdimensionell (och en sexdimensionell i mip-mappningsfallet) struktur som en tredimensionell struktur ställer till problem för den inbyggda texturltreringen i Direct3D (eller OpenGL). När man vanligtvis lagrar en textur, oavsett om den är rektangulär eller en volym nns det alltid en kontinuitet där två närliggande texlar ska vara närliggande även efter rendering, vilket linjär ltrering bygger på (se kapitel 2.5.5). Detta gäller dock inte för representationen för de texturer som används med textureringsfunktionen i formel 3.8. Om man exempelvis tittar på formel 3.4 och observerar vad som händer då man kontinuerligt ökar f från noll. θ kommer att räknas upp från sitt lägsta till sitt högsta tillåtna värde. När det högsta värdet har nåtts så nollställs θ till sitt lägsta tillåtna värde och φ inkrementeras. Denna process utförs tills både θ och φ har nått sina högsta värden. Vid de tillfällen som θ ökas är det tillåtet att utföra interpolation på två närliggande texlar. Om linjär interpolation utförs där θ nollställs blir inte interpolationen enbart en interpolation över θ utan även över φ eftersom φ har ändrats. Dessutom blir inte ens önskade linjära interpolationer över φ möjliga eftersom dessa texlar aldrig ligger bredvid varandra. Trilinjär ltrering mellan olika mip-nivåer går inte heller att utföra på normalt sätt, dels eftersom formel 3.6 används med liknande resonemang som ovan men också eftersom mip-mappning enligt kapitel inte implementerats på normalt sätt.

40 26 Kapitel 3. Rendering av realistiska fågelfjädrar i realtid Explicit texturltrering För att komma till rätta med problemen beskrivna i kapitel måste istället explicit texturltrering utföras, där texturförfrågningar för varje inblandad texel i ltreringen utförs och att linjära interpolationer sedan utförs explicit. Nackdelarna med denna procedur är att de inbyggda hårdvaruoptimeringarna beskrivna i kapitel inte längre kommer att kunna utnyttjas och ltreringen kommer att kräva mycket mer prestanda än normalt. För att åtminstone undvika explicit ltrering över θ som ligger sekventiellt och kontinuerligt vid alla punkter utom vid diskontinuiteten där φ räknas upp. Det första värdet i sekvensen representerar θ = 0 och det sista θ = 345 uppstår problemen när värden mellan θ = 345 och θ = 360 ska beräknas. Den enkla lösningen är att lagra värdet för θ = 0 (= 360 ) även på slutet av sekvensen. Då φ enligt kapitel antar fem olika värden då θ räknas upp ökar minnesmängden från 121 till 126, vilket fortfarande är under 128 så inget ytterliggare minne kommer att behövas. Funktionen för att kompaktera betraktningsvinkeln blir då enligt följande: { f(φv, θ v ) = 0, φ v = 90 t = f(φ v, θ v ) = φ 15 + θ , φ v 90 (3.9) Samt belysningsfunktionen där mip-mappning läggs in: { f(φl, θ l, n) = 128n, φ l = 90 r = f(φ l, θ l, n) = φ 15 + θ n + 1, φ l 90 (3.10) När interpolation ska ske över både φ och θ så behöver bara särskild hänsyn tas till beräkningarna över φ det som ska utföras är på ett liknande sätt som trilinjär ltrering fungerar, se kapitel Texturuppslagningar sker för de båda närliggande φ och det slutgiltiga värdet viktas ihop med det önskade φ. Eftersom vi har både φ v och φ l samt n som anger mip-nivå ger det att vi måste utföra 2 3 = 8 texturuppslagningar med textureringsfunktionen 3.8 för att få linjär ltrering Exempel på beräkning av färgvärde Om vi önskar beräkna en texturuppslagning med linjär ltrering enligt kapitel där u = 0.5, φ v = 20, θ v = 50, φ l = 40, θ v = 110, n = 0.5 så börjar de närliggande φ v, φ l och n att beräknas enligt φ v1 = 15, φ v2 = 30, φ l1 = 30, φ l2 = 45, n 1 = 0, n 2 = 1 eftersom vinklarna är samplade med 15 graders mellanrum. De värden på s som kommer användas är s 1 = f s (u, n 1 ) = 0.5, s 2 = f s (u, n 2 ) = Då vi har två alternativ vid beräkningen av formel 3.9 och fyra alternativ vid beräkningen av formel 3.10 så ger det som visades i kapitel åtta texturuppslagningar med funktion 3.8 enligt: c 1 = T BT FMIP (s 1, f v (φ v1, θ v ), f l (φ l1, θ l, n 1 )) c 2 = T BT FMIP (s 1, f v (φ v1, θ v ), f l (φ l2, θ l, n 1 )) c 3 = T BT FMIP (s 1, f v (φ v2, θ v ), f l (φ l1, θ l, n 1 )) c 4 = T BT FMIP (s 1, f v (φ v2, θ v ), f l (φ l2, θ l, n 1 )) c 5 = T BT FMIP (s 2, f v (φ v1, θ v ), f l (φ l1, θ l, n 2 )) c 6 = T BT FMIP (s 2, f v (φ v1, θ v ), f l (φ l2, θ l, n 2 )) c 7 = T BT FMIP (s 2, f v (φ v2, θ v ), f l (φ l1, θ l, n 2 )) c 8 = T BT FMIP (s 2, f v (φ v2, θ v ), f l (φ l2, θ l, n 2 ))

41 3.4. Avslutning 27 Om en funktion för linjär interpolation denieras som: lerp(x, y, t) = x + t(y x) Där linjär interpolation sker mellan x och y beroende på t så att funktionen för t = 0 är lika med x och för t = 1 så blir funktionen y. Interpolationen över de beräknade färgvärdena sker nu stegvis enligt: c 1,2 = lerp(c 1, c 2, φ l φ l1 φ l2 φ l1 ) c 3,4 = lerp(c 3, c 4, φ l φ l1 φ l2 φ l1 ) c 5,6 = lerp(c 5, c 6, φ l φ l1 φ l2 φ l1 ) c 7,8 = lerp(c 7, c 8, φ l φ l1 φ l2 φ l1 ) c 1,2,3,4 = lerp(c 1,2, c 3,4, φv φv 1 φ v2 φ v1 ) c 5,6,7,8 = lerp(c 5,6, c 7,8, φv φv 1 φ v2 φ v1 ) c = lerp(c 1,2,3,4, c 5,6,7,8, n n1 n 2 n 1 ) Där c är det linjärt ltrerade färgvärdet. 3.4 Avslutning I det här kapitlet har teorin för hur fjädrar kan modelleras och renderas med hjälp av datorgrak beskrivits. Fjädrarnas geometri modelleras med ett fåtal bézierkurvor och genereras med ett lindenmayersystem (L-system). Renderingen sker sedan med textureringstekniken bidirectional texture functions (BTF) för att åstadkomma hög realism vid olika betraktnings- och belysningsvinklar. Teorin beskriver även lösningar för hur teknikerna ska kunna användas i realtid där de viktigaste kraven är uppfyllda. Nästa kapitel beskriver hur teorin beskrivet i detta kapitel kan implementeras där lösningar på svårigheter med implementationen även redogörs.

42 28 Kapitel 3. Rendering av realistiska fågelfjädrar i realtid

43 Kapitel 4 Implementation I detta kapitel kommer systemet som implementerats att presenteras. Kapitlet är indelat i tre delar, den första behandlar systemet på en övergripande nivå. De övriga två delarna behandlar implementationsdetaljer om implementationen av lindenmayersystemet beskrivet i kapitel 3.2 och implementationen av bidirectional texture functions beskrivet i kapitel System Den här delen kommer att behandla systemet på en övergripande nivå samt gå igenom val av programmeringsspråk och vilka verktyg som har blivit konstruerade och använda Programmeringsspråk och plattformar Detta systemet har utvecklats helt och hållet för windowsplattformen, det är den naturliga plattformen för sådana här tillämpningar. 3D-graks API:et som har använts är Microsoft Direct3D men det skulle gå lika bra att välja OpenGL. Ett ertal olika programmeringsspråk har använts vid implementationen, huvudsystemet är skrivet i C++ då det ger bra exibilitet och objektorientering. Det viktigaste är dock att eftersom det här examensarbetet går ut på att rendera fjädrar i realtid enligt kapitel 1.2 så ställer det väldiga prestandakrav. Kombinationen C++ och Direct3D blir därför ett naturligt val för den här implementationen. Delen som utförs av den programmerbara grakhårdvaran är skrivet i HLSL, högnivå shaderspråket för Direct3D. Ett par egna hjälpverktyg har skrivits för att underlätta skapande av BTF-texturen och dessa var skrivna i C# som har ett stort klassbibliotek som underlättade när det viktigaste kravet var att hjälpprogrammen skulle gå snabbt att skriva Externa verktyg Ett par externa verktyg har använts, speciellt då BTF-texturen konstruerades. Som tidigare nämndes i kapitel användes en extern renderare för att skapa texturerna. Programmet som har använts är Autodesk Maya. I Maya kan modellering av geometri, animation och rendering utföras. Själva renderingen utfördes av mental images strålföljare mental ray. 29

44 30 Kapitel 4. Implementation När renderingen var utförd användes Adobe Photoshop för efterbehandling av bilderna Egna verktyg Tre stycken egna verktyg, i form av fristående applikationer, skrevs för att underlätta skapandet av BTF-texturen. Det första genererade korrekta sfäriska koordinater för placering av kamera och riktning hos belysningen. Det andra verktyget genererade en scen i Maya där koordinater sätts för alla bilder, se kapitel Det sista verktyget byggde ihop den tredimensionella strukturen som lagrar en BTF-textur. 4.2 Lindenmayer system Denna del beskriver hur L-systemet implementerades i C++ och Direct3D Implementation i C++ L-system brukar enligt kapitel vanligtvis implementeras i språket Logo medan detta examensarbete enligt kapitel ska implementeras i C++ blir situationen lite annorlunda mot exemplet med snöingan i kapitel Snöingan kunde enkelt denieras som ett L-system och L-systemet med dess produktioner var i princip direkt överförbara till Logo. Detta är inte möjligt för C++, utan det nns istället två lösningar. Den första lösningen är att skriva en tolk för Logo i C++ som översätter turtle graphics till Direct3D. Det ger en generell lösning som kan hantera alla olika L-system som denieras. Nackdelen är förstås att det skulle bli en tidskrävande lösning för ett system som egentligen bara behöver hantera ett visst L-system, det som är denierat i formel 3.2. Det leder oss in på den andra metoden som hårdkodar in detta L-system i fjäderrenderingssystemet. För startsträngen samt alla produktionsregler från formel 3.2 så denieras funktion i C++ som tar samma parametrar som produktionsregeln och L-systemet implementerades på följande sätt: Alla icketerminerande symboler representeras av en funktion En icketerminerande symbol på högersidan på en produktionsregel utförs av ett funktionsanrop Produktionsreglernas villkor utförs i början på den representerande funktionen som returnerar vid falskt resultat Icketerminerande och terminerande symboler har en tolkning som utgörs av ett kodblock i C++ Resultatet blir då alltså ett system som endast hanterar ett visst L-system, men eftersom systemet endast ska användas till fjädrar är denna begränsning helt godtagbar. Det nns två huvudsakliga typer av produktionsregler i L-systemet denierat i formel 3.2, de som ska skapa spolen och de som ska skapa fanstrålar. Principerna för hur dessa två produktionsregler implementeras redogörs för i kapitel respektive

45 4.2. Lindenmayer system Generation av spole Produktionsreglerna som ska generera segment av spolen tar tre parametrar, se formel 3.2, de är vilket segment som ska generaras samt hur stor kraften är på de vänstra respektive högra fanstrålarna vid denna position. Ett segment av spolen är en liten cylinder med en känd radie som är placerat runt en bézierkurva r(t) enligt kapitel Cylinderns hölje är det som ska renderas i Direct3D. För att kunna skapa höljet behöver ett antal konstanter kännas till förutom kurvan r(t). Vi känner till vilket segment som ska genereras, det vill säga var på kurvan r(t) cylindern ska börja, alltså cylinderns underkant. För att kunna beräkna var cylindern ska sluta behövs konstanten M som anger hur många segment spolen ska utgöra eftersom med den så kan segmentens längd beräknas med L M där L är spolens längd. Vidare behövs spolens lutning vilket erhålls genom att beräkna r(t):s derivata r (t). Detta innebär alltså att cylinderns mitt ska utgöras av linjen som går igenom punkterna r(t) och r(t) + 1 M r (t)). Höljet skapas genom att rotera kända punkter på höljet runt denna linje, en punkt vid cylinderns underkant och en punkt vid dess överkant. För att underlätta beräkningarna så beräknar vi punkterna där z = 0 vilket gör att vi kan anta att bézierkurvan r(t) ligger i (x, y)-planet. Dessa punkter (eller vektorer) blir för en oroterad cylinder: q 1 = r(t) + dˆx q 2 = r(t) + 1 M ŷ + dˆx Där d anger cylinderns radie. Eftersom r (t) som är kurvans tangent antas ligga i (x, y)-planet så kan normalen n enkelt beräknas enligt: r y(t) n = r x(t) r z(t) Punkterna som ska roteras blir således: q 1 = r(t) + d n q 2 = r(t) + 1 M r (t) + d n Själva rotationen utförs sedan enklast med en rotationskvaternion runt r (t) med fördenierade steg som beror på hur n cylinder som önskas. Med hjälp av dessa punkter skapas nu Direct3D primitiver i form av trianglar genom att använda de två punkterna vid ett rotationssteg med de två punkterna från nästa rotationssteg. Dessa fyra punkter som utgör ett rotationssegment bildar två trianglar. Funktionen har några er uppgifter efter att cylindersegmentet är genererat, slumpmässiga krafter läggs till enligt kapitel samt så beräknas fanstrålarnas längd enligt kapitel Generation av fanstråle Produktionerna som genererar höger respektive vänster fanstråle är väldigt lika varandra och kommer här att behandlas som en och samma produktion. Funktionen som genererar fanstrålen tar emot två parametrar, vilket segment på spolen fanstrålen sitter på samt vilket segment av fanstrålen som ska generaras. Längden L på fanstrålen är förberäknad enligt kapitel vilket ger att

46 32 Kapitel 4. Implementation Figur 4.1: Genereration av fanstråle samt BTF-texturering av denna. Bild från [1]. M fanstrålesegment ska genereras. Tillsammans ska alla segment ligga längs en bézierkurva b(t) där varje segment representeras av en rektangel. Följande resonemang antar att fanstrålen växer åt höger, relativt spolen sett. För att kunna skapa primitiver måste rektangelns fyra hörn q bl, q br, q tl och q tr beräknas. För att undvika beräkningar av punkterna tillhörande nästa iteration av den här produktionen används en primitiv i Direct3D som kallas för triangelstrip vilken gör att en triangel renderas för varje skickad punkt med hjälp av de två föregående. Kortfattat innebär det att endast q bl och q tl behöver beräknas. Punkten där fanstrålen ska börja växa kallas p vilket ger, om b(t) denieras till att ange rektangelns underkant, q bl = p + b(t). För att beräkna den andra punkten så måste en normal n till b(t) beräknas på samma sätt som i kapitel vilket ger q tl = p + b(t) + d n, där d anger fanstrålens tjocklek. En genererad fanstråle visas i gur Normaler Utöver positioner för hörn i de trianglar som genererades för spolen och fanstrålarna i kapitel respektive måste det genereras normaler som används i BTF-beräkningarna, se kapitel De normaler som användes vid beräkningarna där triangelprimitiverna beräknades kallas egentligen för binormal som är den vektor som är ortogonal mot både tangenten och normalen. Att de är binormaler istället för normaler är eftersom normalen är denierad som att vara orgogonal mot ytan. Om T är tangenten och B är binormalen så är: Där N är normalen Texturkoordinater N = T B Utöver endimensionella texturkoordinater till textureringsfunktionen från formel 3.8 så kommer fjäderns fan att multitextureras med en tvådimensionell

47 4.3. Bidirectional texture functions 33 textur enligt kapitel Detta gör att två par texturkoordinater behövs, en endimensionell och en tvådimensionell. Den endimensionella texturkoordinaten för BTF-texturen som läggs på tvären på fanstrålen enligt kapitel denieras så att den går från underkant till överkant. Vid de punkter från kapitel respektive som går igenom bézierkurvan som representerar ytan, som alltid låg på underkant så sätts texturkoordinaten till värde 0.0 och på punkterna vid överkant till 1.0. När det gäller den vanliga texturen antas den vara denierad över den minsta rektangel som innesluter de två klippningskurvorna o l (t) och o r (t) från kapitel I Direct3D är det denierat att det övre vänstra hörnet ska adresseras med (0, 0) och det nedre högra med (1, 1) [17]. Positionerna för de beräknade punkterna projiceras till denna rektangel och den utpekade adressen används som texturkoordinat. 4.3 Bidirectional texture functions Det här kapitlet beskriver hur processen med att skapa en BTF-textur och hur rendering av den utfördes Scen för generation av textur För att generera en BTF-textur från en detaljerad modell enligt kapitel användes det externa modellerings-, animerings- och renderingsverktyget Autodesk Maya. En fanstråle modellerades med dess bistrålar som överlappas av bistrålar från närliggande fanstrålar, se gur 4.2. Den här modelleringen utförs med en hög detaljnivå som inte är möjlig att praktiskt använda för alla fanstrålar vid realtidsrenderingar. För att representera de betraktnings- och belysningsvinklar, som denierades i kapitel 3.3.2, skapades en kamera och en ljuskälla som föryttas och riktas enligt de bestämda samplingspunkterna. Varje kombination av de önskade betraktnings- och belysningsvinklarna utgör en bildruta i en animation där just kameran och ljuskällan ändras. När både modellen av fanstrålen med bistrålar och animationen är denierad renderas resultatet ut med hjälp av en strålföljare för att erhålla bästa möjliga resultat. Alla bildrutor renderas nu ut som vanliga tvådimensionella RGBA bilder där alphakomponenten representerar mellanrumen hos de överlappande bistrålarna. Eftersom det i kapitel angavs att det nns olika kombinationer av betraktnings- och belysningsvinklar måste en praktisk metod för att skapa den här animationen tas fram. I Maya nns det möjlighet att spara en scen i ett ACSII lformat vilket gör det möjligt att procedurellt bygga upp en animation med hjälp av ett externt verktyg, vilket var precis vad som gjordes Efterbehandling av bilder När alla bilder som ska utgöra BTF-texturen parametriserade av betraktningsoch belysningsvinklar efter proceducen beskriven i kapitel är skapade är de på en tvådimensionell form. Men som det beskrevs i kapitel där den sexdimensionella textureringsfunktionen reducerats till en femdimensionell funktion enligt formel 3.3 så är det endimensionella texturer som ska parametriseras av betraktnings- och belysningsvinklar. En efterbehandling av dessa texturer utförs

48 34 Kapitel 4. Implementation Figur 4.2: Sampling av modell över fanstrålar med bistrålar för att skapa en BTF. Bild från [1]. därför för att reducera dem till endimensionella texturer. Reduceringen utförs av ett externt bildbehandlingsprogram som har avancerade algoritmer för omskalning av bilder, här användes så kallad bikubisk skalning, en högre ordningens ltrering, se kapitel Vidare så är det viktigt att välja ett verktyg som har stöd för automatisering av processen eftersom det enligt kapitel är bilder som ska skalas om, alla på samma sätt. Utöver denna omskalning så endimensionella bilder erhålls ska, enligt kapitel 3.3.4, stöd för mip-mappning nnas vilket innebär att förltrerade bilder för varje mip-nivå, där varje mipnivå består av bilder, ska skapas. Jag valde att använda sju mip-nivåer, där nivåerna har parametriserade texturer av storlekarna 64 1, 32 1, 16 1, 8 1, 4 1, 2 1 och Kompaktering till BTF De erhållna bilderna från alla sju mip-nivåerna efter skalningen beskriven i kapitel ska kompakteras till en volymstruktur enligt kapitel och för att kunna användas i Direct3D med textureringsfunktionen från formel 3.8. Filformatet som används måste stödja volymtexturer, och eftersom systemet är utvecklat för Direct3D valdes Microsofts lformat DirectDraw Surface med - ländelse.dds. Den erhållna volymen kommer ha dimensionerna eftersom varje dimension ska vara en tvåpotens. Varje texel i den här texturen lagrar ett 32 bitars RGBA element vilket ger den totala minnesanvändningen på = bytes = 32 megabytes. Det är mycket minne för en textur men då dagens grakhårdvara i värsta fall har minst 64 megabytes grakminne är det godtagbart. Informationen som ska placeras i den här volymen kommer att hämtas från sju mip-nivåer, där varje mip-nivå består av bilder, totalt bilder. Detta innebär att det är nödvändigt att även här utvecka ett verktyg som automatiserar processen.

49 4.4. Avslutning Rendera på GPU Det som nu återstår är att använda BTF-texturen som skapades i kapitel Implementationen utförs med hjälp av programmerbara shaders på modern gra- khårdvara. Språket som användes var Direct3D:s högnivåspråk för shaderprogrammering High-level shading language, HLSL. Teorin för implementationen är beskriven i kapitel 3.3 med ett beräkningsexempel i kapitel En översiktsbild på fanstrålar med genererad geometri och texturkoordinater som ska renderas med BTF-textur visas i gur 4.1. Programmet delades upp på vanligt sätt i ett vertexprogram och ett pixelprogram. Beräkning av aktuella belysningsoch betraktningsvinklar utfördes av vertexprogrammet medan pixelprogrammet använder dessa och utför texturuppslagning av BTF-textur med mip-mappning och trilinjär texturltrering. 4.4 Avslutning Detta kapitel har beskrivit implementationen av ett system som kan rendera fjädrar i realtid. Det har beskrivits hur fjädermeshar genereras från modeller med bézierkurvor och lindenmayersystem och hur stora BTF-strukturer kan förpackas i ett format som är användbart vid rendering med Direct3D. Nästa, sista, kapitlet går igenom resultaten från detta arbete och från denna implementation med dess olika fördelar och nackdelar.

50 36 Kapitel 4. Implementation

51 Kapitel 5 Resultat Det här kapitlet beskriver resultatet av implementationen och vilken slutsats som har dragits av dessa. Men det beskrivs också vilka problem som nns och vad som bör göras i framtiden för att ytterliggare förbättra systemet. 5.1 Geometri Genom att använda lindenmayersystemet från formel 3.2 kan konturfjädrar genereras med vilket utseende som helst genom att deniera fem olika bézierkurvor. Resultatet är ett system som är väldigt enkelt att använda men samtidigt ger väldigt stor frihet. Ett stort tröskelvärde F e gör att spretigheten hos fanstrålarna blir låg. Hög spretighet ger en struktur som påminner mycket om semiplumes. 5.2 Utseende Genom att använda en BTF-textur får fjäderns fan ett utseende där fanstrålarna får ett tredimensionellt utseende och genomskinligheten beror på hur överlappningen hos bistrålarna ser ut från aktuella betraktnings- och belysningsvinklar. En inzoomad fan visas i gur 5.1. Figuren visar fanstrålar som ser ut som en cylinder och hur utseendet på denna varierar över bilden där betraktnings- och belysningsvinklarna varierar. Cylinderutseendet kommer helt och hållet från BTFtexturen som skapades genom att modellera fanstrålen som en cylinder med en vanlig blinnshader. Detta illustrerar också vilken frihet som BTF-tekniken ger då, likt vanliga texturer, utseendet beror på grakern som har skapat texturen, men med en kraftigare tredimensionell känsla. 5.3 Prestanda Implementationen utfördes på en PC med en Intel Pentium D 2.66GHz CPU med 1GB internminne och en ATI Radeon X1900GT 256MB grakprocessor. Då L-systemet inte beräknas för varje bildruta har det inte inkluderats i prestandatesterna. Då implementationen i sig inte är optimerad men dessutom är utförd med en icke-optimerad grakmotor så kan prestandasiororna tolkas som något 37

52 38 Kapitel 5. Resultat Figur 5.1: Inzoomad vy över fan med fanstrålar. Fanstrålarna har ett tredimensionellt utseende och ljussätts via BTF-texturen. av värsta möjliga vid en implementation av detta system. Testerna utfördes vid ett par olika skärmupplösningar och den renderade scenen består enbart av en fjäder konstruerad med detta system. Prestandatestets resultat nns i tabell 5.1. Skärmupplösning Bildrutor/s (fps) Tabell 5.1: Resultat av prestandatest 5.4 Problem För att fjädern ska se korrekt ut på avstånd är det viktigt att mip-mappning är implementerat. Mip-mappning enbart på texturer som hos denna implementation har dock inte visat sig tillräcklig då moirémönster ändå uppstår, se gur 5.2. Vad det beror på är inte utrett men problemet ligger antagligen i att då geometrin från de olika fanstrålarna ligger nära varandra. De kommer då på avstånd att få en tjocklek som är mindre än en pixel på skärmen. Detta innebär att när pixeln sedan färgsätts vid textureringen så ligger ett ertal ytor inom pixelns område. En lösning på det här problemet vore att införa en form av mip-mappning även på geometrin, där L-systemet genererar en mindre detaljerad struktur, där era fanstrålar sitter ihop, när avståndet blir större. 5.5 Slutsats Det här examensarbetet har byggt mycket på de två teknikerna att generera geometri med L-system och att använda BTF-texturer. Det har visat sig vara mycket kraftfulla tekniker som kan ge väldigt goda resultat i form av bildkvalitet. När det gäller att använda L-system för att generera geometri för fjädrar är

53 5.5. Slutsats 39 Figur 5.2: Visar problemen med moirémönster på fjäder.

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

Tentamen TNM061, 3D-grafik och animering för MT2. Onsdag 20/ kl SP71. Inga hjälpmedel Tentamen TNM061, 3D-grafik och animering för MT2 Onsdag 20/8 2014 kl 14-18 SP71 Inga hjälpmedel Tentamen innehåller 7 uppgifter, vilka tillsammans kan ge maximalt 50 poäng. För betyg G (registreras som

Läs mer

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

Spelutveckling 3d-grafik och modellering. Grunder för 3d-grafik Blender Animering Spelutveckling 3d-grafik och modellering Grunder för 3d-grafik Blender Animering Grunderna för 3d-grafik Positionering, transformationer Projektion, kameran Objekt i en 3d-värld Ljusmodeller för 3d-grafik

Läs mer

Kort introduktion till POV-Ray, del 1

Kort introduktion till POV-Ray, del 1 Kort introduktion till POV-Ray, del 1 Kjell Y Svensson, 2004-02-02,2007-03-13 Denna serie av artiklar ger en grundläggande introduktion och förhoppningsvis en förståelse för hur man skapar realistiska

Läs mer

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

Tentamen TNM061, 3D-grafik och animering för MT2. Tisdag 3/ kl 8-12 TP51, TP52, TP54, TP56, TP41, TP43. Inga hjälpmedel Tentamen TNM061, 3D-grafik och animering för MT2 Tisdag 3/6 2014 kl 8-12 TP51, TP52, TP54, TP56, TP41, TP43 Inga hjälpmedel Tentamen innehåller 8 uppgifter, vilka tillsammans kan ge maximalt 50 poäng.

Läs mer

Konvexa höljet Laboration 6 GruDat, DD1344

Konvexa höljet Laboration 6 GruDat, DD1344 Konvexa höljet Laboration 6 GruDat, DD1344 Örjan Ekeberg 10 december 2008 Målsättning Denna laboration ska ge dig övning i att implementera en algoritm utgående från en beskrivning av algoritmen. Du ska

Läs mer

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

Omtentamen TNM077, 3D datorgrafik och animering (samt även TNM008, 3D datorgrafik och VR) Omtentamen TNM077, 3D datorgrafik och animering (samt även TNM008, 3D datorgrafik och VR) Grupp: MT2 och NO2MT Datum: Fredagen den 23 april 2004 Tid: 14.00-18.00 Hjälpmedel: inga Ansvarig lärare: Stefan

Läs mer

Parabeln och vad man kan ha den till

Parabeln och vad man kan ha den till Parabeln och vad man kan ha den till Anders Källén MatematikCentrum LTH anderskallen@gmail.com Sammanfattning I det här dokumentet diskuterar vi vad parabeln är för geometrisk konstruktion och varför den

Läs mer

Procedurell grottgenerator och eld i GLSL. Marcus Widegren

Procedurell grottgenerator och eld i GLSL. Marcus Widegren Procedurell grottgenerator och eld i GLSL Marcus Widegren 14 januari 2012 Innehåll 2 Sammanfattning Jag har gjort en enkel procedurell grottgenerator i GLSL och C++. För belysning används en fackla, som

Läs mer

Ellipsen. 1. Apollonius och ellipsen som kägelsnitt.

Ellipsen. 1. Apollonius och ellipsen som kägelsnitt. Ellipsen 1. Apollonius och ellipsen som kägelsnitt. Vi skall stifta bekantskap med, och ganska noga undersöka, den plana kurva som kallas ellips. Man kan närma sig kurvan på olika sätt men vi väljer som

Läs mer

Bézierkurvor och parametriska objektrepresentationer

Bézierkurvor och parametriska objektrepresentationer Sidan 1 av 11 Inledning Detta är en kort sammanfattning av teorimaterialet som år 2004 ingår i examinationen i kursen TNM077 3D-grafik och animering som ges vid Linköpings tekniska universitet på Campus

Läs mer

Linjär Algebra, Föreläsning 2

Linjär Algebra, Föreläsning 2 Linjär Algebra, Föreläsning 2 Tomas Sjödin Linköpings Universitet Geometriska vektorer, rummen R n och M n 1 En (geometrisk) vektor är ett objekt som har storlek och riktning, men inte någon naturlig startpunkt.

Läs mer

TAIU07 Matematiska beräkningar med Matlab

TAIU07 Matematiska beräkningar med Matlab TAIU07 Matematiska beräkningar med Matlab Laboration 3. Linjär algebra Namn: Personnummer: Epost: Namn: Personnummer: Epost: Godkänd den: Sign: Retur: 1 Introduktion 2 En Komet Kometer rör sig enligt ellipsformade

Läs mer

Ansiktsigenkänning med MATLAB

Ansiktsigenkänning med MATLAB Ansiktsigenkänning med MATLAB Avancerad bildbehandling Christoffer Dahl, Johannes Dahlgren, Semone Kallin Clarke, Michaela Ulvhammar 12/2/2012 Sammanfattning Uppgiften som gavs var att skapa ett system

Läs mer

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

Omtentamen. TNM077 3D-datorgrafik och animering kl 8-12 Inga hjälpmedel. (samt även TNM008 3D-datorgrafik och VR) Omtentamen TNM077 3D-datorgrafik och animering (samt även TNM008 3D-datorgrafik och VR) 2005-06-10 kl 8-12 Inga hjälpmedel Denna tentamen innehåller 7 uppgifter som tillsammans kan ge maximalt 40 poäng.

Läs mer

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

λ = T 2 g/(2π) 250/6 40 m Problem. Utbredning av vattenvågor är komplicerad. Vågorna är inte transversella, utan vattnet rör sig i cirklar eller ellipser. Våghastigheten beror bland annat på hur djupt vattnet är. I grunt vatten

Läs mer

5 Linjär algebra. 5.1 Addition av matriser 5 LINJÄR ALGEBRA

5 Linjär algebra. 5.1 Addition av matriser 5 LINJÄR ALGEBRA 5 LINJÄR ALGEBRA 5 Linjär algebra En kul gren av matematiken som inte fått speciellt mycket utrymme i gymnasiet men som har många tillämpningsområden inom t.ex. fysik, logistik, ekonomi, samhällsplanering

Läs mer

Grafiska pipelinens funktion

Grafiska pipelinens funktion LUNDS TEKNISKA HÖGSKOLA CAMPUS HELSINGBORG Grafiska pipelinens funktion Ludvig von Sydow EDT62, HT17 Datorarkitekturer med Operativsystem Sammanfattning Denna rapport syftar till att beskriva hur en graphics

Läs mer

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

Karta över Jorden - viktigt exempel. Sfär i (x, y, z) koordinater Funktionen som beskriver detta ser ut till att vara Föreläsning 1 Jag hettar Thomas Kragh och detta är kursen: Flervariabelanalys 1MA016/1MA183. E-post: thomas.kragh@math.uu.se Kursplan finns i studentportalens hemsida för denna kurs. Där är två spår: Spår

Läs mer

Vågfysik. Geometrisk optik. Knight Kap 23. Ljus. Newton (~1660): ljus är partiklar ( corpuscles ) ljus (skugga) vs. vattenvågor (diffraktion)

Vågfysik. Geometrisk optik. Knight Kap 23. Ljus. Newton (~1660): ljus är partiklar ( corpuscles ) ljus (skugga) vs. vattenvågor (diffraktion) Vågfysik Geometrisk optik Knight Kap 23 Historiskt Ljus Newton (~1660): ljus är partiklar ( corpuscles ) ljus (skugga) vs. vattenvågor (diffraktion) Hooke, Huyghens (~1660): ljus är ett slags vågor Young

Läs mer

Robotarm och algebra

Robotarm och algebra Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson 2010-12-07 Robotarm och algebra I denna laboration skall du lära dig lite mer om möjlighetera att rita ut mer avancerade

Läs mer

Rumsuppfattning är förmågan att behandla sinnesintryck av former

Rumsuppfattning är förmågan att behandla sinnesintryck av former Güner Ahmet & Thomas Lingefjärd Tredimensionellt tänkande Tredimensionella matematiska representationer är inte särskilt vanliga i skolans matematikkurser, med undantag för kurs 3 5 i gymnasiet. Varför

Läs mer

TANA17 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med Matlab TANA17 Matematiska beräkningar med Matlab Projekt 3. Beskrivning av geometri med Beziérkurvor 1 Introduktion Inom design har man behov av effektiva sätt att beskriva kurvor och ytor med matematiska funktioner

Läs mer

Tynker gratisapp på AppStore

Tynker gratisapp på AppStore Tynker gratisapp på AppStore Innehåll Använda appen 2 Koordinatsystemet 6 Rita rektanglar i koordinatsystemet 7 Rita ellipser i koordinatsystemet 9 Rita trianglar i koordinatsystemet 11 Skapa mönster med

Läs mer

DGI/SUDOA Den historiska utvecklingen. Globala - lokala belysningsmodeller. Lokala belysningsmodeller. Rendering equation

DGI/SUDOA Den historiska utvecklingen. Globala - lokala belysningsmodeller. Lokala belysningsmodeller. Rendering equation DGI/SUDOA - 060329 Rendering equation Belysningsmodeller (lokala och globala) Kort om texturer Den historiska utvecklingen 1. Enkla modeller som utvärderades genom att göra enkla bedömningar 2. Mera sofistikerade

Läs mer

Laboration 4: Digitala bilder

Laboration 4: Digitala bilder Objektorienterad programmering, Z : Digitala bilder Syfte I denna laboration skall vi återigen behandla transformering av data, denna gång avseende digitala bilder. Syftet med laborationen är att få förståelse

Läs mer

Universe Engine Rapport

Universe Engine Rapport 1 Universe Engine Rapport Alexander Mennborg 2017-05-08 2 Inledning I denna rapport diskuteras utvecklingsprocessen till projektet Universe Engine. Denna diskussion omfattar hela utveckling från starten

Läs mer

Linjär algebra på några minuter

Linjär algebra på några minuter Linjär algebra på några minuter Linjära ekvationssystem Ekvationssystem: { Löses på matrisform: ( ) ( ) I det här fallet finns en entydig lösning, vilket betyder att determinanten av koefficientmatrisen

Läs mer

Manual för ett litet FEM-program i Matlab

Manual för ett litet FEM-program i Matlab KTH HÅLLFASTHETSLÄRA Manual för ett litet FEM-program i Matlab Programmet består av en m-fil med namn SMALL_FE_PROG.m och en hjälp-fil för att plotta resultat som heter PLOT_DEF.m. Input För att köra programmet

Läs mer

Grunder. Grafiktyper. Vektorgrafik

Grunder. Grafiktyper. Vektorgrafik 2 Grunder All vår början bliver svår eller hur det nu brukar heta, och detta är något som gäller även Flash. För den som är ovan vid Flash gäller det säkert extra mycket, då det kan vara knepigt att förstå

Läs mer

Mätning av fokallängd hos okänd lins

Mätning av fokallängd hos okänd lins Mätning av fokallängd hos okänd lins Syfte Labbens syfte är i första hand att lära sig hantera mätfel och uppnå god noggrannhet, även med systematiska fel. I andra hand är syftet att hantera linser och

Läs mer

Institutionen för matematik och datavetenskap Karlstads universitet. GeoGebra. ett digitalt verktyg för framtidens matematikundervisning

Institutionen för matematik och datavetenskap Karlstads universitet. GeoGebra. ett digitalt verktyg för framtidens matematikundervisning Karlstads GeoGebrainstitut Institutionen för matematik och datavetenskap Karlstads universitet Mats Brunström Maria Fahlgren GeoGebra ett digitalt verktyg för framtidens matematikundervisning Invigning

Läs mer

OPTIK läran om ljuset

OPTIK läran om ljuset OPTIK läran om ljuset Vad är ljus Ljuset är en form av energi Ljus är elektromagnetisk strålning som färdas med en hastighet av 300 000 km/s. Ljuset kan ta sig igenom vakuum som är ett utrymme som inte

Läs mer

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

TANA17 Matematiska beräkningar med MATLAB för M, DPU. Fredrik Berntsson, Linköpings Universitet. 9 november 2015 Sida 1 / 28 TANA17 Matematiska beräkningar med MATLAB för M, DPU Fredrik Berntsson, Linköpings Universitet 9 november 2015 Sida 1 / 28 Föreläsning 3 Linjära ekvationssystem. Invers. Rotationsmatriser. Tillämpning:

Läs mer

Inledning. Kapitel 1. 1.1 Bakgrund. 1.2 Syfte

Inledning. Kapitel 1. 1.1 Bakgrund. 1.2 Syfte Sammanfattning Vi har i kursen Modelleringsprojekt TNM085 valt att simulera ett geléobjekt i form av en kub. Denna består av masspunkter som är sammankopplade med tre olika typer av fjädrar med olika parametrar.

Läs mer

Grafiska pipelinen. Edvin Fischer

Grafiska pipelinen. Edvin Fischer Grafiska pipelinen Edvin Fischer Sammanfattning Rapporten behandlar den grafiska pipelinen och dess steg, vilka stegen är och hur de funkar. Inledning Rapporten har till syfte att beskriva hur den grafiska

Läs mer

TBSK 03 Teknik för Advancerade Datorspel

TBSK 03 Teknik för Advancerade Datorspel TBSK 03 Teknik för Advancerade Datorspel Översikt 3D och Stereoskopi Introduktion Bildskärmsteknik Depth Cues Limiteringar Design-riktlinjer Texturkompression Introduktion Algoritmer & Standarder (DXT,

Läs mer

Parabeln och vad man kan ha den till

Parabeln och vad man kan ha den till Parabeln och vad man kan ha den till Anders Källén MatematikCentrum LTH anderskallen@gmail.com Sammanfattning I den här artikeln diskuterar vi vad parabeln är för geometrisk konstruktion och varför den

Läs mer

Procedurell Terräng med LOD i OpenGL 4

Procedurell Terräng med LOD i OpenGL 4 Procedurell Terräng med LOD i OpenGL 4 TNM084: Proceduella metoder för bilder ITN, Linköpings universitet Lucas Correia, lucco863@student.liu.se Bakgrund Terräng är ett tydligt exempel där procedurella

Läs mer

Teknik för avancerade datorspel!

Teknik för avancerade datorspel! 1(84) Information Coding / Computer Graphics, ISY, LiTH TSBK 03 Teknik för avancerade datorspel Ingemar Ragnemalm, ISY Fysik Datorgrafik Spelmekanismer AI Animation 1(84) Föreläsning 5 GPU computing GPU

Läs mer

Programmering = modellering

Programmering = modellering Programmering = modellering Ett datorprogram är en modell av en verklig eller tänkt värld. Ofta är det komplexa system som skall modelleras I objektorienterad programmering består denna värld av ett antal

Läs mer

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

MATEMATIK GU. LLMA60 MATEMATIK FÖR LÄRARE, GYMNASIET Analys, ht 2014. Block 5, översikt MATEMATIK GU H4 LLMA6 MATEMATIK FÖR LÄRARE, GYMNASIET Analys, ht 24 I block 5 ingår följande avsnitt i Stewart: Kapitel 2, utom avsnitt 2.4 och 2.6; kapitel 4. Block 5, översikt Första delen av block 5

Läs mer

EXPERIMENTELLT PROBLEM 2 DUBBELBRYTNING HOS GLIMMER

EXPERIMENTELLT PROBLEM 2 DUBBELBRYTNING HOS GLIMMER EXPERIMENTELLT PROBLEM 2 DUBBELBRYTNING HOS GLIMMER I detta experiment ska du mäta graden av dubbelbrytning hos glimmer (en kristall som ofta används i polariserande optiska komponenter). UTRUSTNING Förutom

Läs mer

Föreläsning 3: Radiometri och fotometri

Föreläsning 3: Radiometri och fotometri Föreläsning 3: Radiometri och fotometri Radiometri att mäta strålning Fotometri att mäta synintrycket av strålning (att mäta ljus) Radiometri används t.ex. för: Effekt på lasrar Gränsvärden för UV Gränsvärden

Läs mer

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

Försättsblad till skriftlig tentamen vid Linköpings Universitet Försättsblad till skriftlig tentamen vid Linköpings Universitet (fylls i av ansvarig) Datum för tentamen Sal Tid Kurskod Provkod Kursnamn/benämning Institution Antal uppgifter i tentamen Antal sidor på

Läs mer

Programmering II (ID1019)

Programmering II (ID1019) ID1019 Johan Montelius Instruktioner Betyg Programmering II (ID1019) 2019-03-08 Svaren skall lämnas på dessa sidor, använd det utrymme som nns under varje uppgift för att skriva ner ditt svar (inte på

Läs mer

Föreläsning 14 och 15: Diffraktion och interferens i gitter, vanliga linser, diffraktiv optik och holografi

Föreläsning 14 och 15: Diffraktion och interferens i gitter, vanliga linser, diffraktiv optik och holografi Föreläsning 14 och 15: Diffraktion och interferens i gitter, vanliga linser, diffraktiv optik och holografi Ljusets vågnatur Ljus är elektromagnetiska vågor som rör sig framåt. När vi ritar strålar så

Läs mer

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion

Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson Plot och rekursion Tekniska Högskolan i Linköping Institutionen för Datavetenskap (IDA) Torbjörn Jonsson 2010-11-19 Plot och rekursion I denna laboration skall du lära dig lite om hur plot i MatLab fungerar samt använda

Läs mer

På en dataskärm går det inte att rita

På en dataskärm går det inte att rita gunilla borgefors Räta linjer på dataskärmen En illustration av rekursivitet På en dataskärm är alla linjer prickade eftersom bilden byggs upp av små lysande punkter. Artikeln beskriver problematiken med

Läs mer

Instuderingsfrågor extra allt

Instuderingsfrågor extra allt Instuderingsfrågor extra allt För dig som vill lära dig mer, alla svaren finns inte i häftet. Sök på nätet, fråga en kompis eller läs i en grundbok som du får låna på lektion. Testa dig själv 9.1 1 Vilken

Läs mer

TANA17 Matematiska beräkningar med Matlab

TANA17 Matematiska beräkningar med Matlab TANA17 Matematiska beräkningar med Matlab Laboration 1. Linjär Algebra och Avbildningar Namn: Personnummer: Epost: Namn: Personnummer: Epost: Godkänd den: Sign: Retur: 1 Introduktion I denna övning skall

Läs mer

Geometrisk optik. Syfte och mål. Innehåll. Utrustning. Institutionen för Fysik 2006-04-25

Geometrisk optik. Syfte och mål. Innehåll. Utrustning. Institutionen för Fysik 2006-04-25 Geometrisk optik Syfte och mål Laborationens syfte är att du ska lära dig att: Förstå allmänna principen för geometrisk optik, (tunna linsformeln) Rita strålgångar Ställa upp enkla optiska komponenter

Läs mer

Teknik för avancerade datorspel!

Teknik för avancerade datorspel! 1(83) Information Coding / Computer Graphics, ISY, LiTH TSBK 03 Teknik för avancerade datorspel Ingemar Ragnemalm, ISY Fysik Datorgrafik Spelmekanismer AI Animation 1(83) Föreläsning 5 GPU computing GPU

Läs mer

Kapitel 33 The nature and propagation of light. Elektromagnetiska vågor Begreppen vågfront och stråle Reflektion och brytning (refraktion)

Kapitel 33 The nature and propagation of light. Elektromagnetiska vågor Begreppen vågfront och stråle Reflektion och brytning (refraktion) Kapitel 33 The nature and propagation of light Elektromagnetiska vågor Begreppen vågfront och stråle Reflektion och brytning (refraktion) Brytningslagen (Snells lag) Totalreflektion Polarisation Huygens

Läs mer

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

PROCEDUELL TERRÄNG. Proceduella metoder för bilder (TNM084) Jimmy Liikala Institutionen för teknik och naturvetenskap PROCEDUELL TERRÄNG Proceduella metoder för bilder (TNM084) Jimmy Liikala (jimli570@student.liu.se) Institutionen för teknik och naturvetenskap Sammanfattning Rapporten beskriver hur en proceduell terräng

Läs mer

LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer

LUNDS UNIVERSITET. Parallell exekvering av Float32 och INT32 operationer LUNDS UNIVERSITET Parallell exekvering av Float32 och INT32 operationer Samuel Molin Kursansvarig: Erik Larsson Datum 2018-12-05 Referat Grafikkort utför många liknande instruktioner parallellt då typiska

Läs mer

10 poäng Den valda längden måste vara konsekvent på alla naglar i förhållande till nagelbädden. Förlängningen skall inte överstiga 50% av nagelbädden.

10 poäng Den valda längden måste vara konsekvent på alla naglar i förhållande till nagelbädden. Förlängningen skall inte överstiga 50% av nagelbädden. BESKRIVNING AV BEDÖMNING AV GESÄLLPROV TILL NAGELTERAPEUT Bedömningsbeskrivning 1. Form Den valda formen måste vara konsekvent på alla naglar. Den valda formen måste vara tekniskt korrekt. Poäng dras av

Läs mer

Obligatoriska uppgifter i MATLAB

Obligatoriska uppgifter i MATLAB Obligatoriska uppgifter i MATLAB Introduktion Följande uppgifter är en obligatorisk del av kursen och lösningarna ska redovisas för labhandledare. Om ni inte använt MATLAB tidigare är det starkt rekommenderat

Läs mer

Vad skall vi gå igenom under denna period?

Vad skall vi gå igenom under denna period? Ljus/optik Vad skall vi gå igenom under denna period? Vad är ljus? Ljuskälla? Reflektionsvinklar/brytningsvinklar? Färger? Hur fungerar en kikare? Hur fungerar en kamera/ ögat? Var använder vi ljus i vardagen

Läs mer

Repetitionsuppgifter. Geometri

Repetitionsuppgifter. Geometri Endimensionell anals, Geometri delkurs B1 1. Fra punkter A, B, C och D ligger pa en cirkel med radien 1 dm. Se guren! Strackorna AD och BD ar lika langa. Vidare ar vinkeln BAC och vinkeln ABC 100. D Berakna

Läs mer

729G43 Artificiell intelligens (2016) Maskininlärning 2. Marco Kuhlmann Institutionen för datavetenskap

729G43 Artificiell intelligens (2016) Maskininlärning 2. Marco Kuhlmann Institutionen för datavetenskap 729G43 Artificiell intelligens (2016) Maskininlärning 2 Marco Kuhlmann Institutionen för datavetenskap Förra gången: Gradientsökning tangentens lutning i punkt θ steglängdsfaktor Översikt Introduktion

Läs mer

TEM Projekt Transformmetoder

TEM Projekt Transformmetoder TEM Projekt Transformmetoder Utförs av: Mikael Bodin 19940414 4314 William Sjöström 19940404 6956 Sammanfattning I denna laboration undersöks hur Fouriertransformering kan användas vid behandling och analysering

Läs mer

Ljuskällor. För att vi ska kunna se något måste det finnas en ljuskälla

Ljuskällor. För att vi ska kunna se något måste det finnas en ljuskälla Ljus/optik Ljuskällor För att vi ska kunna se något måste det finnas en ljuskälla En ljuskälla är ett föremål som själv sänder ut ljus t ex solen, ett stearinljus eller en glödlampa Föremål som inte själva

Läs mer

Optimala vinkeln av bortklippt cirkelsektor fo r maximal volym pa glasstrut

Optimala vinkeln av bortklippt cirkelsektor fo r maximal volym pa glasstrut Optimala vinkeln av bortklippt cirkelsektor fo r maximal volym pa glasstrut Frågeställning Av en cirkulär pappersskiva kan en cirkelsektor med en viss vinkel klippas bort. Med den resterande sektorn går

Läs mer

7 Olika faltningkärnor. Omsampling. 2D Sampling.

7 Olika faltningkärnor. Omsampling. 2D Sampling. 7 Olika faltningkärnor. Omsampling. D Sampling. Aktuella ekvationer: Se formelsamlingen. 7.. Faltningskärnors effekt på bilder. Bilden f(, y) ska faltas med olika faltningskärnor, A H, se nedan. f(,y)

Läs mer

Övningshäfte 2: Induktion och rekursion

Övningshäfte 2: Induktion och rekursion GÖTEBORGS UNIVERSITET MATEMATIK 1, MMG200, HT2017 INLEDANDE ALGEBRA Övningshäfte 2: Induktion och rekursion Övning D Syftet är att öva förmågan att utgående från enkla samband, aritmetiska och geometriska,

Läs mer

Basbyten och linjära avbildningar

Basbyten och linjära avbildningar Föreläsning 11, Linjär algebra IT VT2008 1 Basbyten och linjära avbildningar Innan vi fortsätter med egenvärden så ska vi titta på hur matrisen för en linjär avbildning beror på vilken bas vi använder.

Läs mer

Procedurella Grottor TNM084. Sammanfattning. Alexander Steen

Procedurella Grottor TNM084. Sammanfattning. Alexander Steen Procedurella Grottor TNM084 Alexander Steen alest849@student.liu.se 13-01-12 Sammanfattning Denna rapport beskriver en metod för att skapa procedurella grottor. Grottorna består utav sammanlänkade rum

Läs mer

Vinjetter TDDC91 Datastrukturer och algoritmer

Vinjetter TDDC91 Datastrukturer och algoritmer Vinjetter TDDC91 Datastrukturer och algoritmer 17 augusti 2015 2 Scenario 1 Man har inom Posten Logistik AB skrivit programvara för sortering av kundinformation och vill standardisera användningen av sorteringsalgoritmer.

Läs mer

Ett enkelt OCR-system

Ett enkelt OCR-system P r o j e k t i B i l d a n a l y s Ett enkelt OCR-system av Anders Fredriksson F98 Fredrik Rosqvist F98 Handledare: Magnus Oskarsson Lunds Tekniska Högskola 2001-11-29 - Sida 1 - 1.Inledning Många människor

Läs mer

Grafik raytracing. Mattias Axblom.

Grafik raytracing. Mattias Axblom. Grafik raytracing Mattias Axblom mam11003@student.mdh.se 1 SAMMANFATTNING Raytracing, strålföljning eller strålspårning är en metod för att rendera realistiska bilder, film och i framtiden spel. Grundidén

Läs mer

LABORATION 1 AVBILDNING OCH FÖRSTORING

LABORATION 1 AVBILDNING OCH FÖRSTORING LABORATION 1 AVBILDNING OCH FÖRSTORING Personnummer Namn Laborationen godkänd Datum Labhandledare 1 (6) LABORATION 1: AVBILDNING OCH FÖRSTORING Att läsa före lab: Vad är en bild och hur uppstår den? Se

Läs mer

design & layout Distansskolan 1

design & layout Distansskolan 1 design & layout Distansskolan 1 Grundelementen Varje komposition är summan av dess grundelement. Om du tittar på en annons eller broschyr kommer du hitta både enkla och komplexa kompositioner. En del kompositioner

Läs mer

Procedurell renderingsmotor i Javascript och HTML5

Procedurell renderingsmotor i Javascript och HTML5 Procedurell renderingsmotor i Javascript och HTML5 TNM084 Procedurella Metoder för bilder Gustav Strömberg - gusst250@student.liu.se http://gustavstromberg.se/sandbox/html5/shademe/texture_stop_final.html

Läs mer

Digitala projekt rapport

Digitala projekt rapport Digitala projekt rapport Alexander Westrup, d04aw@student.lth.se Martin Sandgren, d04ms@student.lth.se 4 december 2007 Innehåll 1 Abstract 1 2 Inledning 1 3 Arbetsgång 1 4 Hårdvara 1 4.1 Processor...............................

Läs mer

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python)

Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python) Instruktioner - Datortentamen TDDE24 och TDDD73 Funktionell och imperativ programmering (i Python) Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok, t.ex. den rekommenderade kursboken. Boken

Läs mer

Automatateori (2) Idag: Sammanhangsfria språk. Dessa kan uttryckas med Grammatik PDA

Automatateori (2) Idag: Sammanhangsfria språk. Dessa kan uttryckas med Grammatik PDA Automatateori (2) Idag: Sammanhangsfria språk Dessa kan uttryckas med Grammatik PDA Grammatik = språkregler Ett mer kraftfullt sätt att beskriva språk. En grammatik består av produktionsregler (andra ord

Läs mer

Mer om EM vågors polarisation. Vad händer om man lägger ihop två vågor med horisontell och vertikal polarisation?

Mer om EM vågors polarisation. Vad händer om man lägger ihop två vågor med horisontell och vertikal polarisation? Mer om EM vågors polarisation Vad händer om man lägger ihop två vågor med horisontell och vertikal polarisation? Svänger x Svänger y 2π Superposition av x och y polariserade EM vågor (Ritar bara positivt

Läs mer

Linjär Algebra, Föreläsning 2

Linjär Algebra, Föreläsning 2 Linjär Algebra, Föreläsning 2 Tomas Sjödin Linköpings Universitet Riktade sträckor och Geometriska vektorer En (geometrisk) vektor är ett objekt som har storlek och riktning, men inte någon naturlig startpunkt.

Läs mer

Föreläsning 2 (kap , 2.6 i Optics)

Föreläsning 2 (kap , 2.6 i Optics) 5 Föreläsning 2 (kap 1.6-1.12, 2.6 i Optics) Optiska ytor Vad händer med ljusstrålarna när de träffar en gränsyta mellan två olika material? Strålen in mot ytan kallas infallande ljus och den andra strålen

Läs mer

i LabVIEW. Några programmeringstekniska grundbegrepp

i LabVIEW. Några programmeringstekniska grundbegrepp Institutionen för elektroteknik Några programmeringstekniska grundbegrepp 1999-02-16 Inledning Inom datorprogrammering förekommer ett antal grundbegrepp som är i stort sett likadana oberoende om vi talar

Läs mer

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Dataingenjörsprogrammet, elektroingenjörsprogrammet och medicinsk teknik KTH Skolan för Teknik och Hälsa Redovisning: Se Kurs-PM om hur redovisningen

Läs mer

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

Gemensamt projekt: Matematik, Beräkningsvetenskap, Elektromagnetism. Inledning. Fysikalisk bakgrund Gemensamt projekt: Matematik, Beräkningsvetenskap, Elektromagnetism En civilingenjör ska kunna idealisera ett givet verkligt problem, göra en adekvat fysikalisk modell och behandla modellen med matematiska

Läs mer

6 Derivata och grafer

6 Derivata och grafer 6 Derivata och grafer 6.1 Dagens Teori När vi plottar funktionen f(x) = x + 1x 99x 8 med hjälp av dosan kan man få olika resultat beroende på vilka intervall man valt. 00000 100000-00 -100 100 00-100000

Läs mer

FORMER, MÖNSTER OCH TESSELERINGAR

FORMER, MÖNSTER OCH TESSELERINGAR FORMER, MÖNSTER OCH TESSELERINGAR Text: Marie Andersson, Learncode AB Illustrationer: Li Rosén Foton: Shutterstock Golv, mattor och byggnader är fulla av geometriska former. Människan har upptäckt att

Läs mer

Så skapas färgbilder i datorn

Så skapas färgbilder i datorn Så skapas färgbilder i datorn 31 I datorn skapas såväl text som bilder på skärmen av små fyrkantiga punkter, pixlar, som bygger upp bilden. Varje punkt har sin unika färg som erhålls genom blandning med

Läs mer

TANA09 Föreläsning 8. Kubiska splines. B-Splines. Approximerande Splines. B-splines. Minsta kvadrat anpassning. Design av kurvor och ytor.

TANA09 Föreläsning 8. Kubiska splines. B-Splines. Approximerande Splines. B-splines. Minsta kvadrat anpassning. Design av kurvor och ytor. TANA09 Föreläsning 8 Kubiska splines Approximerande Splines s s s s 4 B-splines. Minsta kvadrat anpassning. Design av kurvor och ytor. x x x x 4 x 5 Exempel Parametriska Kurvor. Ritprogram. Beziér kurvor.

Läs mer

Network drafting - en kort introduktion

Network drafting - en kort introduktion Network drafting - en kort introduktion I likhet med andra tekniker för att utveckla ett mönster till en fullständig bindning med hjälp av färdiga lösningar i ett datorprogram är det en fördel om man sätter

Läs mer

Polarisation. Abbas Jafari Q2-A. Personnummer: april Laborationsrapport

Polarisation. Abbas Jafari Q2-A. Personnummer: april Laborationsrapport Polarisation Laborationsrapport Abbas Jafari Q2-A Personnummer: 950102-9392 22 april 2017 1 Innehåll 1 Introduktion 2 2 Teori 2 2.1 Malus lag............................. 3 2.2 Brewstervinklen..........................

Läs mer

Uppgift 1a (Aktiekurser utan poster)

Uppgift 1a (Aktiekurser utan poster) Uppgift 1a (Aktiekurser utan poster) Vi har lite olika upplägg i de kurser vi håller och i vissa kurser finns det med något som vi kallar "poster" (eng. "record"). I andra har vi inte med detta. Vi har

Läs mer

Tillämpad Programmering (ID1218) :00-13:00

Tillämpad Programmering (ID1218) :00-13:00 ID1218 Johan Montelius Tillämpad Programmering (ID1218) 2014-03-13 09:00-13:00 Förnamn: Efternamn: Regler Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten.

Läs mer

Integraler av vektorfält Mats Persson

Integraler av vektorfält Mats Persson Föreläsning 1/8 Integraler av vektorfält Mats Persson 1 Linjeintegraler Exempel: En partikel rör sig längs en kurva r(τ) under inverkan av en kraft F(r). i vill då beräkna arbetet som kraften utövar på

Läs mer

Specifikation av kandidatexjobb

Specifikation av kandidatexjobb Specifikation av kandidatexjobb 3D-rekonstruktion av Rubiks kub André Gräsman Rasmus Göransson grasman@kth.se rasmusgo@kth.se 890430-3214 850908-8517 Introduktion Vi vill göra en förstudie om 3D rekonstruktion.

Läs mer

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

Integraler av vektorfalt. Exempel: En partikel ror sig langs en kurva r( ) under inverkan av en kraft F(r). Vi vill Forelasning 6/9 ntegraler av vektorfalt Linjeintegraler Exempel: En partikel ror sig langs en kurva r( ) under inverkan av en kraft F(r). i vill da berakna arbetet som kraften utovar pa partikeln. Mellan

Läs mer

1 Den Speciella Relativitetsteorin

1 Den Speciella Relativitetsteorin 1 Den Speciella Relativitetsteorin På tidigare lektioner har vi studerat rotationer i två dimensioner samt hur vi kan beskriva föremål som roterar rent fysikaliskt. Att från detta gå över till den speciella

Läs mer

Dubbelintegraler och volymberäkning

Dubbelintegraler och volymberäkning ubbelintegraler och volymberäkning Volym och dubbelintegraler över en rektangel Alla funktioner nedan antas vara kontinuerliga. Om f (x) i intervallet [a, b], så är arean av mängden {(x, y) : y f (x),

Läs mer

Generering av L-system fraktaler med Processing.js

Generering av L-system fraktaler med Processing.js Generering av L-system fraktaler med Processing.js TNM084 Procedurella Metoder för bilder Carl Claesson, carcl268@student.liu.se Hemsida: http://carlclaesson.se/tnm084 Sammanfattning Denna rapport beskriver

Läs mer

Dokumenteringar av mätningar med TLC (Thermocrome liquid crystals)

Dokumenteringar av mätningar med TLC (Thermocrome liquid crystals) Dokumenteringar av mätningar med TLC (Thermocrome liquid crystals) Utförda under hösten -99. KTH Energiteknik, Brinellvägen 60, klimatkammare 3 av Erik Björk Sammanfattning Mätningar utfördes med s.k.

Läs mer

Om ellipsen och hyperbelns optiska egenskaper

Om ellipsen och hyperbelns optiska egenskaper Om ellipsen och hyperbelns optiska egenskaper Anders Källén MatematikCentrum LTH anderskallen@gmail.com Sammanfattning Ellipser och hyperbler är, liksom parabeln, s.k. kägelsnitt, dvs kurvor som uppkommer

Läs mer

Precis som var fallet med förra artikeln, Geogebra för de yngre i Nämnaren

Precis som var fallet med förra artikeln, Geogebra för de yngre i Nämnaren Publicerad med tillstånd av Nämnaren Thomas Lingefjärd Geogebra i gymnasieskolan En tilltalande egenskap med Geogebra är att programmet kan användas tvärs över stora delar av utbildningssystemets matematikkurser.

Läs mer