240 likes | 274 Views
This course covers the basics of the camera model in ray tracing, including constructing rays, pixel calculations, screen placement, pixel loops, object processing, and ray-sphere intersection. Learn how to set up the camera, calculate pixel positions, and determine object colors using geometric optics principles. Explore the steps involved in the ray tracing algorithm for generating realistic images.
E N D
Ray TracingGeometry CSE 681
The Camera Model • Based on a simpile pin-hole camera model • Simplest lens model • Pure geometric optics – based on similar triangles • Perfect image if hole infinitely small • Inverted image pin-hole camera simplified pin-hole camera CSE 681
Basic Ray Tracing Algorithm for every pixel { cast a ray from the eye through pixel for every object in the scene find intersections with the ray keep it if closest } compute color at the intersection point } CSE 681
Construct a Ray eye • 3D parametric line r(t) = eye + t (p-eye) r(t): ray equation eye: eye (camera) position p: pixel position t: ray parameter r(t) p t=0 Question: How to calculate the pixel position P? CSE 681
What are given? • Camera (eye) position • View direction or center of interest • Camera orientation (which way is up?) • specified by an “up” vector • Field of view + aspect ratio • Distance to the image plane • Pixel resolutions in x and y “up” vector eye ray CSE 681
Camera Setup “up” vector v n View direction w u We need to have a ‘view coordinate system, i.e., compute the u, v, w vectors u v w w image plane Eye + w goes through the image plane center CSE 681
Camera Setup “up” vector v View direction w u w: known u = w x “up” v = u x w “up” may not be perpendicular to w x: cross product CSE 681 CSE 681
Pixel Calculation Coordinate (in u,v,n space) of upper left corner of screen v yres u w Eye + w xres Assume virtual screen is one unit away (D=1) in w direction Eye + w - (xres/2)*PixelWidth*u + (yres/2)*PixelHeight *v CSE 681
Pixel Calculation Coordinate (in u,v,n space) of upper left corner of screen v yres u w Eye + w xres How do we calculate PixelWidth and PixelHeight? Assume virtual screen is one unit away (D=1) in w direction Eye + w - (xres/2)*PixelWidth*u + (yres/2)*PixelHeight *v CSE 681 CSE 681
Camera Setup (yres/2) * pixelHeight Tan(q/2) = yres*pixelHeight/2D pixelHeight = 2*Tan(qy/2) *D/yres D pixelWidth = 2*Tan(qx/2) *D/xres CSE 681
Screen Placement How do images differ if the resolution doesn’t change? Assume virtual screen is one unit away (D=1) in w direction CSE 681
Pixel Calculation Tan(q/2) = yres*pixelHeight/2 pixelHeight = 2*Tan(qy/2) /yres pixelWidth = 2*Tan(qx/2) /xres Pixel AspectRatio = pixelWidth/pixelHeight Coordinate (in xyz space) of upper left corner of screen = ? CSE 681
Pixel Calculation Coordinate (in xyz space) of upper left corner of screen = ? v u Tan(q/2) = yres*pixelHeight/2 w pixelHeight = 2*Tan(qy/2) /yres Eye + w - (xres/2)*PixelWidth*u + (yres/2)*PixelHeight *v pixelWidth = 2*Tan(qx/2) /xres CSE 681
Pixel Calculation Coordinate (in xyz space) of upper left pixel center = ? Eye + w - (xres/2)*PixelWidth*u + (yres/2)*PixelHeight *v + (pixelWidth/2)*u - (pixelHeight/2)*v CSE 681
Interate through pixel Centers • pixelCenter = • scanlineStart = Eye + • w - • (xres/2)*PixelWidth*u + • (yres/2)*PixelHeight *v + • (pixelWidth/2)*u - • (pixelHeight/2)*v pixelCenter += pixelWidth * u scanlineStart -= pixelHeight * v CSE 681
Pixel loops ScenlineStart = [from previous slide] For each scanline { pixelCenter = scanlineStart For each pixel across { form ray from camera through pixel …. pixelCenter += pixelWidth*u } scanlineStart -= pixelHeight*v } CSE 681
Process Objects • For each pixel { • Form ray from eye through pixel • distancemin = infinity • For each object { • If (distance=intersect(ray,object)) { • If (distance< distancemin) { • closestObject = object • distancemin = distance • } • } • } • Color pixel according to intersection information • } CSE 681
After all objects are tested If (distancemin > infinityThreshold) { pixelColor = background color else pixelColor = color of object at distancemin along ray d ray object eye CSE 681
Ray-Sphere Intersection - geometric Ray Knowns C, r Eye Ray t= |C-eye| d+k = (C-eye) · Ray k s t2= (k+d) 2 + s2 d r C r2 = k2+ s2 eye t d = (k+d) - k CSE 681
Ray-Sphere Intersection - algebraic x2 + y2 + z2 = r2 P(t) = eye + t*Ray Substitute definition of p into first equation: (eye.x+ t *ray.x) 2 + (eye.y+ t *ray.y)2 + (eye.z+ t *ray.z) 2 = r2 Expand squared terms and collect terms based on powers of u: A* t 2 + B* t + C = 0 CSE 681
Ray-Sphere Intersection (cont’d) For a sphere with its center at c A sphere with center c = (xc,yc,zc) and radius R can be represented as: (x-xc)2 + (y-yc)2 + (z-zc)2 – R2 = 0 For a point p on the sphere, we can write the above in vector form: (p-c).(p-c) – R2 = 0 (note ‘.’ is a dot product) Solve p similarly CSE 681
Quadratic Equation When solving a quadratic equation at2 + bt + c = 0 Discriminant: And Solution: CSE 681
Ray-Sphere Intersection b2 – 4ac <0 : No intersection b2 – 4ac >0 : Two solutions (enter and exit) b2 – 4ac = 0 : One solution (ray grazes the sphere) CSE 681
Determine Color Use z-component of normalized normal vector FOR LAB #1 Clamp to [0.3..1.0] N objectColor*Nz What’s the normal at a point on the sphere? ray eye CSE 681