Arcering
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.
Soorten verlichtingEdit
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
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
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
- Bepaal de normaal op elke polygoon hoekpunt.
- Toepas een verlichtingsmodel toe op elke hoekpunt om de lichtintensiteit te berekenen uit de hoekpunt normaal.
- 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.
- Bereken een normaal N voor elk hoekpunt van de veelhoek.
- Gebruik bilineaire interpolatie bereken een normaal, Ni voor elke pixel. (De normaal moet elke keer opnieuw worden genormaliseerd.)
- 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 |