shading and illumination

52
Shading and Illumination

Upload: catori

Post on 24-Feb-2016

61 views

Category:

Documents


0 download

DESCRIPTION

Shading and Illumination. OpenGL Shading. Without Shading. With Shading. Physics. Bidirectional R eflectance D istribution F unction (BRDF). n: Surface normal L: Radiance (“intensity along a ray”). Light Events. Reflection. Refraction. Scattering. Bidirectional Reflectance - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Shading and Illumination

Shading and Illumination

Page 2: Shading and Illumination

OpenGL Shading

Without Shading With Shading

Page 3: Shading and Illumination
Page 4: Shading and Illumination
Page 5: Shading and Illumination
Page 6: Shading and Illumination
Page 7: Shading and Illumination

Physics

Page 8: Shading and Illumination

ω

Bidirectional Reflectance Distribution Function (BRDF)

fr (ω i,ω)=dL(ω)

L(ω i)cosθidω i

=dL(ω)

L(ω i)(−ω i ⋅n)dω i

θi

n: Surface normalL: Radiance (“intensity along a ray”)

Page 9: Shading and Illumination

Light Events

Reflection Refraction Scattering

Bidirectional Reflectance Distribution Function (BRDF)

Bidirectional transmittanceDistribution Function (BTDF) Scattering Function

Bidirectional Scattering Distribution Function (BSDF)

Page 10: Shading and Illumination

Rendering Equation• Given any point x in a large environment, let L(x, ω)

be the radiance along a ray, we have:

L(x,ω)=Le(x,ω)+ fr(Ω∫ x,ω i,ω)L(x,ω i)(−ω i ⋅n)dω i

fr (ω i,ω)=dL(ω)

L(ω i)(−ω i ⋅n)dω i

ω

θi

Le: Emitted intensity (light source)Ω: A hemisphere over x

Page 11: Shading and Illumination

Light Transport

• The rendering equation describes a light transport problem:

• Each point has an integral equation.

• Light can be reflected multiple times, so those integral equations are highly related.

• Solution: global illumination.

• Methods: ray tracing, radiosity.

Page 12: Shading and Illumination

Example: Caustics

Page 13: Shading and Illumination

Example: Color Bleeding

Page 14: Shading and Illumination

OpenGL Illumination

• Unfortunately, OpenGL doesn’t support global illumination.

• Instead, it only considers local illumination: light can only be reflected once.

• Even for local illumination, OpenGL is not physically based. It only provides an approximation.

• To accurately get multiple reflections, you need to better rendering algorithms.

• You can approximate some global illumination effects using GPU programmable shaders.

Page 15: Shading and Illumination

OpenGL Illumination

• Light sources

• Surface material properties

• Surface normal

• Incoming (light) and outgoing (eye) directions

Page 16: Shading and Illumination

Point Light Source

GLfloat light_position[] = {1.0, 1.0, 1.0}; glLightfv(GL_LIGHT0, GL_POSITION, light_position);

Page 17: Shading and Illumination

Directional Light Source

GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; glLightfv(GL_LIGHT0, GL_POSITION, light_position);

Page 18: Shading and Illumination

Spot Light Source

GLfloat light_position[] = {1.0, 1.0, 1.0}; glLightfv(GL_LIGHT0, GL_POSITION, light_position);Glfloat spot_position[] = {1.0, 1.0, 1.0}; glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spot_position);Glfloat EXPONENT=10;glLightfv(GL_LIGHT0, GL_SPOT_EXPONENT, EXPONENT);Glfloat cutoff=30;glLightfv(GL_LIGHT0, GL_SPOT_CUTOFF, cutoff);

Page 19: Shading and Illumination

• OpenGL separates surface reflection into three components:

• Therefore, you should define three light intensities. Each of them contributes to a reflection component:• Ambient • Diffuse• Specular

OpenGL Light Intensity

Ambient Diffuse Specular Total

Page 20: Shading and Illumination

OpenGL Light Source

//To specify the light position and intensityGlfloat LightPosition []={100, 0.0, 100};Glfloat LightAmbient []={0.2, 0.2, 0.2};Glfloat LightDiffuse []={1.0, 1.0, 1.0};Glfloat LightSpecular []={0.4, 0.4, 0.4};

glLightfv(GL_LIGHT1, GL_POSITION, LightPosition);glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);glLightfv(GL_LIGHT1, GL_SPECULAR, LightSpecular);

Page 21: Shading and Illumination

OpenGL Light Source• For a point light source, the light intensity drops when the

light moves away from the source. So OpenGL multiplies the intensity with an attenuation factor:

attenuation =1

Aconstant + dAlinear + d2Aθuadratic

glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 2.0); glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 1.0); glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.5);

Page 22: Shading and Illumination

Default Values

No ambient

Unit diffuse

Unit specular

Directional light along z

No attenuation

No spot light

Page 23: Shading and Illumination

Multiple Light Sources

//Specify the position and properties for GL_LIGHT0glEnable(GL_LIGHT0);//Specify the position and properties for GL_LIGHT1glEnable(GL_LIGHT1);//Create other light sources here.glEnable(GL_LIGHTING);

//You can turn on and off lights like this:glDisable(GL_LIGHT0);glEnable(GL_LIGHT0);glDisable(GL_LIGHTING);glEnable(GL_LIGHTING);

Page 24: Shading and Illumination

OpenGL Light Source

• The light source is subject to the MODELVIEW matrix as well.

• You can create the light source in the eye space, so it always attached to the camera.

• You can create the light source after camera motion, so it is fixed in the world space.

• You can even apply extra transformation/animation to light source.

Page 25: Shading and Illumination

• OpenGL separates surface reflection into three components:

• Therefore, you should define three material properties. Each of them contributes to a reflection component:• Ambient • Diffuse• Specular

OpenGL Material

Ambient Diffuse Specular Total

Page 26: Shading and Illumination

Ambient Reflection

Lambient =Iam bient ⋅Kam bient

Ambient Radiance(Pixel Intensity)

Ambient Light

Ambient Surface Material Coefficient

• The object will have a uniform color.

• It looks similar to the result without lighting.

• The color is not directly assigned. It’s controlled by the light source and surface reflection coefficient.

Page 27: Shading and Illumination

Diffuse Reflection• Diffuse reflection assumes that the light is

equally reflected in every direction.

• In other words, if the light source and the object has fixed positions in the world space, the camera motion doesn’t affect the appearance of the object.

• The reflection only depends on the incoming direction. It is independent of the outgoing (viewing) direction.

• Real objects with only a diffuse reflection property are called: Lambertian Surfaces, for example, clay.

Page 28: Shading and Illumination

Diffuse Reflection

• Lambert’s law says that the outgoing radiance depends on the cosine of the incident angle.

• Because the irradiance (photons per unit surface area) becomes smaller (as in the rendering function before).

dA

dA

dA

dA/cosθi

θi

Page 29: Shading and Illumination

Diffuse Reflection

θi

Ldiffuse =Idiffuse ⋅Kdiffuse cosθi

Diffuse Radiance

Diffuse Light

Diffuse Surface Material Coefficient

Brighter Darker

Page 30: Shading and Illumination

An ExampleKdiffuse

Kambient

Page 31: Shading and Illumination

Specular Reflection

• Some materials, such as plastic and metal, can have shiny highlight spots.

• This is due to a glossy mirror-like reflection.

• Materials have different shininess/glossiness.

Page 32: Shading and Illumination

Specular Reflection

• For a mirror, the light is reflected into a single direction.

• Specular reflection assumes that the glossy surface is not even, so the light is reflected into a small cone.

• If your viewing direction is close to the mirror direction, you receive high radiance.

θi θi

N

θiϕ

N

Page 33: Shading and Illumination

Specular Reflection

θi ϕ

NLV

R

• Given L, N and V, we first calculate the mirror reflection direction:

• Then we have:

R = 2(L⋅N)N- L

Lspecular =Ispecular⋅Kspecularcosnφ

ϕ is the angle between V and R.cosφ =V ⋅R

n indicates surface shininess.

Page 34: Shading and Illumination

An ExampleKspecular

Shininess n

Page 35: Shading and Illumination

Total Reflection• Illumination from a single light source i:

• Illumination from multiple light source:

Lspecular =Ispecular⋅Kspecularcosnφ

Lambient =Iam bient ⋅Kam bient

Ldiffuse =Idiffuse ⋅Kdiffuse cosθi

Ltotali =Lam bient

i + Ldiffusei + Lspecular

i

Ltotal =Lglobalam ibient + Ltotal0 + Ltotal

1 + Ltotal2 +L

Page 36: Shading and Illumination

OpenGL Material

• OpenGL defines material properties like this:

• Face: GL_FRONT, GL_BACK, or GL_FRONT_AND_BACK• Property: GL_AMBIENT, GL_DIFFUSE, …• Value: A vector array

glMaterialfv("face”, "property”, “value”)

Page 37: Shading and Illumination

For Example

Glfloat mat_amb_diff[]={1.0, 0.5, 0.8, 10.0};Glfloat mat_specular[]={1.0, 1.0, 1.0, 1.0};Glfloat shiniess []={5.0};glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_amb_diff);glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS, shininess);

• Specular highlights are usually in the light source’s color.• Ambient and diffuse can be defined together or separately.• If you don’t mind dark shadow, just ignore ambient.• Shininess is from 0 (dull) to 128 (shiny).

Page 38: Shading and Illumination

Light Model

• Enable two-sided lighting• Property=GL_LIGHT_MODEL_TWO_SIDE• If value=0, only GL_FRONT is rendered; • If value=1, both GL_FRONT and GL_BACK are rendered

• Global ambient color• Property=GL_LIGHT_MODEL_AMBIENT• Value is a color array

• And more…

glLightModelfv(property, value);

Page 39: Shading and Illumination

Surface Normal• Normals are used in calculating reflection. Normals are also

used to decide the surface front and back side.

(x, y, z)

It’s normal isnormalized(x, y, z)

V0

V1

V2

E10=V1-V0

E20=V2-V0

N =E10× E20

E10× E20

Page 40: Shading and Illumination

Surface Normal

for(int i=0; i<t_number; i++){

glNormal3f(…);glBegin(GL_TRIANGLES);glVertex3f(…);glVertex3f(…);glVertex3f(…);glEnd();

}

• We can define a triangle normal for the whole triangle. The result is a surface made of triangles.

Page 41: Shading and Illumination

Surface Normal

for(int i=0; i<t_number; i++){

glBegin(GL_TRIANGLES);glNormal3f(…); //XN0glVertex3f(…); //X0glNormal3f(…); //XN1glVertex3f(…); //X1glNormal3f(…); //XN2glVertex3f(…); //X2glEnd();

}

• But the mesh represents a smooth surface. We define a normal for each vertex, by taking the normalized average of its adjacent triangle normals.

Page 42: Shading and Illumination

Lighting and Shading

Intersection Test

Given a 2D Pixel Location

Selection Ray

• Each pixel corresponds to a visible 3D point.• We need to calculate the pixel intensity for that 3D point,

based on the reflection model.

Inverse Projection

A 3D point on a polygon

Reflection Calculation

Ray Tracing

Rasterization

Given a 3D polygon

A 2D polygon

Projection

A number of pixels

The Graphics Pipeline

Page 43: Shading and Illumination

Lighting and Shading• OpenGL calculates reflection at each vertex.

Rasterization

Given a 3D primitive

A 2D polygon, with 3D info

Projection

Pixels with 3D info

OpenGL + GPU (Phong)

Fragment Shader

Pixels with intensities

Raserization

Given a 3D polygon

A 2D polygon, with intensity info

Projection

Pixels with intensitiesOpenGL

Lighting

A 3D polygon, with intensity info

Page 44: Shading and Illumination

Shading

Interpolation/Raserization

Given a 3D polygon

A 2D polygon, with info

Projection

Pixels with intensities

Lighting

A 3D polygon, with info

• Now given a 2D polygon with the value on each vertex, how to interpolate the value for each pixel?• Flat shading• Gouraud Shading*• Phong Shading*

*: Both were proposed by researchers at the University of Utah in 1970s.

Page 45: Shading and Illumination

Flat Shading• Flat shading uses one vertex’s intensity value for the whole

polygon. glShadeModel(GL_FLAT)

Vertex Normal + Flat Shading Triangle Normal + Smooth Shading

What’s the difference?

Page 46: Shading and Illumination

Flat Shading VS. Smooth Shading

• Flat shading has this discontinuous artifact.• It is fast, since only needs one calculation per polygon.• Only useful when the polygons are very small.

• Smooth shading avoid the discontinuous artifact.• Slightly slower.• More realistic.

Page 47: Shading and Illumination

Smooth Shading• OpenGL uses a smooth Gouraud shading technique.• The basic idea is to calculate the color intensity at each

vertex, and then interpolate over the polygon.• To use smooth shading:

glShadeModel(GL_SMOOTH)

Vertex Normal + Flat Shading Vertex Normal + Smooth Shading

Page 48: Shading and Illumination

Review: Linear Interpolation

Vp

P

Q

Vq

R

Vr=?

• Given a line segment with two end points (P and Q) and a sample point R, we can interpolate a value function V over the line as:

Vr =Q−R V p+ P−R V θ

P−Q

Page 49: Shading and Illumination

OpenGL Interpolation• OpenGL does 2D interpolation in a scanline way.• The result is identical to the interpolation using barycentric

coordinates. But the scanline method is faster. Why?

For every scanline

Page 50: Shading and Illumination

Gouraud Shading• Gouraud shading calculates the color per vertex.• It has artifacts too.• To solve it, use smaller polygons.

dark

dark

dark

darkdark or bright?

Page 51: Shading and Illumination

Phong Shading• Instead of interpolating the color (light intensity), Phong shading

interpolates surface normals, and then calculates the 3D reflection per 2D pixel.

• OpenGL doesn’t support it, since 3D information needs to be carried through the whole pipeline.

• GPU supports it. You can use OpenGL shading language (GLSL).• It’s still under the projection+scanline framework, but its result is

comparable to ray tracing.

Flat Shading Gouraud Shading Phong Shading

Page 52: Shading and Illumination

Summary• The projection+scanline graphics pipeline is also called

rasterization-based rendering.• Examples: OpenGL, Pixar Renderman, GPU…• Fast, but difficult to handle global illumination• Widely used in games

• Alternatively, ray tracing is based on the inverse-projection+ray-intersection framework• Examples: POV-Ray, new Pixar Renderman, PBRT…• Slow, but handles global illumination• Used for offline rendering, such as movie effects