Ray Tracing News

Preview:

DESCRIPTION

Ray Tracing News. http://www.raytracingnews.org/ 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. - PowerPoint PPT Presentation

Citation preview

Ray Tracing News

• http://www.raytracingnews.org/• 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 Tracingen

Global Illuminationpraktische 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ènecamera

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)

oppe

rvla

k

normaal = buiten

Ray Tracing herhaling

• ray tracingà la Whitted 1980

• uitbreidingen– oppervlaktelichtbron

(zachte schaduwen)– participerende media

• hacks– ambiënt licht

POV-Ray (www.povray.org)

• 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 (www.irtc.org)

• niet fysisch gebaseerd, geen global illumination– radiosity, photon map

uitbreidingen

POV-Ray syntax

camera {

perspective

location <0.0, 0.5,-8.0>

look_at <0.0, 0.0, 0.0>

up <0.0, 1.0, 0.0>

angle 50

}

POV-Ray syntaxlight_source { <-30,30,-30> // positie color rgb <1.0, 1.0, 1.0> pointlight}light_source { <-30,30,-30> // positie color rgb <1.0, 1.0, 1.0> area_light <8, 0, 0> <0, 0, 8> // afmetingen 8, 8 // stratificatie jitter}

POV-Ray syntaxplane { y, -1 // vlak y=-1}box { <-3,-1,-1> <-1, 1, 1> // hoekpunten}sphere { <0.0, 0.0, 0.0>, 1 // center, straal}cone { <2,1,0>, 0.0, // punt op as, straal 0 <2,-1,0>, 1.0 // punt op as, straal 1}

POV-Ray syntaxmesh { triangle { <0,0,0>, <0,1,0>, <1,1,0> // hoeken uv_vectors <0,0>, <0,1>, <1,1> // textuurcoordinaten } smooth_triangle { <0,0,0>, <0,0,1>, // hoek, normaal <1,0,0>, <0,1,1>, // hoek, normaal <1,1,0>, <1,1,1> // hoek, normaal uv_vectors <0,0>, <0,1>, <1,1> // textuurcoordinaten }}

POV-Ray syntax

texture { // materiaal pigment { // basiskleur // ... } normal { // bump map // ... } finish { // glans // ... }}

POV-Ray syntax

pigment { color rgb <1.0,0.0,0.0>}

pigment { image_map { jpeg "filename.jpg" }}

POV-Ray syntax

normal { bumps 0.5 // proceduraal}

normal { bump_map { gif "filename.gif" }}

POV-Ray syntaxfinish { phong 0.9 phong_size 60 // 1 - 250 // of specular 0.9 roughness 0.02 // 0.0005 – 1

reflection 0.8

// modifiers metallic // kleur highlight conserve_energy}

POV-Ray

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 tracing foto

Global Illumination herhaling

Global Illumination herhaling

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 stochasticray tracing:

emissiedirecte belichtingcaustic mapindirecte belichtingglobale map

PBRT (www.pbrt.org)

• 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. 2004.– incl. CD met bin, src v1.0 en prentjes

• site: www.pbrt.org– 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” [0 0 0 0 1 0 1 0 0] “normal N” [0 0 1 0 1 1 1 0 1] “vector S” [1 1 0 1 0 0 0 1 0] “integer indices” [0 1 2 ...]

Texture “green” “color” “constant” “color value” [0 1 0]Material “matte” “texture Kd” [“green”]Material “matte” “color Kd” [0 1 0]

PBRT syntax

LookAt 0 10 100 0 -1 0 0 1 0 # 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 (www.openexr.com)– Industrial Light & Magic (Lucasfilm)– high dynamic range– in postproces exposure aanpassen

PBRT syntax

WorldBegin

LightSource “point” “point from” [0 1 0]

AttributeBegin Translate 0 2 0 Rotate 135 1 0 0 # 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 (www.vic.cc.kuleuven.be)– 400-tal Opteron250 cores– binnenkort 480-tal extra

Recommended