2IV60 Computer Graphics Basic Math for CG Jack van Wijk TU/e.
2IV60 Computer graphics set 8: Illumination Models and Surface-Rendering Methods Jack van Wijk TU/e.
-
Upload
loren-oxton -
Category
Documents
-
view
227 -
download
0
Transcript of 2IV60 Computer graphics set 8: Illumination Models and Surface-Rendering Methods Jack van Wijk TU/e.
2IV60 Computer graphicsset 8: Illumination Models and Surface-Rendering Methods
Jack van Wijk
TU/e
OpenGL Illumination exampleGlfloat 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 shadingglEnable(GL_LIGHTING); // Enable lightingglEnable(GL_LIGHT0); // Enable light source #0
glLightfv(GL_LIGHT0, GL_POSITION, lightPos); // position LS 0glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteColor); // set color LS 0
glMaterialfv(GL_FRONT, GL_DIFFUSE, pinkColor); // set surface // colorglBegin(GL_TRIANGLES); glNormal3fv(n1); glVertex3fv(v1); // draw triangle, give glNormal3fv(n2); glVertex3fv(v2); // first normal, followed glNormal3fv(n3); glVertex3fv(v3); // by vertexglEnd();
What is going on here?
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
Introduction 2
Example:• Illumination model gives color
vertices, • Surface is displayed via
interpolation of these colors.
H&B 17:531-532
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
Light sources 1
Light source: object that radiates energy.
Sun, lamp, globe, sky…
Intensity I = (Ired , Igreen , Iblue)
If Ired = Igreen = Iblue : white light
H&B 17-1:532-536
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
Light sources 3
Simpler yet: point light source at infinity
- Direction V and intensity I
- Sunlight
V
H&B 17-1:532-536
Light sources 4
Damping: intensity of light decreases with distance
Energy is distributed over area sphere, hence
Il = I / d2,
with d distance to light source.
In practice often too ‘agressive’,
hence Il = I / (a0 +a1d+a2d2)
If light source at infinity: No damping with distance
d
H&B 17-1:532-536
Light sources 5Directed light source, spotlight:
Light is primarily send in direction of Vlight .
PQ
d.illuminate is then cos||
If
:Or d.illuminate is then coscos If
llight
l
QVPQ
PQ
Q
l
light cone
VlightH&B 17-1:532-536
Light sources 6More subtle: Let I decrease with increasing angle
PQ
decreases.light hestronger t the,larger The
. cos:usedOften
n
II nl
l
light cone
VlightH&B 17-1:532-536
Surface illumination 1
• When light hits a surface, three things can happen:
reflection
transmission
absorption
H&B 17-2:536-537
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
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
Surface illumination 4
• Ambient light: light from the environment. Undirected light, models reflected light of other objects.
H&B 17-2:536-537
Basic illumination model 1Basic illumination model:
• Ambient light;• Point light sources;
• Ambient reflection;• Diffuse reflection;• Specular reflection.
H&B 17-3:537-546
VP of ,l
a
I
I
ss
d
a
nk
k
k
,
), ,(
tscoefficien reflection :,,
bluep,greenp,redp, kkkk
kkk
p
sda
Basic illumination model 2
• Ambient light: environment light. Undirected light, models reflected light of other objects.
aaamb IkI
H&B 17-3:537-546
Basic illumination model 3
Perfect diffuse reflector: light is reflected uniformly in all directions.
dA/cos
dA
cos
cos/
dA
dA
area.projected
energyIntensity
H&B 17-3:537-546
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
Basic illumination model 5
Perfect diffuse reflector: light is reflected uniformly in all directions.
N
L
Il
||
and 10with
0 if0
0 if)(
:reflection diffuse model Graphics
surfsource
surfsource
diffl,
PP
PPL
LN
LNLN
d
ld
k
IkI
Psurf
Psource
H&B 17-3:537-546
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
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
glad ruw
H&B 17-3:537-546
Basic illumination model 8
Phong model: empirical model for specular reflection
N
L
R
V
viewerdirection :
light ofray reflecteddirection :
, and between angle :
, and between angle :
glad),100 ruw,(1 smoothness
,)(with
,cos)(,
V
R
VR
LN
s
s
nlspecl
n
kW
IWI s
H&B 17-3:537-546
Basic illumination model 9
Phong model: empirical model for specular reflection
N
L
R
V
0or
0 if0
0 and
0 if)(
,
LN
RV
LN
RVRV sn
ls
specl
Ik
I
H&B 17-3:537-546
Basic illumination model 10
Phong model: calculating the vectors
NL R )2(
hence
)2(
LNLNR
NLNLR
L
N.L V
|| surfview
surfview
PP
PPV
H&B 17-3:537-546
Basic illumination model 11
N
L
R
V
H|VL|
VLH
Phong model: variant with halfway vector H.
Use instead of
)(,sn
lsspecl IkI HN
If light source and viewer far away:
H constant.
H&B 17-3:537-546
Basic illumination model 12
n
llsldaa
lsldaa
specdifamb
IkIkIkI
IkIkIk
IIII
1
n
n
s
s
)),0(max()),0(max(
:sourceslight Multiple
)),0(max()),0(max(
HNLN
HNLN
All together:
H&B 17-3:537-546
Color (reprise):
Light intensity I and reflection coefficients k: (r,g,b) triplets
So for instance:
Plastic: kd is colored (r,g,b), ks is grey (w,w,w)
Metal: kd and ks same color
Basic model: simple but effective.
It can be done much better though…
Basic illumination model 13
)),0(max(,,, LN RlRdRdif IkI
H&B 17-3:537-546
Transparancy 1
Transparant object:- reflected and transmitted
light- refraction- scattering
H&B 17-4:546-549
Transparancy 2
Snell’s law of refraction:
N
i
L R
T
refraction ofindex : ,sinsin i
r
ir
i
r
LNTr
iri
r
i
coscos
and for solve and,
,cos,1.
law, sSnell' Use
:Derivation
LNT
NTTT
r
H&B 17-4:546-549
Transparancy 3
Thin surface:- double refraction- shift of light ray
H&B 17-4:546-549
Transparancy 3
Very thin surface:- Discard shift
opacity :1
ncy transpara:
10
)1(
:model Simple
transrefl
t
t
t
tt
k
k
k
IkIkI
Poor result for silhouette edges… H&B 17-4:546-549
Atmospheric effects 1
Atmospheric effects:- dust, smoke, vapor- colors are dimmed- objects less well visible
H&B 10-5:549-550
Atmospheric effects 2
factorn attenuatio :
distance:
with ,)(
:atmosphereby n Attenuatio
d
edf datmo
minmax
min)(:Simplerdd
dddfatmo
atmoatmoobjatmo IdfIdfI )](1[)(
:intensity Perceived
= 0.25 + [ 1 0.25 ] H&B 10-5:549-550
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
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
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
• Human perception: edges are given emphasis, contrast is increased near edges.
Mach banding
Angel (2000)
H&B 17-10:559-564
Rendering polygons 2
Gouraud surface rendering:• Determine average normal on vertices;• Determine color for vertices;• Interpolate the colors per polygon (incrementally).
N1
N2
N3
N4
V
n
1k k
n
1k kV
N
NN
H&B 17-10:559-564
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
Gouraud Flat
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
2nd order approximation of color over polygon:
feydxcybxyaxyxI 22),(
H&B 17-10:559-564
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
Rendering polygons 5
Gouraud
Flat
PhongH&B 17-10:559-564
OpenGL IlluminationGlfloat 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 shadingglEnable(GL_LIGHTING); // Enable lightingglEnable(GL_LIGHT0); // Enable light source #0
glLightfv(GL_LIGHT0, GL_POSITION, lightPos); // position LS 0glLightfv(GL_LIGHT0, GL_DIFFUSE, whiteColor); // set color LS 0
glMaterialfv(GL_FRONT, GL_DIFFUSE, pinkColor); // set surface // colorglBegin(GL_TRIANGLES); glNormal3fv(n1); glVertex3fv(v1); // draw triangle, give glNormal3fv(n2); glVertex3fv(v2); // first normal, followed glNormal3fv(n3); glVertex3fv(v3); // by vertexglEnd();
H&B 17-11:564-574
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)
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
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
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);
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);
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(…);
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.
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.
(RS, GS, BS, AS): Source color + alpha
(RD, GD, BD, AD): Destination color + alpha
(SR, SG, SB, SA): Source blending factors
(DR, DG, DB, DA): Destination blending factors
Components of Source and Destination are weighted and added:
(SRRS+ DRRD, SGGS+ DGGD, SBBS+ DBBD, SAAS+ DAAD)
is stored in the current image.
OpenGL Surface properties 5
H&B 17-11:564-574
(RS, GS, BS, AS): Source color + alpha
(RD, GD, BD, AD): Destination color + alpha
(SR, SG, SB, SA): Source blending factors
(DR, DG, DB, DA): 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.
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();
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.
Next
• Now that we know how to render curved surfaces, let’s study how to define these…