OpenGL Avalanche Studios Sveriges ledande oberoende spelutvecklare Fokus på egenutvecklade IPn Finns på Söder i Stockholm ~6 anställda Just Cause för PS2, PC, XBox, och XBox 36 släpptes 26 Gustav Taxén Research Lead gustav.taxen@avalanchestudios.se www.avalanchestudios.se Utvecklar Just Cause 2 samt tre andra projekt Våra spel Vår teknik Stora, öppna spelvärldar Sandbox-gameplay Hög audiovisuell standard Multiplatform PlayStation 3 XBox 36 PC Egenutvecklad spelmotor R&D genomsyrar hela företaget Task force-team Nära forskningsfronten Samarbeten med universitet och högskolor Sök exjobb och jobb hos oss! jobs@avalanchestudios.se Lite inspiration...
3D-grafiksystem Översikt över OpenGL Geometri Projektion Transformation Parametrar OpenGL + Fragment Modell Översikt över OpenGL Översikt över OpenGL Fönster- system Parametrar (ändras när det behövs vs) Meddelande: Behov av omritning Fragment Applikation OpenGL Geometri (skickas vid varje omritning) Renderingspipeline Fragment Trans- formation Geometri- specifikation Projek- tion Rast- rering Operationer på fragment - parametrar Modelview- matris Projektions- matris Inställningar förf tester Översikt över OpenGL Transformationer Geometri Operationer på hörn Fragment shader Transformation Vertex shader Rastrering Operationer på fragment Objektkoord. Ögonkoord. Projektion Bilddata Operationer på bildelement Framebuffer, Hjälpbuffertar Transformation - minne Viewport- transformation Objektkoord. Fönsterkoord. 2
Enpunktsperspektiv Kameran i OpenGL x eye Brook Taylor, New Principles of Linear Perspective, 79. y obj [.5 ] Obj Eye p eye = M p obj z obj x obj Om M är enhetsmatrisen... Om C är en translationsmatris... [.5 ] [.5-3] x eye x eye y obj [.5 ] p eye = I p obj = p obj y obj [.5 ] T = 3 z obj x obj z obj x obj p eye = T p obj Sammansatta transformationer x eye y obj [.5 ] z obj x obj T = [ -.5-3] = T2 p eye = T 2 (T p obj ) = (T 2 T ) p obj 3 I T [.5 ] T 2 T 3
p eye = T [ ] (R 45 p obj ) p eye = M p obj p eye M styr var punkten p obj hamnar i världen p obj R 45 T [ ] Hamnar den framför kameran (i klippvolymen) syns den p eye I OpenGL kallas M modelview matrix R 45 T [ ] Transformation är ekvivalent med byte av koordinatsystem! Kameraplacering Transformationer i OpenGL Matrisstack Matrisstack Objektkoord. Ögonkoord. Klippkoord. x o y o z o w o x e y e z e w e Modelview- matris Projektions- matris x c y c z c w c Flytta kameran är som att flytta världen fast med en invers transformationsmatris! x w y w z w Fönsterkoord. Perspektiv- division Viewport- transformation x n y n z n Normerade enhetskoord. Operationer på fragment Djuptest Ett antal tester Avgör om fragmentet ska skickas till bildbufferten Genomförs alltid i samma ordning Ordningen är definierad i OpenGL-specifikationen Djupbuffert Bildbuffert Fönster Borttagning av skymda ytor, dynamiska skuggor, specialeffekter, m.m. Fragment 4
Djuptest (Z-buffring) Animation och dubbelbuffring.2.9.95..97.8.23 >.97 <.8 <.23.2.9.95..97.8.23 DEMO Hierarkiska modeller Pivotpunkt Består-av-hierarki Lokala koordinatsystem Skelett... Subnodens origo positioneras m.a.p. förälderns koordinatsystem. Arm Överarm Underarm 5
Från hierarki till kod Från hierarki till kod Överarm Skelett Arm Underarm void drawskeleton(void) { drawarm(); void drawarm(void) { drawupperarm(); drawlowerarm(); void drawupperarm(void) { void drawlowerarm(void) { void drawskeleton(void) { positionera armens origo; drawarm(); void drawarm(void) { positionera överarmens origo; drawupperarm(); positionera underarmens origo; drawlowerarm(); Från hierarki till kod Från hierarki till kod glmatrixmode(gl_modelview); glloadidentity(); Ändra rotation här! void drawskeleton(void) { glpushmatrix (); positionera armens origo; drawarm (); glpopmatrix (); gltranslatef(modellens position); rita torso; gltranslatef(pivotpunkt för överarmen); glrotatef(grader, rotationsaxel); rita överarmen; gltranslatef(pivotpunkt för underarmen); glrotatef(grader, rotationsaxel); rita underarmen; Animation Demo - forward kinematics Uppdateringsmekanism Parametrar Rendering/ utritning Transformationer baserade på parametrarna OpenGL param = f (t) param = f (t)... Kända 6
Ljussättning Phongs reflektionsmodell Goraud shading Ambient (Allmänljus) N + Diffuse (Matt reflektion) N + Specular (Highlights) R N Färg beräknas i varje hörn och interpoleras sedan linjärt över polygonen. Normaler måste anges före varje hörn! Back face culling Back face culling 9 o > 9 o Kamera Fram- eller baksida? Rastrering "Översätter" från hörn till pixelpunkter Ett fragment består av Definieras av hörnens h ordning sett från n kameran. Konventionen är r att motsols är r riktat mot kameran. Position: (x, y, z) i normerade enhetskoordinater Färg: (R, G, B, A) koordinater: (s, t, q, r) 7
er koordinater koordinat t s MIP-mapping MIP-mapping Teknik för att undvika aliasing-problem. Förstoring och förminskning Filtreringsalternativ Pixelpunkter på skärmen Pixelpunkter på skärmen Texelstorlek = pixelstorlek (inträffar i princip aldrig) Förstoring Pixelpunkter på skärmen Förminskning Pixelpunkter på skärmen 8
Clamp / repeat Bilddata: Texels (s, t) = (.25, -2.75) t Repeat Clamp m s origo n (width, height) = (2 n, 2 m ) där m, n är heltal Bilddata: Format och datatyper DEMO Format R G B R G B... R G B A R G B A... R R R R...... Datatyp GL_UNSIGNED_BYTE GL_FLOAT... gustav.taxen@avalanchestudios.se jobs@avalanchestudios.se www.avalanchestudios.se 9