ray-tracing in grcispepca/lectures/pdf/prg-99-grcis-rt.pdf · best for work & demo...

21
GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 1 / 21 Ray-Tracing in GrCis © 2016-2020 Josef Pelikán CGG MFF UK Praha [email protected] https://cgg.mff.cuni.cz/~pepca/

Upload: others

Post on 19-Oct-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 1 / 21

Ray-Tracing in GrCis

© 2016-2020 Josef Pelikán CGG MFF UK Praha

[email protected]://cgg.mff.cuni.cz/~pepca/

Page 2: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 2 / 21

Ray-tracing-related projects

Best for work & demo– 048rtmontecarlo-script

» switches for super-sampling, shadows, reflections, refractions, multi-threading, CS-script scene definition

Animation– 046cameranim

» camera animation (going round the scene)

– 062animation-script» more general project, able to animate any scene part

Page 3: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 3 / 21

Ray-tracing application

RayTracing[IImageFunction]

SimpleImageSynthesizer[IRenderer]

Width [px]Height [px]GammaAdaptive

Bitmap

“scene geometry”

“camera”

“light sources”“background color”

Form

“animator”

Page 4: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 4 / 21

Image Function [IImageFunction]

[interface IImageFunction]

double Widthdouble Heightlong GetSample ( double x, double y, double[] color )

[0,0]

[Width,Height]

double[] color ..double[3] // RGBdouble[len] // spectral color

x

y

Page 5: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 5 / 21

RayCasting, RayTracing

RayTracing : RayCasting[IImageFunction]

Scene[IRayScene]

Width [double]Height [double]MaxLevel [int]MinImportance [double]DoReflections [bool]DoRefractions [bool]DoShadows [bool]

“scene geometry”[IIntersectable]

“light sources”[ICollection<ILightSource>]

Background [IBackground]

Camera[ICamera]

Animator [ITimeDependent]

Page 6: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 6 / 21

Camera [ICamera]

[interface ICamera]

double AspectRatiodouble Widthdouble Heightbool GetRay ( double x, double y, out Vector3D p0, out Vector3D p1 )

[0,0]

[Width, Height]

P0 p1

[x, y]

Ray: P0 + t · p1

0 ≤ t

Page 7: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 7 / 21

Light Source [ILightSource]

[interface ILightSource]

double[] GetIntensity ( Intersection intersection, out Vector3D dir )

intersection

dir

return: color (intensity)dir: direction toward the light,

zero for omnidirectional

Page 8: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 8 / 21

Background [IBackground]

[interface IBackground]

dir dir: direction to the infinitycolor: observed (background) color

long GetColor ( Vector3d dir, double[] color )

Page 9: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 9 / 21

IReflectanceModel, IMaterial

[IReflectanceModel]

PhongModel[IReflectanceModel]

DefaultMaterial [IMaterial]

double [] ColorReflection ( Intersection intersection, Vector3d input, Vector3d output, ReflectionComponent comp )

PhongMaterial[IMaterial]

[IMaterial]: ICloneable

double[] Colordouble Ktdouble n

intersection

inputn

output

Page 10: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 10 / 21

Intersection

n

Intersection

T

Enter [bool]Front [bool]T [double] … mandatorySolid [ISolid]SolidData [object]

Normal [Vector3d] NormalLocal [Vector3d] CoordWorld [Vector3d] TangentU [Vector3d] CoordObject [Vector3d] TangentV [Vector3d] CoordLocal [Vector3d]TextureCoord [Vector2d]LocalToWorld [Matrix4d]WorldToLocal [Matrix4d] Complete();LocalToObject [Matrix4d]SurfaceColor [double[]]ReflectanceModel [IReflectanceModel]Material [IMaterial]Textures [List<ITexture>]

Solid

Page 11: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 11 / 21

Intersectable Object [IIntersectable]

[interface IIntersectable]

LinkedList<Intersection> Intersect ( Vector3d p0, Vector3d p1 )

void CompleteIntersection ( Intersection inter )

Intersection

t0

[ISolid] ?

P0p1

t1t2

Ray: P0 + t · p1

0 ≤ t

Page 12: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 12 / 21

Scene Hierarchy

root

node1 node2

node5node3 node4

ChildrenToParent [Matrix4d]

FromParent [Matrix4d]

. . .

“color”: [RGB1]

“material”: <...>

“color”: [RGB2]

RGB2 has priority!. . .

. . .

Page 13: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 13 / 21

Parent [ISceneNode]Children [IsceneNodes[]]ToParent [Matrix4d]FromParent [Matrix3d]ToWorld, ToObject [Matrix4d]ObjectRoot [bool]

GetAttribute ( name )GetLocalAttribute ( name )SetAttribute ( name, value )List<ITexture> GetTextures ()

Scene Node [ISceneNode]

[interface ISceneNode]: IIntersectable

node

Children

“color”: [RGB1]

“material”: <..>

ToParent [Mat4d]

Parent

FromParent [Mat4d]

…Attributes

Page 14: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 14 / 21

Solid [ISolid]

[interface ISolid]: ISceneNode

Sphere

LinkedList<Intersection> Intersect ( Vector3d p0, Vector3d p1 )void CompleteIntersection ( Intersection inter )

Cube

Plane

Cylinder

Torus…

Ray: P0 + t · p1

0 ≤ t

t0

P0 p1 t1

Page 15: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 15 / 21

Normal, NormalLocal [Vector3d]TangentU, TangentV [Vector3d]TextureCoord [Vector2d]SurfaceColor [double[]]ReflectanceModel [IReflectanceModel]Material [IMaterial]

Texture [ITexture]

[interface ITexture] long Apply ( Intersection inter )

Intersection

n

[ISolid] ?

Texture order matters!

Page 16: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 16 / 21

Animation [ITimeDependent]

[interface ITimeDependent]: ICloneable

double Startdouble Enddouble Time

Start

“Clone-on-write”• for multi-threaded rendering• cloning a copy for each thread

End ...

Start End

cyclic

one-time

Page 17: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 17 / 21

Independent Stratified Sampling

Multi-dimensional open sampling: [0,1]D

– D is not known in advance– any internal component of a ray-tracer might be sampled (integral

averaging)

Hidden sampling mechanism– any component can use additional global values stored in the

static class MT:

[ThreadStatic] … TLS (automatic data instance for each thread)

int rank … order of the current sample (in the current pixel)int total … total number of samples in the current pixelRandomJames rnd … random number generator

Page 18: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 18 / 21

Independent Stratified Sampling

int rank

int total

RandomJames rnd

...

MT.rank = 2;

MT.total = 64;

sample/ray #2 from total 64 samples

rand

o m

Page 19: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 19 / 21

Accelerating ray – triangle-mesh intersection

TriangleManager : AnimatedCSGInnerNode : ISolid

- actually computing intersections- accelerated data structure (e.g. BVH)- Intersect() call is not propagated to its Children

TriangleManager

Mesh1

Mesh2

TriangleMesh : AnimatedCSGInnerNode : ISolid

- only completing intersections found by Manager- the same coordinate space as its Manager

MeshN

IntersectionSolid [ISolid]CoordLocal [Vector3d]SolidData = { int TriangleId; Vector2d Barycentric; }

Page 20: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 20 / 21

Light Composition Tweak

A

n

r P0 + t · p1

l

t

Intersection

Classical Ray-tracing (Whitted)

Tweak – RecursionFunction() callback

P0 + t · p1

Intersection

?

? ?

DirectContribution (additive color)+

RayContribution-sVector3d directiondouble[] coefficientdouble importance

Page 21: Ray-Tracing in GrCispepca/lectures/pdf/prg-99-grcis-rt.pdf · Best for work & demo –048rtmontecarlo-script »switches for super-sampling, shadows, reflections, refractions, multi-threading,

GrCis RayTracing 2020 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 21 / 21

References

GitHub repository https://github.com/pepcape/grcis

Subversion repository svn://cgg.mff.cuni.cz/grcis/trunk

Ray-tracing in GrCis https://cgg.mff.cuni.cz/~pepca/grcis/rt.php

GrCis library https://cgg.mff.cuni.cz/~pepca/grcis/

Image gallery https://cgg.mff.cuni.cz/~pepca/gr/grcis/