Een korte geschiedenis van CGI
Het basisidee van fotorealistische computerbeelden is dat je een object in de ruimte plaatst en er een virtuele camera op richt.
Het oppervlak van een 3D-model bestaat vaak uit een NURBS-oppervlak (Non-Uniform Rational B-Spline) of uit polygonen. Bij de eerste gaat het om Béziercurves in de driedimensionale ruimte, die de ontwerper manipuleert via controlepunten, de zogenaamde vertices. De software berekent de ruimte tussen de krommen. NURBS-oppervlakken worden gekenmerkt door een hoge mathematische precisie en worden daarom gebruikt bij het ontwerpen van auto’s en elektronische apparaten.
Polygonen vinden we terug bij animatiefilms en spellen. Elk individueel model bestaat gewoonlijk uit honderden of duizenden polygonen, die drie of vier randen hebben. Vanwege de efficiëntie proberen de ontwerpers om met zo min mogelijk polygonen te werken. Voor het gezicht en de handen van een gestalte zijn er gewoonlijk meer nodig dan voor de romp. Een hogere resolutie, dat wil zeggen een groter aantal polygonen, is beter: hoe minder polygonen, hoe hoekiger het model eruitziet.
In het echt reflecteert elk oppervlak het licht in alle denkbare richtingen. Voor een computer is die complexiteit tot dusver nauwelijks te berekenen, wat nog sterker gold voor de computers van de jaren 60, toen de computerbeelden in zwang kwamen. In het eenvoudigste geval worden alleen de lichtstralen berekend die van het 3D-object naar het oog gaan. Men plaatst een camerapositie in de ruimte en daarvoor een raster, waarvan de vlakjes de pixels vertegenwoordigen. De computer berekent vectoren die van de hoeken van elke polygoon naar de camerapositie gaan. Waar deze vectoren het raster passeren, tekent de computer gekleurde pixels. Zo ontstaat uit een driedimensionaal object een gerasterd beeld.
Het rasteren van een dergelijk 3Dvectorbeeld vormt ook nu nog een deel van de programmeringsinterfaces DirectX en OpenGL, maar is vooral geschikt voor afbeeldingen met slechts één 3D-model. Bij meer modellen zijn er maskers of andere extensies nodig om uit te maken wat er wordt weergegeven. Anders is alleen het object te zien dat het laatst is berekend.
Bij raycasting gaat het net omgekeerd. Hier stuurt de computer vectoren van de camera door het raster naar de 3D-objecten. Bij meer objecten in de scène stopt de vector bij het voorwerp dat het dichtst bij de camerapostie ligt. De procedure is dus niet alleen praktisch, maar ook efficiënt. Raycasting werd beroemd in 1992 door de toepassing in de pc-game Wolfenstein 3D. Daar maakte de technologie 3D-beelden mogelijk op een 286-pc.
Voor fotorealisme ontbreken schaduwen, reflecties en lichtbreking. De oplossing daarvoor heet raytracing. De ontwerper plaatst niet alleen het model en de camera, maar ook de lichtbronnen. Net als bij raycasting gaan de lichtstralen eerst van de camera naar het 3D-model. Uitgaande van het model berekent de computer nu secundaire lichtstralen naar alle lichtbronnen die in de ruimte geplaatst zijn. Als zich niets tussen het model en de lichtbron bevindt, wordt het rechtstreeks belicht en krijgt het afhankelijk van de eigenschappen van het oppervlak een lichtglans. Alles wat tussen lichtbron en model zit, werpt een schaduw. Het model wordt daar alleen belicht door het omgevingslicht. Met secundaire lichtstralen wordt reflectie en bij transparante objecten ook lichtbreking berekend.
Deze recursieve raytracing vormt de basis voor de huidige fotorealistische computerbeelden. Daarna werd veel onderzoek gestoken in de weergave van indirecte verlichting, dus de reflectie van lichtstralen van alle aanwezige objecten en rekening houdend met natuurwetten zoals die van behoud van energie. De weergave van een 3Dmodel biedt nog veel mogelijkheden om de scène er realistischer te laten uitzien. Shaders geven informatie over lichtdoorlatendheid, reflectie, glans, spiegeling en andere parameters. Texturen zijn afbeeldingen die het model bedekken.
Een belangrijke aanvulling op deze informatie is sub-surface scattering, de verstrooiing van licht in transparante objecten. Deels doorschijnende objecten weerspiegelen licht niet alleen aan de oppervlakte, maar gedeeltelijk ook nadat het in het object is doorgedrongen, bijvoorbeeld bij een reflecterende laag onder een glazen plaat, bij wolken en bij de menselijke huid. Een voorbeeld van deze vorm van verstrooiing zijn doorschijnende oren bij tegenlicht. Daar komen nog effecten bij zoals scherptediepte, lensreflecties en nog veel meer.