# 3D-computergraphics

Met 3D-computergraphics wordt bedoeld het genereren van tweedimensionale afbeeldingen uit driedimensionale representaties van geometrische objecten.

## Toepassingen

Computergraphics vinden op verschillende plaatsen toepassing:
* Voor industriële 3D-ontwerptechniek, zie computer-aided design
* Voor computerspellen. De huidige generatie computerspellen zijn sterk afhankelijk van 3D-computergraphics, ook door het steeds goedkoper worden van grafische kaarten om 3D-graphics snel te genereren.
* Film
* Digitale Kunst

### Computer-aided design

Bij computergeassisteerd ontwerpen speelt het modelleren van objecten een belangrijke rol. Tijdens het modelleren dient de ontwerper visuele terugkoppeling te krijgen en hier speelt de 3D-computergraphics een zeer belangrijke rol. Belangrijk is het efficiënt weergeven van complexe geometrische modellen.

### Computerspellen

Bij computerspellen spelen computergraphics een belangrijke rol in het creëren van sfeer in een spel. Door de speler mee te nemen in realistische dan wel fantasiewerelden probeert men de spelervaring te vergroten. Hoe gedetailleerder het beeld, hoe beter deze ervaring en computerspellen hebben een dan ook niet te stillen honger naar betere graphics. Computerspellen oefenen vandaag de dag een belangrijke druk uit op de doorontwikkeling van videokaarttechnologie.

### Film

Animatiefilms die volledig met de computer gemaakt zijn, zijn tegenwoordig uitermate populair. Bekende studio's die computeranimatiefilms maken zijn o.a. Pixar (Toy Story, Monsters Inc., Finding Nemo, The Incredibles, Cars), Pacific Data Images (Shrek), Blue Sky Studios (Ice Age).
Omdat computerbeelden tegenwoordig zo realistisch zijn, wordt het echter ook veel voor speciale effecten gebruikt in normale speelfilms. Dit is vaak zo realistisch gedaan dat het totaal niet te zien is welke delen echt zijn en welke delen met de computer gemaakt zijn. Een veelgebruikte techniek voor het samenvoegen van echte beelden en computerbeelden is het opnemen voor een blauw scherm. Eerst wordt een scène voor een blauw scherm gefilmd. Later worden de delen van de film die blauw zijn opgevuld met 3D-computerbeelden. Dit samenvoegen valt onder het departement van de visual effects en wordt compositing genoemd. Het eerste filmkarakter dat volledig met computeranimatie gemaakt werd was de draak uit de film Dragonheart, een ander voorbeeld is Gollum uit The Lord of the Rings, die volledig met de computer gemaakt is.

### Digitale Kunst

De computer is naast de traditionele vormen om kunstzinnige afbeeldingen zoals schilderkunst en fotografie een uitstekend nieuw werktuig gebleken om kunst mee te maken. Computers bieden de artiest een waaier aan creatieve gereedschappen om schitterende afbeeldingen te kunnen maken. Computers blijken zowel geschikt om fotorealistische als niet fotorealistische kunst mee te ontwerpen.

## Rendertechnieken

Een rendertechniek is het basisalgoritme waarmee de driedimensionale wereld op een tweedimensionaal scherm geprojecteerd wordt. De gebruikte technieken zijn grofweg in te verdelen in twee categorieën:
* Afbeelding-gebaseerde methoden - Hierbij wordt voor elke pixel van de afbeelding bepaald welke kleur deze heeft. Deze methode wordt veelal gebruikt voor het genereren van realistische afbeeldingen van 3D-omgevingen/objecten, en wordt gekozen als de tijd die nodig is om te genereren ondergeschikt is aan de kwaliteit van de uiteindelijke afbeelding. Dit omvat ook het zogenaamde raytracen wat door veel 3D-CAD- en modelleerprogramma's wordt gebruikt om uiteindelijke afbeeldingen te genereren.
* Object-gebaseerde methoden - Hierbij wordt in plaats van elke pixel langs te gaan, elk object langsgegaan en geprojecteerd op de afbeelding. Het is hierbij gebruikelijk om alle geometrie die afgebeeld moet worden te vertalen naar driehoeken, die vervolgens door de rasterizer op het scherm getekend worden. Dit kan tegenwoordig door middel van 3D-computerhardware gebeuren, wat het proces aanzienlijk versnelt.
De huidige computerspellen gebruiken enkel deze methode. Vroegere spellen zoals Wolfenstein en Doom gebruiken een variant van afbeelding-gebaseerde methoden genaamd raycasten.

### Scanlijnrendering

Bij scanlijnrendering wordt de framebuffer regel per regel afgelopen. Iedere regel wordt in stukje verdeeld betreffende tot welk object dat stuk behoort. Deze stukken worden vervolgens ingekleurd. De kwaliteit van scanlijnrendering is sterk afhankelijk van de algoritmen die gebruikt worden om de kleuren van de objecten te berekenen. Bij platte kleuring heeft ieder object een vaste kleur en is de kwaliteit erg slecht. Technieken die de lichtval op een object meenemen zijn Gouraudkleuring en Phongkleuring. Bij textuurprojectie worden tweedimensionale plaatjes op de objecten geprojecteerd. Tegenwoordig kan de kleur door middel van een zogenaamde pixel shader, een kleine programmaatje dat voor elke pixel uitgevoerd wordt, ook berekend worden.

### Raycasting, raytracing en stochastische raytracing

Bij raytracing gaat men uit van een camera en lichtbronnen welke in de weer te geven ruimte aanwezig zijn. Raytracing is een verzamelnaam voor vele verschillende algoritmen om een driedimensionale scène te renderen. Het zogenaamde ray-casting algoritme zal vanuit de camera door elke pixel een straal schieten, om te bepalen welke object in de ruimte als eerste geraakt wordt. Dat object is dan zichtbaar in die bepaalde pixel. Raytracing zelf voegt hier belichtingseffecten aan toe. Door vanuit het object dat men door een pixel ziet, lichtstralen te sturen naar de lichtbronnen, kan men effecten berekenen zoals diffuse belichting, highlights, schaduwen, perfecte reflecties en refracties.
Stochastische raytracing gaat nog een stap verder en zal willekeurige stralen doorheen de ruimte schieten. Door al deze stralen te volgen kan men een zeer nauwkeurig beeld berekenen: zacht verlopende schaduwen, wazige reflecties en refracties, onscherpte a.g.v. lenzen of focusafstand van de camera. In principe is stochastische raytracing in staat om een beeld te genereren dat er net uitziet als een foto van de scène. Stochastische raytracing wordt dan ook wel een foto-realistisch of globaal-belichtingsalgoritme genoemd. De wiskundige achtergrond voor stochastische ray tracing is een beschrijving van hoe lichttransport in een 3D scène gebeurt, aan de hand van de zogenaamde rendering vergelijking. Door deze rendering vergelijking numeriek te evalueren met Monte Carlo integratie technieken bekomt men stochastische ray tracing als algoritme.

### Radiosity

Radiosity is een globaal-belichtingsalgoritme dat in principe geen rekening houdt met de positie van de camera in de ruimte zoals raytracing dat doet. Het radiositeitsalgoritme zal voor elk oppervlak (bijvoorbeeld veelhoeken) in de scène berekenen hoeveel licht het precies uitstraalt. Nadien kunnen al deze oppervlakken gevisualiseerd worden met behulp van een scanlijn-renderere of met een raycasting algoritme. De berekeningsstap van het radiositeitsalgoritme bestaat erin dat men de scène opdeelt in kleine vlakjes of veelhoeken. Voor elke veelhoek wordt een energie-balans opgesteld: de lichtenergie die deze veelhoek uitstraalt is gelijk aan de hoeveelheid licht die op deze veelhoek invalt en vervolgens gereflecteerd wordt. Dit geeft aanleiding tot een stelsel van wiskundige vergelijkingen, die met gepaste technieken worden opgelost. Het radiositeitsalgoritme is wiskundig gezien een eindige elementen-methode voor het oplossen van een transportprobleem in een 3D omgeving.
Deze manier van werken is zeer goed voor indirecte diffuse lichtinteracties te berekenen, wat betekent dat objecten in de ruimte via meerdere weerkaatsingen belicht worden. Bijvoorbeeld: een lamp aan het plafond zal licht uitstralen, dat vervolgens op de vloer weerkaatst wordt, en vervolgens invalt op de onderkant van de tafel, zodat de onderkant van de tafel effectief een kleur heeft. Het radiositeitsalgoritme kan niet goed overweg met spiegelingen en refracties, hoewel er varianten bestaan die dit wel in mindere mate kunnen.
Het radiositeitsalgoritme werd vooral ontwikkeld en onderzocht in de jaren 80 en 90. Op dit ogenblik (2024) is het in onbruik geraakt als algemeen foto-realistisch renderingalgoritme. Daar is stochastische raytracing veel beter geschikt voor. Wel wordt het radiositeitsalgoritme nog wel gebruikt om specifieke stukjes van het beeld uit te rekenen, of in specifieke domeinen (bijvoorbeeld architectuur).

## Onderdelen
### Ruimtelijke indelingen

Zie geometrisch modelleren.

### Bepaling van zichtbaarheid

* Schildersalgoritme
* Dieptebuffer
* Portals, Portals
* PVS De Possible visibility set, ofwel mogelijk zichtbare zones
* Frustum culling