IS-C3100 Ethernet to 2G/3G Terminal IS-C4100 Ethernet to ...
CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections
Transcript of CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections
![Page 1: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/1.jpg)
CS-C3100 Fall 2019 – Lehtinen 1
CS-C3100 Computer Graphics
12.1 Ray Tracing: Intersections
Jaakko Lehtinen with lots of material from Frédo Durand
Hen
rik W
ann
Jens
en
![Page 2: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/2.jpg)
CS-C3100 Fall 2019 – Lehtinen
In this Video
2
• Transformations & Ray Tracing • Object-oriented ray tracer design • Precision issues • Fun stuff: Constructive Solid Geometry (CSG)
![Page 3: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/3.jpg)
CS-C3100 Fall 2019 – Lehtinen 3
Transformations and Ray Tracing• We have seen that transformations such as affine
transforms are useful for modeling & animation • How do we incorporate them into ray tracing?
![Page 4: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/4.jpg)
CS-C3100 Fall 2019 – Lehtinen 4
Incorporating Transforms1. Make each primitive handle any applied
transformations and produce a camera space description of its geometry
2. ...or Transform the Rays?
Transform { Translate { 1 0.5 0 } Scale { 2 2 2 } Sphere { center 0 0 0 radius 1 } }
![Page 5: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/5.jpg)
CS-C3100 Fall 2019 – Lehtinen 5
Primitives Handle Transforms?
• Complicated for many primitives :(
r
major
r
minor
(x,y)
Sphere { center 3 2 0 z_rotation 30 r_major 2 r_minor 1 }
![Page 6: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/6.jpg)
CS-C3100 Fall 2019 – Lehtinen 6
(0,0)
Transform the Rays instead• Move the ray from World Space to Object Space
Object SpaceWorld Space
r = 1
r
major
r
minor(x,y)
pWS = M pOS
pOS = M-1 pWS
![Page 7: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/7.jpg)
CS-C3100 Fall 2019 – Lehtinen 7
Transforming the Ray• New origin:
• New direction:
originOS
originWS
directionOS
directionWS
Object SpaceWorld Space
qWS = originWS + tWS * directionWS
qOS = originOS + tOS * directionOS
![Page 8: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/8.jpg)
CS-C3100 Fall 2019 – Lehtinen 7
Transforming the Ray• New origin:
• New direction:originOS = M-1 originWS
originOS
originWS
directionOS
directionWS
Object SpaceWorld Space
qWS = originWS + tWS * directionWS
qOS = originOS + tOS * directionOS
![Page 9: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/9.jpg)
CS-C3100 Fall 2019 – Lehtinen 7
Transforming the Ray• New origin:
• New direction:originOS = M-1 originWS
directionOS = M-1 (originWS + 1 * directionWS) - M-1 originWS
originOS
originWS
directionOS
directionWS
Object SpaceWorld Space
qWS = originWS + tWS * directionWS
qOS = originOS + tOS * directionOS
![Page 10: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/10.jpg)
CS-C3100 Fall 2019 – Lehtinen 7
Transforming the Ray• New origin:
• New direction:originOS = M-1 originWS
directionOS = M-1 (originWS + 1 * directionWS) - M-1 originWS
originOS
originWS
directionOS
directionWS
Object SpaceWorld Space
qWS = originWS + tWS * directionWS
qOS = originOS + tOS * directionOS
directionOS = M-1 directionWS
Note that the w component of direction is 0!
![Page 11: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/11.jpg)
CS-C3100 Fall 2019 – Lehtinen
What about t ?
8
• If M includes scaling, directionOS ends up NOT be normalized after transformation
• Two solutions – Normalize the direction – Don't normalize the direction
![Page 12: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/12.jpg)
CS-C3100 Fall 2019 – Lehtinen 9
1. Normalize direction?
Object SpaceWorld Space
tWS tOS
![Page 13: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/13.jpg)
CS-C3100 Fall 2019 – Lehtinen 9
1. Normalize direction?
• tOS ≠ tWS and must be rescaled after intersection ==> One more possible failure case...
Object SpaceWorld Space
tWS tOS
![Page 14: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/14.jpg)
CS-C3100 Fall 2019 – Lehtinen 10
2. Don't normalize direction
Object SpaceWorld Space
tWS tOS
Highly
recommended
![Page 15: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/15.jpg)
CS-C3100 Fall 2019 – Lehtinen 10
2. Don't normalize direction
• tOS = tWS ! convenient!
Object SpaceWorld Space
tWS tOS
Highly
recommended
![Page 16: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/16.jpg)
CS-C3100 Fall 2019 – Lehtinen 10
2. Don't normalize direction
• tOS = tWS ! convenient!
• But you should not rely on tOS being true distance in intersection routines (e.g. a≠1 in ray-sphere test)
Object SpaceWorld Space
tWS tOS
Highly
recommended
![Page 17: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/17.jpg)
CS-C3100 Fall 2019 – Lehtinen 11
Transforming Points & Directions• Transform point
• Transform direction
Homogeneous Coordinates: (x,y,z,w) w = 0 is a point at infinity (direction)
![Page 18: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/18.jpg)
CS-C3100 Fall 2019 – Lehtinen 11
Transforming Points & Directions• Transform point
• Transform direction
Homogeneous Coordinates: (x,y,z,w) w = 0 is a point at infinity (direction)
• If you do not store w you need different routines to apply M to a point and to a direction ==> Store everything in 4D!
![Page 19: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/19.jpg)
CS-C3100 Fall 2019 – Lehtinen 12
Recap: How to Transform Normals?
Object SpaceWorld Space
nOS
nWS
![Page 20: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/20.jpg)
CS-C3100 Fall 2019 – Lehtinen 13
Recap: Inverse Transpose for Normalsv is perpendicular to normal n:
nOST vOS = 0
nOST (M-1 M) vOS = 0
nWST = nOS
T (M-1)
(nOST M-1) (M vOS) = 0
(nOST M-1) vWS = 0
nWST vWS = 0
vWS is perpendicular to normal nWS:
nWS = (M-1)T nOS
nOS
vWS
nWS
vOS
Dot product
![Page 21: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/21.jpg)
CS-C3100 Fall 2019 – Lehtinen
Transformation Cheat Sheet
14
• Position – transformed by the full homogeneous matrix M
• Direction – transformed by M except the translation component
(equiv. to w component of direction == 0) • Normal
– transformed by M-T, no translation component
![Page 22: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/22.jpg)
CS-C3100 Fall 2019 – Lehtinen
In this Video
15
• Transformations & Ray Tracing • Object-oriented ray tracer design • Precision issues • Fun stuff: Constructive Solid Geometry (CSG)
![Page 23: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/23.jpg)
CS-C3100 Fall 2019 – Lehtinen 16
Ray Tracing: Object oriented designFor every pixel
Construct a ray from the eye
For every object in the scene
Find intersection with the ray
Keep if closest
![Page 24: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/24.jpg)
CS-C3100 Fall 2019 – Lehtinen 17
Object-Oriented Design• We want to be able to add primitives easily
– Inheritance and virtual methods • Even the scene is derived from Object3D!
• Also cameras are abstracted (perspective/ortho) – Methods for generating rays for given image coordinates
Object3D bool intersect(Ray, Hit, tmin)
Plane bool intersect(Ray, Hit, tmin)
Sphere bool intersect(Ray, Hit, tmin)
Triangle Mesh bool intersect(Ray, Hit, tmin)
Group bool intersect(Ray, Hit, tmin)
![Page 25: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/25.jpg)
CS-C3100 Fall 2019 – Lehtinen
In this Video
18
• Transformations & Ray Tracing • Object-oriented ray tracer design • Precision issues • Fun stuff: Constructive Solid Geometry (CSG)
![Page 26: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/26.jpg)
CS-C3100 Fall 2019 – Lehtinen 19
Precision• What happens when
– Ray Origin lies on an object? – Grazing rays?
• Problem with floating-point approximation
![Page 27: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/27.jpg)
CS-C3100 Fall 2019 – Lehtinen 20
The evil ε
• In ray tracing, do NOT report intersection for rays starting at the surface – Secondary rays will start at the surfaces – Requires epsilons – Best to nudge the starting
point off the surface e.g., along normal
– Best: nudge along the direction the ray came from!
reflection
refraction
shadow
![Page 28: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/28.jpg)
CS-C3100 Fall 2019 – Lehtinen 21
The evil ε
• Edges in triangle meshes – Must report intersection (otherwise not watertight) – Hard to get right – See Woop, Wenthin, Wald, JCGT 2013
![Page 29: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/29.jpg)
CS-C3100 Fall 2019 – Lehtinen 22
Image by Henrik Wann Jensen
![Page 30: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/30.jpg)
CS-C3100 Fall 2019 – Lehtinen
In this Video
23
• Transformations & Ray Tracing • Object-oriented ray tracer design • Precision issues • Fun stuff: Constructive Solid Geometry (CSG)
![Page 31: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/31.jpg)
CS-C3100 Fall 2019 – Lehtinen
Constructive Solid Geometry (CSG)
24
• A neat way to build complex objects from simple parts using Boolean operations – Very easy when ray tracing
• We used this in the Max Payne games for modeling the environments – Not so easy when not ray tracing :)
![Page 32: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/32.jpg)
CS-C3100 Fall 2019 – Lehtinen 25
CSG Examples
![Page 33: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/33.jpg)
CS-C3100 Fall 2019 – Lehtinen 26
Constructive Solid Geometry (CSG)Given overlapping shapes A and B:
Union Intersection Subtraction
Should only “count” overlap region once!
![Page 34: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/34.jpg)
CS-C3100 Fall 2019 – Lehtinen 27
How can we implement CSG?
Union Intersection Subtraction
Points on A, Outside of B
Points on B, Outside of A
Points on B, Inside of A
Points on A, Inside of B
4 cases
![Page 35: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/35.jpg)
CS-C3100 Fall 2019 – Lehtinen 28
Collect Intersections
Union Intersection Subtraction
Each ray processed separately!
![Page 36: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/36.jpg)
CS-C3100 Fall 2019 – Lehtinen
Implementing CSG1. Test "inside" intersections:
• Find intersections with A, test if they are inside/outside B
• Find intersections with B, test if they are inside/outside A
This would certainly work, but would need to determine if points are inside solids...
:-(
![Page 37: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/37.jpg)
CS-C3100 Fall 2019 – Lehtinen 30
Implementing CSG1. Test "inside" intersections:
• Find intersections with A, test if they are inside/outside B
• Find intersections with B, test if they are inside/outside A
2. Overlapping intervals: • Find the intervals of "inside"
along the ray for A and B • How? Just keep an “entry” / “exit” bit
for each intersection • Easy to determine from intersection
normal and ray direction • Compute union/intersection/
subtraction of the intervals
![Page 38: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/38.jpg)
CS-C3100 Fall 2019 – Lehtinen 31
Implementing CSG1. Test "inside" intersections:
• Find intersections with A, test if they are inside/outside B
• Find intersections with B, test if they are inside/outside A
2. Overlapping intervals: • Find the intervals of "inside"
along the ray for A and B • How? Just keep an “entry” / “exit” bit
for each intersection • Easy to determine from intersection
normal and ray direction • Compute union/intersection/
subtraction of the intervals
Problem reduces to 1D for each ray
![Page 39: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/39.jpg)
CS-C3100 Fall 2019 – Lehtinen 32
Implementing CSG1. Test "inside" intersections:
• Find intersections with A, test if they are inside/outside B
• Find intersections with B, test if they are inside/outside A
2. Overlapping intervals: • Find the intervals of "inside"
along the ray for A and B • How? Just keep an “entry” / “exit” bit
for each intersection • Easy to determine from intersection
normal and ray direction • Compute union/intersection/
subtraction of the intervals
Problem reduces to 1D for each ray
Highly recommended,
easy extra credit for
Assn’5!
![Page 40: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/40.jpg)
CS-C3100 Fall 2019 – Lehtinen
CSG is Easy with Ray Tracing…
33
• ...but very hard if you actually try to compute an explicit representation of the resulting surface as a triangle mesh
• In principle very simple, but floating point numbers are not exact – E.g., points do not lie exactly on planes... – Computing the intersection A vs B is not necessarily the
same as B vs A... – The line that results from intersecting two planes does not
necessarily lie on either plane... – etc., etc.
![Page 41: CS-C3100 Computer Graphics 12.1 Ray Tracing: Intersections](https://reader030.fdocuments.us/reader030/viewer/2022012805/61bd31c561276e740b10462c/html5/thumbnails/41.jpg)
CS-C3100 Fall 2019 – Lehtinen
CSG is Easy with Ray Tracing…
34
• ...but very hard if you actually try to compute an explicit representation of the resulting surface as a triangle mesh
• In principle very simple, but floating point numbers are not exact – E.g., points do not lie exactly on planes... – Computing the intersection A vs B is not necessarily the
same as B vs A... – The line that results from intersecting two planes does not
necessarily lie on either plane... – etc., etc. Highly recommended, very
hard extra credit for Assn’5! :)