Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertHedda Solberg Endret for 9 år siden
1
Mer om Grafisk Databehandling
2
INF2340 / V042 Teksturering Øker detaljgraden uten å øke antall grafiske primitiver. Grafiske primitiver brukes som “bærere” for bilder (f.eks. fotografier).
3
INF2340 / V043 Eksempel Bruk ett polygon for hver endring/fasett i bildet. Ressurskrevende! "Klistre" bildet på kun ett polygon. Teksturering! Alternativ 1 Alternativ 2
4
INF2340 / V044 Et annet eksempel
5
INF2340 / V045 Hovedstegene i teksturering Steg 1) Definer teksturen. En tekstur er en samling av teksturelementer - kalt texel’er - organisert i en matrise som enten er 1D, 2D, eller 3D. En texel inneholder informasjon om farge og transparens. Leses typisk inn fra en fil!
6
INF2340 / V046 Steg 2) Angi hvordan teksturen skal påvirke hvert pixel. –All farge kommer fra teksturen, eller –Teksturfargen blandes med eller påvirker den underliggende fargen (nødvendig for å få med belysning!)
7
INF2340 / V047 Steg 3) Angi teksturkoordinater for noder i geometriske primitiver. Teksturkoordinater typisk normaliserte, dvs. definert i intervallet [0, 1]. 01 1 0 (0.2, 0.8) (0.9, 0.87) (0.36, 0.2)
8
INF2340 / V048 Fordi det er såpass nyttig er teksturering ofte implementert i maskinvare!
9
INF2340 / V049 Transparens Skal se på et vanlig spesialtilfelle: –(helt eller delvis) gjennomsiktige objekter uten brytning Noen anvendelser: halvgjennomsiktig bilvindu helgjennomsiktig del av tekstur
10
INF2340 / V0410 Alfa Transparens representeres vanligvis som en alfa- verdi (A, ) som betyr opasitet (ugjennomsiktighet). Alfa varierer fra 0 (helt gjennomsiktig) til 1 (helt ugjennomsiktig). Alfa spesifiseres vanligvis sammen med farge: RGBA (f.eks. polygon-node eller texel (tekstur- element))
11
INF2340 / V0411 Interpolert blanding av farger (vanlig modell) Forgrunnsobjekt Lysstråle mot øyet Bakgrunnsobjekt Resultatfarge: I = FG I FG + (1 – FG )I BG Farge= I FG Opasitet= FG Farge= I BG Opasitet= irrelevant! Merk: Nye objekter må blandes inn i retning mot øyet ("back-to-front")! (Begynn med det som er lengst vekk, bland inn det som er nest-lengst vekk osv.)
12
INF2340 / V0412 Generelt I0I0 0 = Global bakgrunn 0 = 1 I1I1 1 11 I2I2 2 22 I3I3 3 33 I i = i I i + (1 - i )I i-1, i 1 ´´ I 0 = I 0 ´ I i = ´ Fargen som er resultatet av å blande objekt 'i' med det som ligger bakenfor, altså I i-1. ´
13
INF2340 / V0413 Observasjon Ett enkelt objekt med = 1 er tilstrekkelig for å skjule alt bakenfor. Hvis alle objekter har 0 bidra til den endelige fargen. = 1 = 0 skjules! = 1 = 0 vil også bidra!
14
INF2340 / V0414 “Ray Tracing” (RT) Mer “fotorealistisk” sjatteringsalgoritme. Tar bedre hensyn til hvordan også andre objekter (og ikke bare lyskilder) kan påvirke belysningen av et punkt: –Refleksjon. –Skygger. Kan også modellere transparente objekter. Spesielt egnet for speilende refleksjon (andre metoder er bedre på diffus refleksjon)
15
INF2340 / V0415 Noen eksempler (laget med PovRay - www.povray.org)
16
INF2340 / V0416
17
INF2340 / V0417
18
INF2340 / V0418 Essensen i RT Hvilke lysstråler treffer øyet, og hvor kommer de fra? Ide 1: Følg alle lysstråler fra alle lyskilder og ta vare på dem som (direkte eller indirekte) treffer øyet. UMULIG! Ide 2: Ta utgangspunkt i lysstrålene som faktisk treffer øyet. Følg dem bakover til dit de kom fra!
19
INF2340 / V0419 RT - Overordnet algoritme Send ut en stråle fra øyepunktet gjennom hvert pixel og videre innover mot objektene (antar disse allerede er transformert til synskoordinater). Avgjør om en stråle skjærer et objekt, og i såfall hva fargebidraget fra skjæringspunktet blir. ( RT er en bilderekkefølge algoritme!) En del av dette fargebidraget kan evt. regnes ut ved å sende ut nye stråler rekursivt fra et punkt for å modellere speilende refleksjon og brytende transparens.
20
INF2340 / V0420 Transparent objekt pixel = primær stråle = reflektert stråle = brutt stråle = skyggestråle = normalvektor
21
INF2340 / V0421 for { ray = fargen i p = RT_trace(ray, 1) } procedure RT_trace(ray, depth) { if return RT_shade(..., depth) else return } RT - Pseudokode
22
INF2340 / V0422 procedure RT_shade(..., depth) { color = omgivelse-lys for { finn ut (vha. skyggestråler) i hvilken grad lyset er blokkert av andre objekter og skalér leddene for diffus og speilende refleksjon tilsvarende før disse adderes til color } if depth > maxDepth return color if color += RT_trace(, depth + 1) if color += RT_trace(, depth + 1) return color }
23
INF2340 / V0423 Skjæringsalgoritmer essensielle i RT! Parametrisert uttrykk for stråle gjennom pixel x = x(t), y = y(t), z = z(t), t 0 Kule (x – a) 2 + (y – b) 2 + (z – c) 2 = r 2 Gir 2. gradslikning for t r (a, b, c) røtter
24
INF2340 / V0424 Polygon Finn skjæringspunktet (hvis det eksisterer) mellom strålen og planet polygonet ligger i. Projiser skjæringspunktet og polygonet ned på xy-, xz- eller yz-planet. Sjekk om punktet er inne i polygonet (2D problem - enklere). x y z
25
INF2340 / V0425 Parametriske flater (splines etc.) Kontrollpunkter Ressurskrevende skjæringsalgoritme!
26
INF2340 / V0426 RT er ressurskrevende! I prinsippet må vi sjekke skjæring for alle stråler (primære, reflekterte, brutte og skygge-) mot alle objekter. En skjæringsalgoritme kan i seg selv være ressurskrevende. Belysningsmodellen må evalueres i alle skjæringspunkter.
27
INF2340 / V0427 RT-optimalisering 1 Pakk objektene inn i omsluttende volumer (“bounding volumes”) med enklere (billigere) skjæringsalgoritme. Hvis en stråle ikke skjærer et omsluttende volum, vil den heller ikke skjære noen av objektene inne i volumet! 1 2 1 2 2 1 2 1
28
INF2340 / V0428 RT-optimalisering 2 Del bildet opp i n forskjellige utsnitt og la n prosessorer beregne hvert sitt utsnitt i parallell. Prosessor 1Prosessor 2Prosessor 3Prosessor 4
29
INF2340 / V0429 Animasjon Å vise en sekvens med bilder etter hverandre i rask rekkefølge. Kino: –Chaplin: 16 bilder / sek –Moderne filmer: 24 bilder / sek Dataskjerm: –60-120 bilder / sek
30
INF2340 / V0430 To typer animasjon på datamaskin Manuell (f.eks. ved interaktiv endring av kamera) Automatisk (tradisjonell film)
31
INF2340 / V0431 Basisalgoritme for animasjon med 24 bilder / sek for (i = 0; i < n; i++) { } tid STV 1/24 sek
32
INF2340 / V0432 Problem ser kun delvis ferdig bilde først her ser vi det ferdige bildet Resultat: flimring og blinking!
33
INF2340 / V0433 Løsning: Dobbeltbuffer RGB-buffer 1 RGB-buffer 2 Z-buffer Video controller ?
34
INF2340 / V0434 Buffer 1 Buffer 2 Buffer 1 vises på skjermen Buffer 2 vises på skjermen Buffer 1 vises på skjermen for (i = 0; i < n; i++) { }
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.