Académique Documents
Professionnel Documents
Culture Documents
Light
aevans@salleurl.edu
Programación de Gráficos 3D
1
Alun Evans – aevans@salleurl.edu
RGB colour model
Device dependent
Programación de Gráficos 3D
2
Alun Evans – aevans@salleurl.edu
Applying colour to a triangle
1) Interpolate vertex colour
2) Send colour as uniform
3) Send colour as texture
Programación de Gráficos 3D
3
Alun Evans – aevans@salleurl.edu
Spot the difference
Programación de Gráficos 3D
4
Alun Evans – aevans@salleurl.edu
Spot the difference
Programación de Gráficos 3D
5
Alun Evans – aevans@salleurl.edu
The difference is light!
Programación de Gráficos 3D
6
Alun Evans – aevans@salleurl.edu
Making things more realistic
Programación de Gráficos 3D
7
Alun Evans – aevans@salleurl.edu
Materials in 3D graphics
Material != Surface/Object
Programación de Gráficos 3D
8
Alun Evans – aevans@salleurl.edu
Light - diffuse
Programación de Gráficos 3D
9
Alun Evans – aevans@salleurl.edu
Diffuse reflection
Programación de Gráficos 3D
10
Alun Evans – aevans@salleurl.edu
Coloured diffuse reflection
Programación de Gráficos 3D
11
Alun Evans – aevans@salleurl.edu
Light - specular
Programación de Gráficos 3D
12
Alun Evans – aevans@salleurl.edu
Specular reflection
Programación de Gráficos 3D
13
Alun Evans – aevans@salleurl.edu
Mixing specular and diffuse
Programación de Gráficos 3D
14
Alun Evans – aevans@salleurl.edu
In the real world
Programación de Gráficos 3D
15
Alun Evans – aevans@salleurl.edu
(nearly) perfect specular reflection
Programación de Gráficos 3D
16
Alun Evans – aevans@salleurl.edu
Almost zero specular reflection
Programación de Gráficos 3D
17
Alun Evans – aevans@salleurl.edu
Sub surface scattering
Programación de Gráficos 3D
18
Alun Evans – aevans@salleurl.edu
Simulating this in graphics
Programación de Gráficos 3D
19
Alun Evans – aevans@salleurl.edu
Two models of illumination
1. Local 2. Global
Illumination Illumination
Pixels on screen
Programación de Gráficos 3D
20
Alun Evans – aevans@salleurl.edu
1. Local (Direct) illumination
Each object in the scene is shaded independently (with
special exceptions such as reflective surfaces) relative to light
sources
Usually much faster than global illumination, but also
much less realistic
Programación de Gráficos 3D
21
Alun Evans – aevans@salleurl.edu
Global Illumination
Programación de Gráficos 3D
22
Alun Evans – aevans@salleurl.edu
Global vs Local Illumination
Programación de Gráficos 3D
23
Alun Evans – aevans@salleurl.edu
Local Illumination
Programación de Gráficos 3D
24
Alun Evans – aevans@salleurl.edu
Illuminating a surface with light
Programación de Gráficos 3D
25
Alun Evans – aevans@salleurl.edu
How did they shade Virtua Fighter?
First polygon based fighting game
(just before Tekken)
Programación de Gráficos 3D
26
Alun Evans – aevans@salleurl.edu
Lambertian reflection
is directly proportional
Programación de Gráficos 3D
27
Alun Evans – aevans@salleurl.edu
Lambert’s Law
Programación de Gráficos 3D
28
Alun Evans – aevans@salleurl.edu
How do we get the cosine of the angle between
two vectors?
The dot product (producto escalar)
Programación de Gráficos 3D
29
Alun Evans – aevans@salleurl.edu
N dot L
Programación de Gráficos 3D
30
Alun Evans – aevans@salleurl.edu
Lambert’s law simulates diffuse reflection
Programación de Gráficos 3D
31
Alun Evans – aevans@salleurl.edu
Flat Shading - simplest way of shading
Programación de Gráficos 3D
32
Alun Evans – aevans@salleurl.edu
Modern Flat Shading
Programación de Gráficos 3D
33
Alun Evans – aevans@salleurl.edu
Calculating surface normal
Programación de Gráficos 3D
34
Alun Evans – aevans@salleurl.edu
Flat shading algorithm
Programación de Gráficos 3D
35
Alun Evans – aevans@salleurl.edu
Flat shading vs smooth shading
Programación de Gráficos 3D
36
Alun Evans – aevans@salleurl.edu
Henri Gouraud
1971
Programación de Gráficos 3D
37
Alun Evans – aevans@salleurl.edu
Vertex normals vs Face Normals
Programación de Gráficos 3D
38
Alun Evans – aevans@salleurl.edu
Gouraud Shading
Programación de Gráficos 3D
39
Alun Evans – aevans@salleurl.edu
Gouraud vs flat shading
Programación de Gráficos 3D
40
Alun Evans – aevans@salleurl.edu
Our lighting model so far...
Programación de Gráficos 3D
41
Alun Evans – aevans@salleurl.edu
Normals in models
Most modelling packages export per-vertex normals, so
we can load them into GPU memory (faster than
calculating them).
Programación de Gráficos 3D
42
Alun Evans – aevans@salleurl.edu
Implementing Lambert reflection in OpenGL
Programación de Gráficos 3D
43
Alun Evans – aevans@salleurl.edu
Before we start, naming conventions in
shaders
attributes are the things that come into the vertex shader
- variables start with a_
Programación de Gráficos 3D
44
Alun Evans – aevans@salleurl.edu
VBOs
VAO
VBO: Vertex UV (floats - 2)
Fragment Shader
VBO: Indices (ints)
Programación de Videojuegos
45
Alun Evans – aevans@salleurl.edu
Steps to see normals - same as UVs
1) Add new VBO to read normals of sphere
Programación de Gráficos 3D
47
Alun Evans – aevans@salleurl.edu
Adding light
Programación de Gráficos 3D
48
Alun Evans – aevans@salleurl.edu
Steps to see normals - same as UVs
1) Add new global light variable to represent direction to light
e.g.
vec3 g_light_dir(100, 100, 100);
Programación de Videojuegos
49
Alun Evans – aevans@salleurl.edu
Calculating NdotL in shader
We must make sure NdotL is greater than 0 to avoid
errors. e.g. this situation makes no sense, as cos(100o)
< 0, so we would be ‘subtracting’ light.
N
Programación de Videojuegos
50
Alun Evans – aevans@salleurl.edu
Calculating NdotL
vec3 L = normalize(u_light_dir);
//....
Programación de Videojuegos
51
Alun Evans – aevans@salleurl.edu
Advanced Adding the universe
Programación de Videojuegos
52
Alun Evans – aevans@salleurl.edu
Advanced: add the universe
1. Download milkyway.bmp from estudy
Programación de Videojuegos
53
Alun Evans – aevans@salleurl.edu
More advanced
Programación de Videojuegos
54
Alun Evans – aevans@salleurl.edu