Download presentation
Presentation is loading. Please wait.
Published byLoren Oxton Modified over 9 years ago
1
2IV60 Computer graphics set 8: Illumination Models and Surface-Rendering Methods Jack van Wijk TU/e
2
OpenGL Illumination example Glfloat lightPos[] = {2.0, 0.0, 3.0, 0.0}; Glfloat whiteColor[] = {1.0, 1.0, 1.0, 1.0}; Glfloat pinkColor[] = {1.0, 0.5, 0.5, 1.0}; glShadeModel(GL_SMOOTH); // Use smooth shading glEnable(GL_LIGHTING); // Enable lighting glEnable(GL_LIGHT0); // Enable light source #0 glLightfv(GL_LIGHT0, GL_POSITION, lightPos); // position LS 0 glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteColor); // set color LS 0 glMaterialfv(GL_FRONT, GL_DIFFUSE, pinkColor); // set surface // color glBegin(GL_TRIANGLES); glNormal3fv(n1); glVertex3fv(v1); // draw triangle, give glNormal3fv(n2); glVertex3fv(v2); // first normal, followed glNormal3fv(n3); glVertex3fv(v3); // by vertex glEnd(); What is going on here?
3
Introduction 1 Illumination model: Given a point on a surface, what is the perceived color and intensity? Known as Lighting Model, or Shading Model Surface rendering: Apply the Illumination model to color all pixels of the surface. H&B 17:531-532
4
Introduction 2 Example: Illumination model gives color vertices, Surface is displayed via interpolation of these colors. H&B 17:531-532
5
Introduction 3 Illumination: Physics: –Material properties, light sources, relative positions, properties medium Psychology: –Perception, what do we see –Color! Often approximating models H&B 17:531-532
6
Light sources 1 Light source: object that radiates energy. Sun, lamp, globe, sky… Intensity I = (I red, I green, I blue ) If I red = I green = I blue : white light H&B 17-1:532-536
7
Light sources 2 Simple model: point light source -position P and intensity I -Light rays along straight lines -Good approximation for small light sources H&B 17-1:532-536
8
Light sources 3 Simpler yet: point light source at infinity -Direction V and intensity I -Sunlight V H&B 17-1:532-536
9
Light sources 4 Damping: intensity of light decreases with distance Energy is distributed over area sphere, hence I l = I / d 2, with d distance to light source. In practice often too ‘agressive’, hence I l = I / (a 0 +a 1 d+a 2 d 2 ) If light source at infinity: No damping with distance d H&B 17-1:532-536
10
Light sources 5 Directed light source, spotlight: Light is primarily send in direction of V light. P Q ll light cone V light H&B 17-1:532-536
12
Light sources 6 More subtle: Let I decrease with increasing angle P Q ll light cone V light H&B 17-1:532-536
14
Surface illumination 1 When light hits a surface, three things can happen: reflection transmission absorption H&B 17-2:536-537
15
Surface illumination 2 Suppose, a light source radiates white light, consisting of red, green and blue light. reflection transmission absorption If only red light is reflected, then we see a red surface. H&B 17-2:536-537
16
Surface illumination 3 Diffuse reflection: Light is uniformly reflected in all directions Specular reflection: Light is stronger reflected in one direction. specular reflection diffuse reflection H&B 17-2:536-537
17
Surface illumination 4 Ambient light: light from the environment. Undirected light, models reflected light of other objects. H&B 17-2:536-537
18
Basic illumination model 1 Basic illumination model: Ambient light; Point light sources; Ambient reflection; Diffuse reflection; Specular reflection. H&B 17-3:537-546
19
Basic illumination model 2 Ambient light: environment light. Undirected light, models reflected light of other objects. H&B 17-3:537-546
20
Basic illumination model 3 Perfect diffuse reflector: light is reflected uniformly in all directions. dA/cos dA H&B 17-3:537-546
21
Basic illumination model 4 Perfect diffuse reflector: light is reflected uniformly in all directions.. N L dA/cos dA Lambert’s law: Reflected energy is proportional with cos , where denotes the angle between the normal N and a vector to the light source L. H&B 17-3:537-546
22
Basic illumination model 5 Perfect diffuse reflector: light is reflected uniformly in all directions. N L IlIl P surf P source H&B 17-3:537-546
23
Basic illumination model 6 Perfect specular reflector: light is only reflected in one direction. Angle of incidence is angle of reflection. N L R H&B 17-3:537-546
24
Basic illumination model 7 Imperfect specular reflector: light is distributed in the direction of the angle of reflection, dependent on the roughness of the surface. N L R N L R gladruw H&B 17-3:537-546
25
Basic illumination model 8 Phong model: empirical model for specular reflection N L R V H&B 17-3:537-546
26
Basic illumination model 9 Phong model: empirical model for specular reflection N L R V H&B 17-3:537-546
27
Basic illumination model 10 Phong model: calculating the vectors N L R L N.L V H&B 17-3:537-546
28
Basic illumination model 11 N L R V H Phong model: variant with halfway vector H. Use instead of If light source and viewer far away: H constant. H&B 17-3:537-546
29
Basic illumination model 12 All together: H&B 17-3:537-546
30
Color (reprise): Light intensity I and reflection coefficients k: (r,g,b) triplets So for instance: Plastic: k d is colored (r,g,b), k s is grey (w,w,w) Metal: k d and k s same color Basic model: simple but effective. It can be done much better though… Basic illumination model 13 H&B 17-3:537-546
31
Transparancy 1 Transparant object: -reflected and transmitted light -refraction -scattering H&B 17-4:546-549
32
Transparancy 2 Snell’s law of refraction: N ii L R T ii rr H&B 17-4:546-549
33
Transparancy 3 Thin surface: -double refraction -shift of light ray H&B 17-4:546-549
34
Transparancy 3 Very thin surface: -Discard shift Poor result for silhouette edges… H&B 17-4:546-549
35
Atmospheric effects 1 Atmospheric effects: -dust, smoke, vapor -colors are dimmed -objects less well visible H&B 10-5:549-550
37
Atmospheric effects 2 = 0.25 + [ 1 0.25 ] H&B 10-5:549-550
38
Rendering polygons 1 Basic illumination model: Can be used per point, but that’s somewhat expensive More efficient: Illumination model gives color for some points; Surface is filled in using interpolation of these colors. H&B 17-10:559-564
39
Rendering polygons 2 Constant-intensity rendering aka flat surface rendering: Determine color for center of polygon; Fill the polygon with a constant color. Ok if: Object consists of planar faces, and Light sources are far away, and Eye point is far away, or Polygons are about a pixel in size. H&B 17-10:559-564
40
Rendering polygons 2 Constant-intensity rendering aka flat surface rendering: Determine color for center of polygon; Fill the polygon with a constant color. Highlights not visible, Facetted appearance, increased by Mach banding effect. H&B 17-10:559-564
41
Human perception: edges are given emphasis, contrast is increased near edges. Mach banding Angel (2000) H&B 17-10:559-564
42
Rendering polygons 2 Gouraud surface rendering: Determine average normal on vertices; Determine color for vertices; Interpolate the colors per polygon (incrementally). N1N1 N2N2 N3N3 N4N4 V H&B 17-10:559-564
43
Rendering polygons 3 Gouraud surface rendering: Much better result for curved surfaces Errors near highlights Linear interpolation still gives Mach banding Silhouettes are still not smooth GouraudFlat
44
Rendering polygons 4 Phong surface rendering: Determine average normal per vertex; Interpolate normals per polygon (incrementally); Calculate color per pixel. Fast Phong surface rendering: Like Phong surface rendering, but use 2 nd order approximation of color over polygon: H&B 17-10:559-564
45
Rendering polygons 5 Phong surface rendering: Even better result for curved surfaces No errors at high lights No Mach banding Silhouettes remain coarse More expensive than flat or Gouraud shading H&B 17-10:559-564
46
Rendering polygons 5 Gouraud Flat Phong H&B 17-10:559-564
47
OpenGL Illumination Glfloat lightPos[] = {2.0, 0.0, 3.0, 0.0}; Glfloat whiteColor[] = {1.0, 1.0, 1.0, 1.0}; Glfloat pinkColor[] = {1.0, 0.5, 0.5, 1.0}; glShadeModel(GL_SMOOTH); // Use smooth shading glEnable(GL_LIGHTING); // Enable lighting glEnable(GL_LIGHT0); // Enable light source #0 glLightfv(GL_LIGHT0, GL_POSITION, lightPos); // position LS 0 glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteColor); // set color LS 0 glMaterialfv(GL_FRONT, GL_DIFFUSE, pinkColor); // set surface // color glBegin(GL_TRIANGLES); glNormal3fv(n1); glVertex3fv(v1); // draw triangle, give glNormal3fv(n2); glVertex3fv(v2); // first normal, followed glNormal3fv(n3); glVertex3fv(v3); // by vertex glEnd(); H&B 17-11:564-574
48
OpenGL Light-sources 1 H&B 17-11:564-574 First, enable lighting in general: glEnable(GL_LIGHTING); OpenGL provides (at least) eight light-sources: lightName = GL_LIGHT0, GL_LIGHT1, …, GL_LIGHT7 Enable the one(s) you need with: glEnable(lightName); Set properties with glLight*(lightName, lightProperty, propertyValue); * = i, f, iv, or fv (i: integer, f: float, v vector)
49
OpenGL Light-sources 2 H&B 17-11:564-574 Position light-source: Glfloat sunlightPos[] = {2.0, 0.0, 3.0, 0.0}; Glfloat lamplightPos[] = {2.0, 0.0, 3.0, 1.0}; glLightfv(GL_LIGHT1, GL_POSITION, sunlightPos); glLightfv(GL_LIGHT2, GL_POSITION, lamplightPos); Fourth coordinate = 0: source at infinity Fourth coordinate = 1: local source Specified in world-coordinates, according to the current ModelView specification – just like geometry. Hence, take care when you specify the position. Light from above looks more natural
50
OpenGL Light-sources 3 H&B 17-11:564-574 Color light-source: Glfloat greyColor[] = {0.3, 0.3, 0.3, 1.0}; Glfloat pinkColor[] = {1.0, 0.7, 0.7, 1.0}; Glfloat whiteColor[] = {1.0, 1.0, 1.0, 1.0}; glLightfv(GL_LIGHT1, GL_AMBIENT, greyColor); glLightfv(GL_LIGHT1, GL_DIFFUSE, pinkColor); glLightfv(GL_LIGHT1, GL_SPECULAR, whiteColor); OpenGL light-source has three color properties, dependent on reflection surface. Not realistic, can be used for special effects. If you don’t have ambient light, things often appear black. Colors are always 4-vectors here: Fourth coordinate is alpha. Most cases: set it to 1.0. More settings: See book
51
OpenGL Global Lighting H&B 17-11:564-574 Global parameters: glLightModel*(paramName, paramValue); * = i, f, iv, or fv (i: integer, f: float, v vector) Global ambient light: Glfloat globalAmbient[] = {0.3, 0.3, 0.3, 1.0}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, globalAmbient); More precise specular reflection, take view position into account: glLightModelI(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); Two-sided lighting: glLightModelI(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
52
OpenGL Surface properties 1 H&B 17-11:564-574 Surface reflection parameters: glMaterial*(surfFace, surfProperty, propertyValue); * = i, f, iv, or fv (i: integer, f: float, v vector) surfFace = GL_FRONT, GL_BACK, or GL_FRONT_AND_BACK Glfloat emissionColor[] = {0.2, 0.3, 0.1, 1.0}; Glfloat diffuseColor[] = {0.6, 0.3, 0.1, 1.0}; Glfloat specularColor[] = {0.1, 0.1, 0.1, 1.0}; glMaterialfv(GL_FRONT, GL_EMISSION, emissionColor); glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuseColor); glMaterialfv(GL_FRONT, GL_SPECULAR, specularColor); glMaterialf(GL_FRONT, GL_SHININESS, 25.0f);
53
OpenGL Surface properties 2 H&B 17-11:564-574 If colors are changed often (for instance, per vertex): glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glBegin(…); for i =... for j =... glColor3f(red(i,j), green(i,j), blue(i,j)); glVertex3f(x(i,j), y(i,j), z(i,j)); glEnd(…);
54
OpenGL Surface properties 3 H&B 17-11:564-574 Transparent surfaces: First, draw all opaque surfaces; Next, draw transparent surfaces, back to front *, using something like: glColor4f(R, G, B, A); // A: alpha, for instance 0.40 glEnable(GL_BLEND); glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);... Draw transparent surfaces. glDisable(GL_BLEND); * OpenGL cannot automatically handle transparency, because of the z-buffer algorithm used for hidden surface removal. More on this later.
55
OpenGL Surface properties 4 H&B 17-11:564-574 Color Blending (see also H&B: 135-136): Source: the new graphics object to be drawn; Destination: the current image built up. (R S, G S, B S, A S ): Source color + alpha (R D, G D, B D, A D ): Destination color + alpha (S R, S G, S B, S A ): Source blending factors (D R, D G, D B, D A ): Destination blending factors Components of Source and Destination are weighted and added: (S R R S + D R R D, S G G S + D G G D, S B B S + D B B D, S A A S + D A A D ) is stored in the current image.
56
OpenGL Surface properties 5 H&B 17-11:564-574 (R S, G S, B S, A S ): Source color + alpha (R D, G D, B D, A D ): Destination color + alpha (S R, S G, S B, S A ): Source blending factors (D R, D G, D B, D A ): Destination blending factors glBlendFunc(sFactor, dFactor): specify the blending factors. glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); // Use alpha of source as transparency glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Use alpha of source as opacity More options available for special effects.
57
OpenGL Surface-Rendering 1 H&B 17-11:564-574 glShadeModel(m): specify the rendering method m = GL_FLAT or m = GL_SMOOTH (Gouraud, default) glNormal*(Nx, Ny, Nz) : specify the normal vector Flat version: glNormal3fv(nV); glBegin(GL_TRIANGLES); glVertex3fv(V1); glVertex3fv(V2); glVertex3fv(V3); glEnd(); Smooth version: glBegin(GL_TRIANGLES); glNormal3fv(nV1); glVertex3fv(V1); glNormal3fv(nV2); glVertex3fv(V2); glNormal3fv(nV3); glVertex3fv(V3); glEnd();
58
OpenGL Surface-Rendering 2 H&B 17-11:564-574 glShadeModel(m): specify the rendering method m = GL_FLAT or m = GL_SMOOTH (Gouraud, default) glNormal*(Nx, Ny, Nz) : specify the normal vector glEnable(GL_NORMALIZE): Let OpenGL normalize the normals for you. And, also take care of effects of scaling, shearing, etc.
59
Next Now that we know how to render curved surfaces, let’s study how to define these…
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.