Arcering

Gouraud-shading, ontwikkeld door Henri Gouraud in 1971, was een van de eerste arceertechnieken die werden ontwikkeld voor 3D-computerafbeeldingen.

In computergraphics verwijst schaduw naar het proces van het veranderen van de kleur van een object/oppervlak/polygoon in de 3D-scène, gebaseerd op zaken als (maar niet beperkt tot) de hoek van het oppervlak tot de lichten, de afstand tot de lichten, de hoek tot de camera en materiaaleigenschappen (bijv.

Shading wordt tijdens het renderproces uitgevoerd door een programma dat een shader wordt genoemd.

Hoek van het oppervlak ten opzichte van een lichtbronEdit

Shading verandert de kleuren van de vlakken in een 3D model op basis van de hoek van het oppervlak ten opzichte van een lichtbron of lichtbronnen.

De eerste afbeelding hieronder heeft de vlakken van de doos gerenderd, maar allemaal in dezelfde kleur. Randlijnen zijn hier ook weergegeven, wat de afbeelding overzichtelijker maakt.

De tweede afbeelding is hetzelfde model weergegeven zonder randlijnen. Het is moeilijk te zien waar het ene gezicht van de doos eindigt en het volgende begint.

De derde afbeelding heeft arcering ingeschakeld, wat de afbeelding realistischer maakt en het makkelijker maakt om te zien welk gezicht wat is.

Gerenderde afbeelding van een doos. Deze afbeelding heeft geen arcering op de vlakken, maar gebruikt in plaats daarvan randlijnen (ook bekend als wireframe) om de vlakken van elkaar te scheiden, en een vettere omlijning om het object van de achtergrond te scheiden.

Dit is dezelfde afbeelding met de lijnen verwijderd; de enige indicatie van de interne geometrie zijn de punten van het silhouet van het object.

Dit is hetzelfde object gerenderd met vlakke arcering. De kleur van de 3 zichtbare voorkanten is ingesteld op basis van hun hoek (bepaald door de normaalvector) tot de lichtbronnen.

Soorten verlichtingEdit

Lichteffecten van een schijnwerper met een ray tracer

Wanneer een shader de resultaatkleur berekent, gebruikt het een belichtingsmodel om de hoeveelheid licht te bepalen die op specifieke punten op het oppervlak wordt gereflecteerd. Verschillende verlichtingsmodellen kunnen worden gecombineerd met verschillende arceertechnieken – terwijl verlichting zegt hoeveel licht wordt gereflecteerd, bepaalt arcering hoe deze informatie wordt gebruikt om het eindresultaat te berekenen. Het kan bijvoorbeeld de verlichting alleen op specifieke punten berekenen en interpolatie gebruiken om de rest in te vullen. De shader kan ook beslissen met hoeveel lichtbronnen rekening moet worden gehouden, etc.

OmgevingsverlichtingEdit

Een omgevingslichtbron vertegenwoordigt een omni-directionele, vaste-intensiteit en vaste-kleur lichtbron die alle objecten in de scène gelijkelijk beïnvloedt (is omni-aanwezig). Tijdens het renderen worden alle objecten in de scène verlicht met de gespecificeerde intensiteit en kleur. Dit type lichtbron wordt hoofdzakelijk gebruikt om de scène een basisbeeld te geven van de verschillende objecten in de scène. Dit is het eenvoudigste type verlichting om te implementeren, en modelleert hoe licht vele malen kan worden verstrooid of gereflecteerd, waardoor een uniform effect wordt geproduceerd.

Ambient lighting kan worden gecombineerd met ambient occlusion om weer te geven hoe belicht elk punt van de scène is, wat van invloed is op de hoeveelheid omgevingslicht die het kan reflecteren. Dit produceert diffuse, niet-gerichte verlichting in de hele scène, die geen duidelijke schaduwen werpt, maar waarbij ingesloten en beschutte gebieden donkerder worden gemaakt. Het resultaat is meestal visueel vergelijkbaar met een bewolkte dag.

PuntverlichtingEdit

Licht ontstaat vanuit een enkel punt en verspreidt zich naar buiten in alle richtingen.

SpotlightingEdit

Modelleert een spotlight: licht ontstaat vanuit een enkel punt en verspreidt zich naar buiten in een kegel.

GebiedsverlichtingEdit

Licht ontstaat vanuit een klein gebied op een enkel vlak. (Een realistischer model dan een puntlichtbron.)

Gerichte verlichtingEdit

Een gerichte lichtbron verlicht alle objecten gelijkelijk vanuit een bepaalde richting, zoals een gebiedslicht van oneindige grootte en oneindige afstand van de scène; er is schaduw, maar er kan geen afstandsval zijn. Dit is zoals de zon.

Afstand falloffEdit

Twee dozen gerenderd met OpenGL. (Merk op dat de kleur van de twee voorste vlakken hetzelfde is, ook al staat er een verder weg.)
Hetzelfde model gerenderd met ARRIS CAD, dat afstandsafname implementeert om oppervlakken die dichter bij het oog staan helderder te maken.

Theoretisch worden twee oppervlakken die evenwijdig zijn vrijwel evenveel verlicht door een verre, niet-geblokkeerde lichtbron, zoals de zon. Het distance falloff effect produceert afbeeldingen die meer schaduw hebben en dus realistisch zouden zijn voor nabije lichtbronnen.

De linker afbeelding maakt geen gebruik van distance falloff. Merk op dat de kleuren op de voorkant van de twee dozen precies hetzelfde zijn. Het lijkt misschien alsof er een klein verschil is waar de twee vlakken elkaar direct overlappen, maar dit is een optische illusie die wordt veroorzaakt door de verticale rand onder waar de twee vlakken elkaar raken.

In de rechter afbeelding wordt wel gebruik gemaakt van distance falloff. Merk op dat de voorkant van de doos dichterbij lichter is dan de voorkant van de doos achteraan. Ook gaat de vloer van licht naar donker naarmate hij verder weg ligt.

BerekeningEdit

Distance falloff kan op een aantal manieren worden berekend:

  • Macht van de afstand – Voor een gegeven punt op een afstand x van de lichtbron is de ontvangen lichtintensiteit evenredig met 1/xn.
    • Geen (n = 0) – De ontvangen lichtintensiteit is hetzelfde, ongeacht de afstand tussen het punt en de lichtbron.
    • Lineair (n = 1) – Voor een gegeven punt op een afstand x van de lichtbron is de ontvangen lichtintensiteit evenredig met 1/x.
    • Kwadratisch (n = 2) – Zo neemt de lichtintensiteit in werkelijkheid af als het licht een vrije weg heeft (dus geen mist of iets anders in de lucht dat het licht kan absorberen of verstrooien). Voor een gegeven punt op een afstand x van de lichtbron, is de ontvangen lichtintensiteit evenredig met 1/x2.
  • Er kunnen ook een aantal andere wiskundige functies worden gebruikt.

Arceringstechnieken

Tijdens het arceren is vaak een oppervlaknormaal nodig voor de lichtberekening. De normalen kunnen worden voorgerekend en opgeslagen voor elke vertex van het model.

Flat shadingEdit

Flat shading van een getextureerde kubus

Hier, wordt de belichting slechts eenmaal geëvalueerd voor elke polygoon (meestal voor de eerste vertex in de polygoon, maar soms voor de centroïde voor driehoekige meshes), gebaseerd op de oppervlaknormaal van de polygoon en op de aanname dat alle polygonen vlak zijn. De berekende kleur wordt gebruikt voor de hele veelhoek, waardoor de hoeken er scherp uitzien. Dit wordt meestal gebruikt wanneer meer geavanceerde schaduwtechnieken te computationeel duur zijn. Speculaire hooglichten worden slecht weergegeven met vlakke schaduwen: Als er toevallig een grote speculaire component is bij de representatieve vertex, wordt die helderheid gelijkmatig over het hele gezicht getekend. Als een speculair lichtpunt niet op het representatieve punt valt, wordt het volledig gemist. Bijgevolg wordt de speculaire reflectie component gewoonlijk niet meegenomen in de berekening van vlakke schaduwen.

Zachte schaduwenEdit

In tegenstelling tot vlakke schaduwen waar de kleuren discontinu veranderen bij polygoon grenzen, verandert bij gladde schaduwen de kleur van pixel tot pixel, wat resulteert in een vloeiende kleurovergang tussen twee aangrenzende polygonen. Gewoonlijk worden de waarden eerst berekend in de hoekpunten en wordt bilineaire interpolatie gebruikt om de waarden van de pixels tussen de hoekpunten van de polygonen te berekenen. Soorten vloeiende schaduwen zijn Gouraud schaduwen en Phong schaduwen.

Gouraud schaduwenEdit
  1. Bepaal de normaal op elke polygoon hoekpunt.
  2. Toepas een verlichtingsmodel toe op elke hoekpunt om de lichtintensiteit te berekenen uit de hoekpunt normaal.
  3. Interpoleer de hoekpunt intensiteiten met behulp van bilineaire interpolatie over de oppervlakte polygoon.

Problemen:

  • Omdat de belichting alleen op hoekpunten wordt berekend, kunnen de onnauwkeurigheden (vooral van speculaire highlights op grote driehoeken) te duidelijk worden.
  • T-aansluitingen met aangrenzende polygonen kunnen soms resulteren in visuele anomalieën. In het algemeen moeten T-junctions worden vermeden.
Phong shadingEdit

Phong shading is vergelijkbaar met Gouraud shading, behalve dat in plaats van het interpoleren van de lichtintensiteiten de normalen worden geïnterpoleerd tussen de vertices en de verlichting wordt geëvalueerd per pixel. Op die manier worden de lichtpunten veel nauwkeuriger berekend dan in het Gouraud shading model.

  1. Bereken een normaal N voor elk hoekpunt van de veelhoek.
  2. Gebruik bilineaire interpolatie bereken een normaal, Ni voor elke pixel. (De normaal moet elke keer opnieuw worden genormaliseerd.)
  3. Toepassen van een belichtingsmodel op elke pixel om de lichtintensiteit uit Ni te berekenen.

Uitgestelde schaduwen

Uitgestelde schaduwen is een schadetechniek waarbij de berekening van de schaduwen wordt uitgesteld tot een later stadium door in twee fasen te renderen, waardoor de prestaties mogelijk worden verbeterd doordat dure gearceerde pixels niet worden weggegooid. De eerste pas legt alleen oppervlakteparameters vast (zoals diepte, normalen en materiaalparameters), de tweede pas voert de eigenlijke arcering uit en berekent de uiteindelijke kleuren.:884

Andere benaderingenEdit

Zowel Gouraud arcering als Phong arcering kunnen worden geïmplementeerd met bilineaire interpolatie. Bishop en Weimer stelden voor om een Taylor serie expansie te gebruiken van de resulterende uitdrukking van het toepassen van een belichtingsmodel en bilineaire interpolatie van de normalen. Er werd dus tweedegraads polynomiale interpolatie gebruikt. Dit type tweedegraads polynoominterpolatie werd verder uitgewerkt door Barrera e.a., waarbij een tweede-orde polynoom werd gebruikt om het diffuse licht van het Phong reflectiemodel te interpoleren en een andere tweede-orde polynoom werd gebruikt voor het speculaire licht.

Sferische lineaire interpolatie (Slerp) werd gebruikt door Kuij en Blake voor het berekenen van zowel de normaal over de polygoon, als de vector in de richting naar de lichtbron. Een soortgelijke aanpak is voorgesteld door Hast, die quaternion interpolatie van de normalen gebruikt met het voordeel dat de normaal altijd eenheidslengte heeft en de rekenintensieve normalisatie wordt vermeden.

Vlakke vs. smooth shadingEdit

Flat Smooth
Uses the same color for every pixel in a face – usually the color of the first vertex Smooth shading uses linear interpolation of either colors or normals between vertices
Edges appear more pronounced than they would on a real object because in reality almost all edges are somewhat round The edges disappear with this technique
Same color for any point of the face Each point of the face has its own color
Individual faces are visualized Visualize underlying surface
Not suitable for smooth objects Suitable for any objects
Less computationally expensive More computationally expensive