1 / 34

Mer om Grafisk Databehandling

Mer om Grafisk Databehandling. Teksturering. Øker detaljgraden uten å øke antall grafiske primitiver. Grafiske primitiver brukes som “bærere” for bilder (f.eks. fotografier). Eksempel. Alternativ 2. Alternativ 1. Bruk ett polygon for hver endring/fasett i bildet.  Ressurskrevende!.

zeal
Télécharger la présentation

Mer om Grafisk Databehandling

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Mer omGrafisk Databehandling

  2. Teksturering • Øker detaljgraden uten å øke antall grafiske primitiver. • Grafiske primitiver brukes som “bærere” for bilder (f.eks. fotografier). INF2340 / V04

  3. Eksempel Alternativ 2 Alternativ 1 Bruk ett polygon for hver endring/fasett i bildet.  Ressurskrevende! "Klistre" bildet på kun ett polygon.  Teksturering! INF2340 / V04

  4. Et annet eksempel INF2340 / V04

  5. 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! INF2340 / V04

  6. All farge kommer fra teksturen, eller • Teksturfargen blandes med eller påvirker den underliggende fargen (nødvendig for å få med belysning!) • Steg 2) Angi hvordan teksturen skal påvirke hvert pixel. INF2340 / V04

  7. Teksturkoordinater typisk normaliserte, dvs. definert i intervallet [0, 1]. • Steg 3) Angi teksturkoordinater for noder i geometriske primitiver. 1 0 0 1 (0.2, 0.8) (0.9, 0.87) (0.36, 0.2) INF2340 / V04

  8. Fordi det er såpass nyttig er teksturering ofte implementert i maskinvare! INF2340 / V04

  9. Transparens • Skal se på et vanlig spesialtilfelle: • (helt eller delvis) gjennomsiktige objekter uten brytning • Noen anvendelser: helgjennomsiktig del av tekstur halvgjennomsiktig bilvindu INF2340 / V04

  10. 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)) INF2340 / V04

  11. 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.) Interpolert blanding av farger(vanlig modell) Lysstråle mot øyet Bakgrunnsobjekt Forgrunnsobjekt Farge = IBG Opasitet = irrelevant! Farge = IFG Opasitet = FG Resultatfarge: I = FGIFG + (1 – FG)IBG INF2340 / V04

  12. 2 3 0 = Global bakgrunn 1 I2 I3 I0 I1 ´ ´ Ii = iIi + (1 - i)Ii-1 , i 1 ´ Ii = 0 = 1 1 2 3 Fargen som er resultatet av å blande objekt 'i' med det som ligger bakenfor, altså Ii-1. ´ I0 = I0 ´ Generelt INF2340 / V04

  13.  = 1  = 0 skjules! Observasjon • Ett enkelt objekt med  = 1 er tilstrekkelig for å skjule alt bakenfor. • Hvis alle objekter har  < 1 vil alle objekter med  > 0 bidra til den endelige fargen.  = 1  = 0 vil også bidra! INF2340 / V04

  14. “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) INF2340 / V04

  15. Noen eksempler(laget med PovRay - www.povray.org) INF2340 / V04

  16. INF2340 / V04

  17. INF2340 / V04

  18. 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! INF2340 / V04

  19. 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. INF2340 / V04

  20. = primær stråle = reflektert stråle = brutt stråle = skyggestråle Transparent objekt = normalvektor pixel INF2340 / V04

  21. RT - Pseudokode for <hvert pixel p> { ray = <strålen fra øyepunktet gjennom p> fargen i p = RT_trace(ray, 1) } procedure RT_trace(ray, depth) { if <skjæring med et objekt> returnRT_shade(..., depth) else return <bakgrunnsfargen> } INF2340 / V04

  22. procedure RT_shade(..., depth) { color = omgivelse-lys for <hver lyskilde> { 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 <objektet er reflekterende> color+= RT_trace(<refleksjonsstrålen>, depth + 1) if <objektet er transparent> color += RT_trace(<brytningsstrålen>, depth + 1) return color } INF2340 / V04

  23. 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 = r2 Gir 2. gradslikning for t røtter (a, b, c) r INF2340 / V04

  24. y x z • 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). INF2340 / V04

  25. Kontrollpunkter • Parametriske flater (splines etc.) Ressurskrevende skjæringsalgoritme! INF2340 / V04

  26. 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. INF2340 / V04

  27. 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! 2 2 2 1 2 1 1 1 INF2340 / V04

  28. Prosessor 1 Prosessor 2 Prosessor 3 Prosessor 4 RT-optimalisering 2 • Del bildet opp i n forskjellige utsnitt og la n prosessorer beregne hvert sitt utsnitt i parallell. INF2340 / V04

  29. 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 INF2340 / V04

  30. To typer animasjon på datamaskin • Manuell (f.eks. ved interaktiv endring av kamera) • Automatisk (tradisjonell film) INF2340 / V04

  31. tid Basisalgoritme for animasjon med 24 bilder / sek for (i = 0; i < n; i++) { <Slett bilde> <Tegn bilde> <Vent til 1/24 sek har passert> } S T V 1/24 sek INF2340 / V04

  32. Problem ser kun delvis ferdig bilde først her ser vi det ferdige bildet Resultat: flimring og blinking! INF2340 / V04

  33. Video controller Løsning: Dobbeltbuffer Z-buffer RGB-buffer 2 RGB-buffer 1 ? INF2340 / V04

  34. 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++) { <Slett bilde> <Tegn bilde> <Bytt om på bufferne> <Vent til 1/24 sek har passert> } INF2340 / V04

More Related