170 likes | 288 Views
Rendering algorithms. Mark Nelson mjas@itu.dk. Last lecture: Wireframe projection. Wireframe -> opaque. Starts the same Transform vertices to (x,y) coordinates But instead of connecting the 3 vertices, flood-fill it with a color But, how to deal with overlapping triangles?. Occlusion.
E N D
Rendering algorithms • Mark Nelson • mjas@itu.dk Fall 2013 www.itu.dk
Wireframe -> opaque • Starts the same • Transform vertices to (x,y) coordinates • But instead of connecting the 3 vertices, flood-fill it with a color • But, how to deal with overlapping triangles?
Occlusion • Wireframes have no occlusion • Front and back side of objects are visible • If surfaces are opaque, that won’t do • How do we draw only visible surfaces?
Painter’s algorithm • Simplest solution • Sort triangles from back to front by center z-coord • Draw in order • Further-front trianglesoverwritefurther-back ones
Painter’s algorithm downsides • Wasteddrawingeffort • Trianglesaredrawnonly to beoverwritten • Possibleartifactssince it only sorts by triangle centers
Scanline algorithm • Line by line • Find all triangle edges that intersect this line • Start scanning left to right • When we encounter an edge: • Add triangle to stack if it’s not on it (starting edge) • Remove triangle if it was already on the stack (closing edge) • Draw pixel that corresponds to nearest triangle on stack
Simple ray-casting • From viewport, draw a ray from each pixel until it hits the first surface • Render that pixel • Simple but inefficient
Z-buffering • Render triangle to (x,y) framebuffer but also save the z’s • Z buffer: current z-depth of every pixel • Don’t write a pixel to the framebuffer if z > zbuffer • Optimization: draw front to back to minimize overwrites
Z-buffering / scanline • Generally combined • Proceed in scanline order • Z-buffer for occlusion test • Why not stack-based scanline algorithm? • Z-buffer correctly handles each pixel
Optimizations • Z-buffering stops us from renderingsomeunnecessary pixels • Can weavoidentireunnecessarytriangles?
Frustum culling • Excludetrianglesoutside the frustum • Clip triangles on the edges to the edge • Can be done either in viewspace or clipspace
Occlusion culling • Fast-fail completely invisible triangles • E.g. ”early z test” • Potentially visible set algorithms
Some alternative perspectives • Isometric graphics • Parallel projection, tiled, fixed viewing angle • Graphics can therefore be predrawn to fake 3d • The angle is the one where axes have the same scale • Rotated 45 degrees around vertical, 35.264 around horizontal • In pixel art, approximated with a 2:1 ratio • Oblique projection • Fake 3d • Draw a 2d front view of the object, and then a skewed 2 side view • Depth often foreshortened (e.g. 0.5)