Shaders (in code openGL/03-shaders) Phong fragment shader Gouraud vs per-pixel shading advantages/disadvantages of each Depth shading Silhouette shading Toon shading Deferred shading multiple rendering passes to compute in several stages fragment shader renders to texture in a FBO (i.e. offscreen texture) can render Phong parameters into textures, then compute in a second pass (in openGL/06-deferred) Texture Mapping adding texture coordinate attributes to a vertex openGL/04-textures/wavefront.frag: object colour = kd replacing kd with texture colour modulating kd with texture colour decalling kd with texture colour (i.e. keep kd for background pixels) Texture Lookup nearest bilinear weights of four closest texels mip maps creating the next coarsest level from the current level lookup at (s,t) how to determine the level (log_2( p ), where p = max pixel dimension on texmap) variants: use closest mipmap level; interpolate between mipmap levels (i.e. trilinear) Texture sampling computing nearest, bilinear, mip-map texture lookup mip-map storage anisotropic sampling rip-map Feline paper: A circular sample in pixel projects to an ellipsoid on texture Sample along the major axis of the ellipsoid with radius = minor axis Procedural textures Perlin noise how to generate a multi-scale noise function examples of how Perlin noise is used (in openGL/05-proceduralTextures/) Environment maps computing texture coordinates for a ray Bump mapping general idea of perturbing surface normals silhouettes and shadows are incorrect Ray tracing what happens at each ray bounce shadow rays to all point lights recursive ray in ideal reflection direction apply Phong to every incoming ray Ray/triangle intersection ray parameterization: p + td plane equation for plane of triangle: n dot x = d Barycentric coordinates p = alpha v1 + beta v2 + gamma v0 for points inside triangle: alpha + beta + gamma = 1 alpha, beta, gamma >= 0 idea that alpha, beta, gamma are the SIGNED areas of sub-triangles