Deel 2: Materialen & Shaders
Deel 3: Texturen
Deel 4: Projection mapping & UV mapping
Deel 5: Camera
Deel 6: Compositie
Deel 7: Verlichting
In het vorige artikel hebben we het gehad over verlichting. Specifiek technieken en methoden die je beschikbaar hebt om je scène te verlichten. Maar wat is licht precies in een 3D-scène? Hoe gaat een 3D-render software eigenlijk van een verlichte scène naar een definitief beeld? Nou, dit noemen we het renderen zelf.
Wat renderen precies is en welke techniek het daadwerkelijk gebruikt om een afbeelding te genereren, wordt in dit artikel besproken.
1. Wat is Renderen?
Renderen is in het algemeen het proces van het genereren van een afbeelding door middel van een computerprogramma. De gegenereerde afbeelding wordt de render genoemd. Renderen gebeurt in veel verschillende toepassingen. Zoals videogames, videobewerking, simulaties, architectuur & productvisualisaties. Het render proces zelf en de uitkomst van het render proces is niet voor elke toepassing precies hetzelfde.
Voor dit artikel richten we ons op renderen voor de toepassing van het genereren van een fotorealistische architectuur of productvisualisatie. Dit zijn zogenaamde pre-render applicaties. Dit betekent in feite, niet realtime (realtime is bijvoorbeeld renderen in videogames). De belangrijkste techniek die wordt gebruikt voor het genereren van dergelijke afbeeldingen heet Ray Tracing. Er zijn ook andere methoden, maar ray tracing zorgt voor het beste fotorealistische resultaat. Het is ook de techniek die wordt gebruikt door de software die ik gebruik voor mijn renders.
2. Wat is Ray Tracing?
Ray tracing is een beetje technisch, maar laat dat je niet afschrikken. Ray tracing is een render-algoritme dat berekent hoe een 3D scène wordt verlicht. Het doet dit door zichtstralen (oftewel View rays) vanuit een camera de scène in te schieten door elke pixel van het beeld dat de camera zal renderen. Voor elke view ray wordt bepaald of deze een object raakt of niet. Wanneer het een object raakt, kan de view ray ofwel reflecteren, breken (oftewel refracten) of zijn pad volgen naar de lichtbron(nen) in de scène om te bepalen of iets in schaduw ligt of niet. Dit proces ziet er ongeveer uit als de onderstaande afbeeldingen.
Verlicht: een view ray wordt vanaf de camera door een pixel van een afbeelding geschoten. Het raakt de bol in de scène . Vanuit de bol wordt een schaduwstraal getraceerd naar een lichtbron om te bepalen of de bol in schaduw ligt of niet.
In schaduw: een view ray wordt vanaf de camera door een andere pixel van het beeld geschoten. Het raakt de grond. Vanaf de grond wordt een schaduwstraal naar een lichtbron getraceerd om te bepalen of de grond in schaduw ligt of niet. De schaduwstraal gaat door de bol. Dus de grond is in schaduw.
Reflectie: een view ray wordt vanuit de camera door een andere pixel van het beeld geschoten. Het raakt het oppervlak van de bol onder een bepaalde hoek. De bol heeft een reflecterend materiaal. De view ray wordt gereflecteerd door het oppervlak van het materiaal en raakt een ander object. Vanaf dat object wordt weer een schaduwstralen getraceerd naar een lichtbron om te zien of het object in schaduw ligt of niet. De verlichtingswaarde vanaf dat punt wordt teruggevoerd naar de pixel in de afbeelding om de uiteindelijke kleur van die pixel te beïnvloeden.
Refractie: dezelfde view ray van het reflectievoorbeeld wordt bekeken voor de refractie. De view ray raakte het oppervlak van de bol. De bol heeft een brekend (refracterend) materiaal, zoals glas. De view ray wordt gebroken en gaat door de glazen bol en raakt een andere bol. Van dat object worden weer schaduwstralen getraceerd naar een lichtbron om te zien of het object in schaduw ligt of niet. De verlichtingswaarde vanaf dat punt wordt teruggevoerd naar de pixel in de afbeelding om de uiteindelijke kleur van die pixel te beïnvloeden.
Hoe vaak een view ray in een scène stuitert (bounced), reflecteert of breekt totdat het algoritme stopt, hangt af van vooraf bepaalde waarden die we kunnen instellen in de render instellingen van de software.
De uiteindelijke kleur van de pixel is een combinatie van de lichtwaarden die worden geretourneerd voor de schaduw-, reflectie- en refractiesstralen. Deze zijn allemaal afhankelijk van het materiaal en de shader attributen van de objecten in de scène en de verlichtingsattributen.
Dit ray tracing proces wordt gedaan voor elke pixel om een afbeelding te creëren. Nu zijn er in moderne rendering software meer aspecten dan alleen schaduw-, reflectie- en refractiestralen. Maar het bovenstaande proces beschrijft de basisprincipe van ray tracing.
3. Samples
De samples zijn de hoeveelheid view rays die per pixel berekend worden. Hoe meer samples, hoe beter en vloeiender het uiteindelijke beeld. Maar meer samples betekent ook langere rendertijden. De onderstaande vergelijkingen laten zien hoe de beeldkwaliteit verbetert naarmate de samples toenemen van 1 naar 10 en van 10 naar 100 samples.
4. Rendertijd
Een van de belangrijkste dingen waarmee rekening moet worden gehouden bij het renderen, is de totale tijd die nodig is om een afbeelding te renderen. Dit wordt ook wel de rendertijd genoemd. De rendertijd wordt door veel dingen beïnvloed. Dit zijn onder andere:
Rendertijden voor een enkele afbeelding kunnen normaal gesproken enkele seconden tot enkele uren duren. In sommige moderne animatiefilms kunnen de rendertijden voor een enkel frame zelfs oplopen tot 24 uur of langer! Voor een speelfilm van 90 minuten met 24 frames per seconde heb je 129.600 frames om te renderen. Bij 24 uur per frame betekent dat 355 jaar rendertijd!
Nu hebben deze enorme Hollywood-animatiestudio’s de beschikking over grote zogenaamde render farms. Dit zijn in feite honderden computers die aan elkaar zijn gekoppeld om enorme hoeveelheden rekenkracht te bieden. Freelancers of kleinere studio’s hebben die middelen niet binnen handbereik. Je moet dus altijd blijven letten op je rendertijden om een artwork goed en tijdig te kunnen afleveren.
5. De daadwerkelijke render maken/Render passes
We weten nu hoe ray trace renderen werkt. We kunnen alle relevante kwaliteitsinstellingen aanpassen in de software. Zoals beeldresolutie, hoeveelheid ray bounces, enz. En we kunnen de daadwerkelijke render uitvoeren. De software begint met renderen en we eindigen met een definitieve render. Maar een render software doet meer dan alleen een definitief render produceren. Het rendert alle attributen los van elkaar die nodig zijn om de uiteindelijke afbeelding op te bouwen. Je kan al deze afzonderlijke informatiekanalen los van elkaar als output laten genereren.
Deze afzonderlijke kanalen worden vaak render passes genoemd. Deze render passes vertegenwoordigen verschillende informatiekanalen van de render. Elke pass bevat alleen de specifieke gegevens van die pass. Hieronder is bijvoorbeeld de kleuren pass, reflectiviteit pass, refractiviteit pass en schaduw pass te zien voor de verrekijker render:
Basis kleur
Reflectie pass
Refractie pass
Schaduw Pass
Deze kanalen, samen met andere informatiekanalen die tijdens het renderen worden geproduceerd, worden door de render software gecombineerd om de uiteindelijke onbewerkte render te maken van de verrekijker. Deze kan je hieronder zien:
Maar je kan ook andere informatiekanalen als output laten generen. Deze kanalen kunnen bijvoorbeeld erg handig zijn bij het verder bewerken van je uiteindelijke render in een nabewerkingssoftware. Hieronder zie je een viertal voorbeelden:
Object ID’s/Clown pass
Depth pass
Ambient Occlusion pass
Surface Normals pass
Ik ga niet verder in detail over wat deze laatste 4 passes exact zijn en hoe ze worden gebruikt. Dat is iets voor mijn toekomstige artikelen. Voor nu dienen ze alleen even ter demonstratie om te laten zien dat er ook hele andere passes als output gegenereerd kunnen worden. Elke pass kan mogelijk een waardevol doel dienen in de nabewerking. De nabewerking (ook wel post-processing genoemd) zal dan ook het onderwerp zijn van mijn volgende en laatste artikel in deze serie over “Voor de leek”.
Laat het me zoals altijd hieronder weten als je vragen of opmerkingen hebt.