440 likes | 620 Views
CS 551/651: Advanced Computer Graphics. Advanced Ray Tracing Radiosity. Administrivia. Quiz 1: Tuesday, Feb 20 Yes, I’ll have your homework graded by then (somehow) Normal written exam (oral later). Recap: Distributed Ray Tracing.
E N D
CS 551/651: Advanced Computer Graphics Advanced Ray Tracing Radiosity David Luebke 111/17/2014
Administrivia • Quiz 1: Tuesday, Feb 20 • Yes, I’ll have your homework graded by then (somehow) • Normal written exam (oral later) David Luebke 211/17/2014
Recap: Distributed Ray Tracing • Distributed ray tracing: an elegant stochastic approach that distributes rays across: • Pixel for antialiasing • Light sourcefor soft shadows • Reflection function for soft (glossy) reflections • Time for motion blur • Lens elements for depth of field • Cook: 16 rays suffice for all of these David Luebke 311/17/2014
Recap: Backwards Ray Tracing • Two-pass algorithm: • Rays are cast from light into scene • Rays are cast from the eye into scene, picking up illumination showered on the scene in the first pass • Backwards ray tracing can capture: • Indirect illumination • Color bleeding • Caustics David Luebke 411/17/2014
Recap: Backwards Ray Tracing • Arvo: illumination mapstile surfaces with regular grids, like texture maps • Shoot rays outward from lights • Every ray hit deposits some of its energy into surface’s illumination map • Ignore first generation hits that directly illuminate surface (Why?) • Eye rays look up indirect illumination using bilinear interpolation David Luebke 511/17/2014
Recap: Radiosity • Ray tracing: • Models specular reflection easily • Diffuse lighting is more difficult • View-dependent, generates a picture • Radiosity methods explicitly model light as an energy-transfer problem • Models diffuse interreflection easily • But only diffuse; no shiny (specular) surfaces • View-independent, generates a 3-D model David Luebke 611/17/2014
Recap: Radiosity • Basic idea: represent surfaces in environment as many discrete patches • A patch, or element, is a polygon over which light intensity is constant • Model light transfer between patches as a system of linear equations • Solve this system for the intensity at each patch • Solve for R,G,B intensities; get color at each patch • Render patches as colored polygons in OpenGL David Luebke 711/17/2014
Recap: Fundamentals • Definition: • The radiosity of a surface is the rate at which energy leaves the surface • Radiosity = rate at which the surface emits energy + rate at which the surface reflects energy • Simplifying assumptions • Environment is closed • All surfaces have Lambertian reflectance • Surface patches emit and reflect light uniformly over their entire surface David Luebke 811/17/2014
Radiosity • For each surface i: Bi = Ei + i Bj Fji(Aj / Ai) where Bi, Bj= radiosity of patch i, j Ai, Aj= area of patch i, j Ei= energy/area/time emitted by i i = reflectivity of patch i Fji = Form factor from j to i David Luebke 911/17/2014
Form Factors • Form factor: fraction of energy leaving the entirety of patch i that arrives at patch j, accounting for: • The shape of both patches • The relative orientation of both patches • Occlusion by other patches • We’ll return later to the calculation of form factors David Luebke 1011/17/2014
Form Factors • Some examples… Form factor: nearly 100% David Luebke 1111/17/2014
Form Factors • Some examples… Form factor: roughly 50% David Luebke 1211/17/2014
Form Factors • Some examples… Form factor: roughly 10% David Luebke 1311/17/2014
Form Factors • Some examples… Form factor: roughly 5% David Luebke 1411/17/2014
Form Factors • Some examples… Form factor: roughly 30% David Luebke 1511/17/2014
Form Factors • Some examples… Form factor: roughly 2% David Luebke 1611/17/2014
Form Factors • In diffuse environments, form factors obey a simple reciprocity relationship: Ai Fij = Ai Fji • Which simplifies our equation:Bi = Ei + i Bj Fij • Rearranging to:Bi - i Bj Fij = Ei David Luebke 1711/17/2014
Form Factors • So…light exchange between all patches becomes a matrix: • What do the various terms mean? David Luebke 1811/17/2014
Form Factors 1 - 1F11 - 1F12 … - 1F1n B1E1 - 2F21 1 - 2F22 … - 2F2n B2E2 . . … . . . . . … . . . . . … . . . - pnFn1- nFn2 … 1 - nFnn Bn En • Note: Ei values zero except at emitters • Note: Fii is zero for convex or planar patches • Note: sum of form factors in any row = 1 (Why?) • Note: n equations, n unknowns! David Luebke 1911/17/2014
Radiosity • Now “just” need to solve the matrix! • W&W: matrix is “diagonally dominant” • Thus Guass-Siedel must converge (what’s that?) • End result: radiosities for all patches • Solve RGB radiosities separately, color each patch, and render! • Caveat: for rendering, we actually color vertices, not patches (see F&vD p 795) David Luebke 2011/17/2014
Radiosity • Q: How many form factors must be computed? • A: O(n2) • Q: What primarily limits the accuracy of the solution? • A: The number of patches David Luebke 2111/17/2014
Roadmap • So, we know the basic radiosity algorithm • Represent light transfer as a matrix • Solve the matrix to get radiosity (=color) per patch • Next topics: • Evaluating form factors • Progressive radiosity: viewing an approximate solution early • Hierarchical radiosity: increasing patch resolution on an as-needed basis David Luebke 2211/17/2014
Form Factors • Calculating form factors is hard • Analytic form factor between two polygons in general case: open problem till last few years • Q: So how might we go about it? • Hint: Clearly form factors are related to visibility: how much of patch j can patch i “see”? David Luebke 2311/17/2014
Form Factors: Hemicube • Hemicube algorithm: Think Z-buffer • Render the model onto a hemicubeas seen from the center of patch i • Store item IDs instead of color • Use Z-buffer to resolve visibility • See W&W p 278 • Q: Why hemicube, not hemisphere? David Luebke 2411/17/2014
Form Factors: Hemicubes • Advantages of hemicubes • Solves shape, size, orientation, and occlusion problems in one framework • Can use hardware Z-buffers to speed up form factor determination (How?) David Luebke 2511/17/2014
Form Factors: Hemicubes • Q: What are some disadvantages of hemicubes? • Aliasing! Low resolution buffer can’t capture actual polygon contributions very exactly • Causes “banding” near lights (plate 41) • Actual form factor is over area of patch; hemicube samples visibility at only center point on patch (So?) David Luebke 2611/17/2014
Form Factors: Ray Casting • Idea: shoot rays from center of patch in hemispherical pattern David Luebke 2711/17/2014
Form Factors: Ray Casting • Advantages: • Hemisphere better approximation than hemicube • More even sampling reduces aliasing • Don’t need to keep item buffer • Slightly simpler to calculate coverage David Luebke 2811/17/2014
Form Factors: Ray Casting • Disadvantages: • Regular sampling still invites aliasing • Visibility at patch center still isn’t quite the same as form factor • Ray tracing is generally slower than Z-buffer-like hemicube algorithms • Depends on scene, though • Q: What kind of scene might ray tracing actually be faster on? David Luebke 2911/17/2014
Form Factors • Source-to-vertex form factors • Calculating form factors at the patch vertices helps address some problems: for every patch vertex for every source patch sample source evenly with rays visibility = % rays that hit • Q: What are the problems with this approach? David Luebke 3011/17/2014
Form Factors • Summary of form factor computation • Analytical: • Expensive or impossible (in general case) • Hemicube • Fast, especially using graphics hardware • Not very accurate; aliasing problems • Ray casting • Conceptually cleaner than hemicube • Usually slower; aliasing still possible David Luebke 3111/17/2014
Substructuring • More patches better results • Problem: # form factors grows quadratically with # patches • Substructuring: adaptively subdivide patches into elements where high radiosity gradient is found David Luebke 3211/17/2014
Substructuring • Elements are second-class patches: • When a patch is subdivided, form factors are computed from the elements to other patches • But form factors from the other patches to the elements are not computed • However, the form factors from other patches to the subdivided patch are updated using more accurate area-weighted average of elements David Luebke 3311/17/2014
Substructuring • Elements vs. patches, cont. • Elements “gather” radiosity from other patches • But those other patches only gather radiosity from the “parent” patch, not the individual elements • So an element’s contribution to other patches is approximated coarsely by it’s patch’s radiosity David Luebke 3411/17/2014
Substructuring • Bottom line: • Substructuring allows subpatch radiosities to be computed without changing the size of the form-factor matrix • Show examples: • W&W plate 38, F&vD plate III.21 • Note: texts aren’t clear about adaptive subdivision vs substructuring David Luebke 3511/17/2014
Progressive Radiosity • Good news: iterative solver of radiosity matrix will converge • Bad news: can take a longtime • Progressive radiosity: reorder computation to allow viewing of partial results David Luebke 3611/17/2014
Progressive Radiosity • Radiosity as described uses Gauss-Seidel iterative solver • Must do an entire iteration to get an estimate of patch radiosities • Must precompute and store all O(n2) form factors David Luebke 3711/17/2014
Progressive Radiosity 1 - 1F11 - 1F12 … - 1F1n B1E1 - 2F21 1 - 2F22 … - 2F2n B2E2 . . … . . . . . … . . . . . … . . . - pnFn1- nFn2 … 1 - nFnn Bn En • Evaluating row i estimates radiosity of patch i based on all other patches • We say the patch gathers light from the environment David Luebke 3811/17/2014
Progressive Radiosity • Progressive radiosity shoots light from a patch into the environment: Bjdue to Bi = j Bj Fjij rather thanBidue to Bj = i Bj Fijj • Given an estimate of Bi, evaluating this equation estimates patch i’s contribution to the rest of the scene David Luebke 3911/17/2014
Progressive Radiosity • A problem: evaluating the equationBjdue to Bi = j Bj Fjij requires knowing Fji for each patch j • Determining these values requires a hemicube computation per patch • Use reciprocity relationship to getBjdue to Bi = j Bj Fij(Ai/Aj)j David Luebke 4011/17/2014
Progressive Radiosity • Now evaluation requires only a single hemicube about patch i • Compute, use, and discard form factors • Drastically reduces total storage! • Reorder radiosity computation: • Pick patch w/ highest estimated radiosity • Shoot to all other patches • Update their estimates • Pick new “brightest” patch and repeat David Luebke 4111/17/2014
Progressive Radiosity • We can look at the scene after every iteration through this loop • Q: How will it look after 1 loop? • Q: 2 loops? • Q: If m = # of light sources, how will it look after m loops? After 2m loops? David Luebke 4211/17/2014
Progressive Radiosity • Subtleties: • Pick patch with most energy to shoot • Energy = radiosity * area = Bj Ai • A patch may be selected to shoot again after new light has been shot to it • So don’t shoot Bj , shoot Bj, the amount of radiosity patch i has received since it was last shot David Luebke 4311/17/2014
The End David Luebke 4411/17/2014