Buzzword Special 2

Eén van de grootste \"selling-points\" van een game is de graphics. Terugkijkend naar oude games is het duidelijk dat de grafische kwaliteit van nu niet meer te vergelijken is met die van tien jaar terug. Spelontwikkelaars bedenken steeds nieuwe effecten en technieken om hun spellen er beter te laten uitzien dan hun concurrentie. Vroeger was het al hip als een spel meer dan 16 kleuren bevatte, maar nu verkoopt een spel pas als het minstens HDR, Shader Model zus-en-zo, Soft Shadows en \"hi-poly\" 3D-modellen bevat. En dit alles moet natuurlijk wel lekker kunnen draaien op de huidige hardware.

In de vorige Buzzword Special hadden we het al een beetje over de opbouw van een 3D wereld in een game. Alle omgevingen en modellen zijn opgebouwd uit driehoeken (triangles). Sommige berekeningen worden per hoek (vertex) gedaan, in de vertex shader. Andere berekeningen worden per pixel gedaan in de pixel shader. In deze special gaan we eerst kijken naar belichting, om daarna wat licht te werpen ( ) op wat veel voorkomende buzzwords.

De menselijke hersenen zijn gelukkig erg gemakkelijk te foppen, zonder gemene truukjes en handigheidjes zouden we nooit realistische graphics kunnen neerzetten op de PC of console. Denk maar aan de knoppen van je favoriete browser. Met de toevoeging van een paar gekleurde lijntjes wordt er een 3D effect gecreëerd. Het gebruik van schaduw- en lichteffecten is één van de belangrijkste manieren om de illusie van een mooie (ronde) 3D omgeving te wekken.



Quake 1 heeft vaste schaduwen voor de omgeving, maar de modellen zelf houden geen rekening met lichtinval. Alles ziet er hoekig uit en diepte is moeilijk te zien.

Shading
Een van de belangrijkste lichteffecten is het shaden van de objecten. Hier wordt de invalshoek van het licht gebruikt om te bepalen hoe licht of donker een oppervlakte moet zijn. Vlakken die haaks op het licht staan worden vol belicht; naarmate een vlak zich van de lichtbron afkeert wordt deze donkerder.


De verschillen zijn duidelijk. v.l.n.r.: geen shading, flat shading, Gouraud shading, Per-Pixel (Phong) shading.

De eerste real-time belichting bestond uit flat-shading, waar elke driehoek één belichting krijgt berekend die voor de hele driehoek telt. Deze techniek werd gebruikt in de tijd dat er niet genoeg rekenkracht was voor textures om toch een 3D effect te creëren. De tweede grote stap vooruit was Gouraud shading, waar elke vertex (hoek van een driehoek) een belichtingswaarde krijgt toegekend, en deze waarden worden dan gemiddeld over de oppervlakte van de driehoek; hierdoor ontstaat de illusie dat er op elke pixel een belichting wordt berekend. Deze berekeningen worden per vertex, en dus in de vertex-shader berekend.
Het is te zien dat de Gouraud belichting de bal een veel ronder uiterlijk geeft, ook al zijn er precies
evenveel triangles in de flat-shaded versie links ervan. Het silhouet verraadt nog het onderliggende hoekige model.

Gouraud shading is jarenlang de standaard methode geweest in games, en wordt nog steeds veel gebruikt. Problemen doen zich voor zodra “scherpe” lichtbronnen over objecten bewegen die uit grote driehoeken bestaan. Er worden dan op te weinig plekken lichtberekeningen gedaan, en dit leidt tot rare hoekige lichtvlekken. Om dit tegen te gaan worden grote vlakken (zoals muren, plafonds en vloeren) verder opgeknipt in meerdere kleine driehoeken om zo de belichtingskwaliteit te verhogen. Vooral horror-games met de onvermijdelijke zaklampen hadden hier last van.



De drie soorten belichting: v.l.n.r. Ambient, Diffuse en Specular vormen samen het standaard belichtingsmodel

De “mooiste” techniek is per-pixel belichting (ook wel Phong Shading genoemd), waar de lichtwaarde echt voor elke pixel wordt berekend. De berekeningen worden dan in de pixel-shader uitgevoerd. Deze techniek wordt nu veel toegepast, vaak in combinatie met extra effecten zoals bump-mapping.

Allemaal leuk en aardig, maar deze technieken kijken alleen naar de invalshoek van het licht, en niet of er überhaupt licht op het oppervlak valt. Om dit te controleren zijn schaduw algoritmes nodig.

Schaduwen
Het maken van goede schaduwen is nog steeds de heilige graal in real-time 3D graphics. Een eenduidige oplossing is er nog niet. De twee basistechnieken die nog worden gebruikt zijn Stencil Shadows (Shadow Volumes) en Shadow mapping. Zonder in de enorm saaie technische details te treden, is de Stencil Shadow techniek vooral geschikt voor harde schaduwen (F.E.A.R, Never Winter Nights, Deus Ex 2).
Shadow Mapping is iets flexibeler en sneller, maar hebben over het algemeen minder detail en belasten vooral de pixel shader.
Soft shadows zijn enorm moeilijk om goed te krijgen, omdat je nu per pixel niet één lichtstraal vanuit het licht hoeft te volgen, maar vele verschillende lichtberekeningen moet maken. Hoe meer berekeningen, hoe breder de wazige randjes (penumbra) zijn, wat weer resulteert in zachtere schaduwen. Uiteraard zijn er ook hier weer de nodige trucs uit te halen om het geheel sneller te krijgen.



Soft Shadows in F.E.A.R.; zelfs een klein zacht randje kan al een enorme impact hebben op de frame rate.

Grhaaahhhh....soft-shadowy...

Maar genoeg over licht en donker. Op naar de buzzwords.