310 likes | 657 Views
Other Rendering Techniques. Types of rendering Wireframe techniques Scan-line conversion Reyes rendering Ray tracing (done) Shadows Reflections Depth of field, focus, etc. Antialiasing. Line only techniques. Hidden-line removal Line graphics Wireframe images “Halo” line images.
E N D
Other Rendering Techniques • Types of rendering • Wireframe techniques • Scan-line conversion • Reyes rendering • Ray tracing (done) • Shadows • Reflections • Depth of field, focus, etc. • Antialiasing
Line only techniques • Hidden-line removal • Line graphics • Wireframe images • “Halo” line images
Robert’s Algorithm • First visible line algorithm • O(N2) complexity • All objects must be convex volumes • Excessively complex
Warnock Algorithm • Spatial subdivision • Quad-trees
Appel’s Algorithm • Quantitative invisibility • When a line goes behind something, increment by 1 • When it comes out, increment by -1
What are the ways to convert primitives to image? • Scan-line conversion • Ray tracing Anything else?
Scan-line conversion • Each primitive is mapped to 2D and then converted to image • List priority algorithms • Z-buffer techniques • A-buffer techniques
Painters Algorithm • Sort back to front • Draw back to front • That’s all there is to it • Does this always work?
Z-buffer algorithms • Associate a z value with each pixel • Contains z for nearest point drawn so far • OpenGL, Direct3D, etc. • Where do we get the Z?
A-Buffer Algorithms • Create a list of polygons for each scan line • Determine x extents for each line • Sort in z order • Draw pixel for nearest line
Spanning Scan Line Algorithms • Create a list of polygons for each scan line • Determine x extents for each line • Determine spans • All end points and intersections partition spans • Draw front line for each span
List priority algorithms • Sort things in depth order • Painter’s algorithm paints back to front • We could just paint front if no overlaps • Newell-Newell-Sancha Algorithm • Provides way to sort polygons • Splits any polygons if there is a cyclical relationship
Doing things in a z-buffer world • Z-buffer: the most common scan-line method • What’s good about it? • What’s bad about it?
Shadows? • Why does OpenGL not show shadows?
Drawing Shadows • Assume a light at (0,0,0). We want to know were the shadow projects on a plane defined by ax+by+cz+d=0 • An occluding point S=(sx,sy,sz,1) • Anything along line through S would be: (asx,asy,asz,1) • Line intersection with plane is: • aasx+absy+acsz+d=0 • a=-d/(asx+bsy+csz) • Intersection with plane is: -d(sx,sy,sz)/(asx+bsy+csz)
Similar approach exists For lights at infinity Using this equation • -d(sx,sy,sz)/(asx+bsy+csz) 1. Translate so light is at origin 2. Put this matrix on stack (using translated plane) 3. Draw object we are casting shadow of in shadow color ???
How I got this working… • I display the shadow into the stencil buffer • I then draw the polygon with alpha value that decreases brightness • See example program…
Shadow Direction Image from light 0 viewpoint Image from light 1 viewpoint What all can we do with this?
Lit Polygon Determination Image from light 0 viewpoint Image from light 1 viewpoint Partition polygons into lit/not lit sets Subdivide any that are partially lit
Shadow Texture Image from light 0 viewpoint Image from light 1 viewpoint Create a texture map for each visible polygon
Shadow Map Image from light 0 viewpoint Depth map from light 0 viewpoint The map partitions the space into shadowed/not shadowed. For each point, determine which partition we are in
Deep Shadow Maps 3D texture where each point is how much illumination we receive
Shadow Volumes • Polygons cast polyhedra of shadow volumes • Intersect polyhedra and object space
Reflections/Transparency? • How?
Environment Maps • Uses vertex normals to generate texture coordinates • How can we use this to generate: • Reflections • Transparency with refraction?
Depth of Field? • What? • Why? • How?
Motion Blur • What? • Why? • How?