Ray Tracing News RTNv19n1: September 30, 2006 –Introduction –Ray Tracing Roundup –Notes on Efficient Ray Tracing –Ray-Box Sorting –BVHs and Memory Coherence –“So long and thanks for all the fish...” –Ray/Box Intersection Optimization –SIGGRAPH 2006 Report
Ray Tracing en Global Illumination praktische inleiding over beschikbare software
Ray Tracer from scratch practicum CG1 leerrijk, maar tijdrovend matrix, vector, kleur, afbeelding, camera, straal, puntlicht, driehoek,... ontwerpkeuzes
Beschikbare renderers “standing on the shoulders of giants” doel –hobby ray tracer met beperkte fysische basis bv. POV-Ray –academische, fysisch gebaseerde global illumination renderer bv. PBRT, RenderPark, Radiance, … basisimplementatie –meer mogelijkheden dan je zelf zou schrijven uitbreidbaarheid
Overzicht Ray Tracing –korte herhaling van CG1 –voorbeeld: POV-Ray Global Illumination –korte herhaling van CG1, meer info: zie CG2 –voorbeeld: PBRT
Ray Tracing herhaling camera pixelrooster scène camera pixelrooster scène
Ray Tracing herhaling primaire straal
Ray Tracing herhaling primaire straal raakpunt schaduw en shading…
Ray Tracing herhaling schaduw schaduwstraal van raakpunt naar lichtbron raakt ander object? raakpunt niet belicht
diffuus cosinus (N.L) Ray Tracing herhaling speculair spiegeling (N.V) = (N.R) recursie Phong (glans) cosinus (R.V) of (N.H) exponent n
Ray Tracing herhaling recursie –reflectie –refractie wet van Snellius lucht (n=1)glas (n=1,5) oppervlak normaal = buiten
Ray Tracing herhaling ray tracing à la Whitted 1980 uitbreidingen –oppervlaktelichtbron (zachte schaduwen) –participerende media hacks –ambiënt licht
POV-Ray ( hobby, artistiek, andere terminologie brede basisimplementatie uitbreidbaarheid is geen doel praktische documentatie en tutorials standaard ray tracing
POV-Ray fotorealisme mogelijk door te tweaken –Internet Ray Tracing Competition ( niet fysisch gebaseerd, geen global illumination –radiosity, photon map uitbreidingen
POV-Ray syntax camera { perspective location look_at up angle 50 }
POV-Ray syntax light_source { // positie color rgb pointlight } light_source { // positie color rgb area_light // afmetingen 8, 8 // stratificatie jitter }
POV-Ray syntax plane { y, -1 // vlak y=-1 } box { // hoekpunten } sphere {, 1 // center, straal } cone {, 0.0, // punt op as, straal 0, 1.0 // punt op as, straal 1 }
POV-Ray syntax mesh { triangle {,, // hoeken uv_vectors,, // textuurcoordinaten } smooth_triangle {,, // hoek, normaal, // hoek, normaal uv_vectors,, // textuurcoordinaten }
POV-Ray syntax texture { // materiaal pigment { // basiskleur //... } normal { // bump map //... } finish { // glans //... }
POV-Ray syntax pigment { color rgb } pigment { image_map { jpeg "filename.jpg" }
POV-Ray syntax normal { bumps 0.5 // proceduraal } normal { bump_map { gif "filename.gif" }
POV-Ray syntax finish { phong 0.9 phong_size 60 // // of specular 0.9 roughness 0.02 // – 1 reflection 0.8 // modifiers metallic // kleur highlight conserve_energy }
POV-Ray
uitbreidbaarheid? C++ redelijk leesbare code weinig structuur code aanpassen functionaliteit toevoegen?
Overzicht Ray Tracing –korte herhaling van CG1 –voorbeeld: POV-Ray Global Illumination –korte herhaling van CG1, meer info: zie CG2 –voorbeeld: PBRT
Global Illumination diffuse interreflecties
Global Illumination diffuse interreflecties glossy reflecties
Global Illumination diffuse interreflecties glossy reflecties caustics
Global Illumination diffuse interreflecties glossy reflecties caustics fysisch correct
Global Illumination diffuse interreflecties glossy reflecties caustics fysisch correct radiosity + stochastic ray tracing radiosity ray tracingfoto
Global Illumination herhaling
directe/indirecte belichting samen
Global Illumination herhaling directe/indirecte belichting apart
Global Illumination herhaling path tracing
Global Illumination herhaling path tracing L =...
Global Illumination herhaling path tracing L =... –emissie
Global Illumination herhaling path tracing L =... –emissie –directe belichting
Global Illumination herhaling path tracing L =... –emissie –directe belichting –indirecte belichting komt van overal
Global Illumination herhaling path tracing L =... –emissie –directe belichting –indirecte belichting uit 1 richting
Global Illumination herhaling path tracing L =... –emissie –directe belichting –indirecte belichting komt van ergens
Global Illumination herhaling path tracing L =... –emissie –directe belichting –indirecte belichting recursief
Global Illumination herhaling path tracing L =... –emissie –directe belichting –indirecte belichting recursief
Global Illumination herhaling path tracing L =... –emissie –directe belichting –indirecte belichting recursief
Global Illumination herhaling path tracing L =... –emissie –directe belichting –indirecte belichting recursief
Global Illumination herhaling path tracing L =... –emissie –directe belichting –indirecte belichting recursief
Global Illumination herhaling path tracing L =... –emissie –directe belichting –indirecte belichting recursief
Global Illumination herhaling path tracing L =... –emissie –directe belichting –indirecte belichting recursief –aantal keer per pixel
Global Illumination herhaling path tracing in principe volledig maar soms traag –bv. caustics
Global Illumination herhaling photon mapping pass 1: store
Global Illumination herhaling photon mapping pass 1: store –positie (x, y, z) –inkomende richting –vermogen (r, g, b)
Global Illumination herhaling photon mapping pass 1: store –positie (x, y, z) –inkomende richting –vermogen (r, g, b) –in kd-tree
Global Illumination herhaling photon mapping pass 1: store –positie (x, y, z) –inkomende richting –vermogen (r, g, b) –in kd-tree –los van geometrie
Global Illumination herhaling photon mapping pass 1: store –globale map –caustic map
Global Illumination herhaling photon mapping pass 1: store pass 2: gather –soort stochastic ray tracing: emissie directe belichting caustic map indirecte belichting globale map
PBRT ( academisch beperkte basisimplementatie –moderne, leesbare algoritmes –performant, maar geen micro-optimalisaties extreem uitbreidbaar –bijna alles in plugins documentatie –directe overeenkomst theorie en implementatie –gekende terminologie
PBRT boek: Physically Based Rendering: From Theory to Implementation –M. Pharr, G. Humphreys –incl. CD met bin, src v1.0 en prentjes site: –source code v1.02 Windows (Visual Studio, Cygwin) Linux / MacOS X –plugins –errata & bugtracking
PBRT globale belichting, fysisch gebaseerd fotorealisme als je realistische invoer geeft
PBRT globale belichting, fysisch gebaseerd fotorealisme als je realistische invoer geeft
PBRT globale belichting, fysisch gebaseerd fotorealisme als je realistische invoer geeft
PBRT plugins accelerators: kdtree, grid camera’s: perspective, environment, orthographic filters: mitchell, box, gaussian, sinc, triangle integrators: directlighting, irradiancecache, path, photonmap, whitted,... samplers: lowdiscrepancy, stratified,...
PBRT lights: area, distant, infinite, point, projection, spot,... materials: matte, glass, mirror, plastic, shinymetal, translucent, uber,... shapes: cone, cylinder, disk, loopsubdiv, nurbs, sphere, trianglemesh,... textures: checkerboard, constant, dots, fbm, imagemap, marble, windy, wrinkled,...
PBRT syntax Identifier “class” (“type name” [value])* Film “image” “string filename” [“foo”] Sampler “stratified” “bool jitter” [“true”] LightSource “spot” “float coneangle” [30] Shape “trianglemesh” “point P” [ ] “normal N” [ ] “vector S” [ ] “integer indices” [ ] Texture “green” “color” “constant” “color value” [0 1 0] Material “matte” “texture Kd” [“green”] Material “matte” “color Kd” [0 1 0]
PBRT syntax LookAt # camera punt lookat punt up vector Camera “perspective” “float fov” [30] SurfaceIntegrator “path” Accelerator “kdtree”
PBRT syntax PixelFilter “box” “float xwidth” [.5] “float ywidth” [.5] Sampler “stratified” “integer xsamples” [2] “integer ysamples” [2] “bool jitter” [“true”] Film “image” “string filename” [“name.exr”] “integer xresolution” [800] “integer yresolution” [600]
PBRT OpenEXR ( –Industrial Light & Magic (Lucasfilm) –high dynamic range –in postproces exposure aanpassen
PBRT syntax WorldBegin LightSource “point” “point from” [0 1 0] AttributeBegin Translate Rotate # hoek en as Material “matte” “color Kd” [1 0 0] Shape “sphere” “float radius” [2] # altijd center [0 0 0], dus Translate AttributeEnd WorldEnd
PBRT plugins #include “shape.h” class Sphere: public Shape { public: Sphere(...); BBox ObjectBound() const; bool Intersect(const Ray &ray, float *tHit,...) const; bool IntersectP(const Ray &ray) const; float Area() const; Point Sample(float u1, float u2,...) const; float Pdf(...) const; };
PBRT plugins Shape *CreateShape(...) { float radius = params.FindOneFloat("radius", 1.0f); return new Sphere(radius,...); } Shape “sphere” “float radius” [2]
Praktische rendering Eigen PC Graphics “aquarium” –Athlon 64 X2 (dual core) –uitbreiding PC-klas –40-tal Pentium IV Cluster ( –400-tal Opteron250 cores –binnenkort 480-tal extra