|
This page tell the tale of my raytracing project... There
isn't much here yet, except some pictures. If this
page takes a long time to load, get a new
browser. This is the current feature set:
|
![]() ![]() ![]() ![]() |
![]() |
Apr 16, 2001 (click for larger
image) 29185s on a K6-II 400 This is the final version of the scene... with many many rays being refracted through the glass pitcher on the table... |
![]() |
Apr 16, 2001 (click for larger
image) 17404s on a K6-II 400 This is the final version of the scene... from another viewpoint. This lets you get a good overview of the objects the scene was constructed from. |
![]() |
Apr 16, 2001 (click for larger
image) This is what the scene looks like when rendered by the OpenGL preview mode of my raytracer. With this many patches, even OpenGL isn't 'realtime' on my poor little K6-II. :) |
![]() |
Apr 16, 2001 20733s on a K6-II 400 This is yet another view of this scene... with more complex ray interactions going on. This one was traced on a busy system, so the render time is unfairly high... |
![]() |
Apr 16, 2001 (click for larger
image) 6075s on a K6-II 400 This is a close up view of the flower bouque on the corner of the table... Perdy. :) |
![]() |
Apr 15, 2001 (click for larger
image) 6177s on a K6-II 400 This shows what a refractive teapot looks like. Unfortunately, this teapot model (the 'classic' one), does not have a bottom, nor a rim for the lid to sit on. Because it's not a solid model, it looks kinda funky when refracting light. |
![]() |
Apr 13, 2001 (click for larger image) 5109s on a K6-II 400 This shows the new bezier patch algorithm at work. In contrast to my previous teapot (same model, different algorithm), this one takes MANY TIMES less memory, is faster, and doesn't have cracks. I need to fix the mouse bug in the screen capture thing though. Icky. |
![]() |
Mar 25, 2001 (click for larger
image) This scene shows off a less testable scene, where glass of refractive fluid is focusing light onto a textured surface. The light causes the texture to be illuminated which results in some nice rings on it. |
![]() |
Mar 25, 2001 (click for larger
image) 322s on a K6-II 400 This shows off two more common caustic types: on the left a sphere is focusing light onto the 'floor', on the right, we see a cardiod formed by a shiny ring. Note that you can see the hightlight from other angles, due to the reflection in the ring. |
![]() |
Mar 25, 2001 (click for larger
image) 923s on a K6-II 400 This shows my 'pool of water' scene, with bidirectional raytracing. It's immediately obvious how the 'focusing' of the bump mapped surface works. Pretty nice looking! Note that the difference in time between this picture and the previous one is because of the huge number of light rays that I chose to send out as part of the BiDi-RT pass. |
![]() |
Mar 25, 2001 (click for larger
image) 182s on a K6-II 400 This shows my 'pool of water' scene, without bidirectional raytracing. Basically, it's just a hole in a marble sphere that is filled with 'water'. The water is bump mapped though, so that the surface below it is distorted. On the floor there is a hemisphere just to give some more interesting features to the image. |
![]() |
Mar 18, 2001 This shows another test case of mine, a cylindrical mirror. Here I'm trying to get a nice cardiod caustic, but it's not working. It is working pretty close, but I wouldn't call this ready for prime time. You can see the individual light rays, where they hit the diffuse surface though, which is kinda neat. At this point, only indirect illumination is being performed by the BiDi-RT pass, so everything, except the caustics, look fine. |
![]() |
Mar 17, 2001 This shows my first attempt at bidi-rt. Here you can see that I'm having MAJOR problems with the sampling artifacts, but I do in fact have a working caustic. The reason for the checkerboard pattern is that there is a texture on the surface... so that's actually correct. The lines and such through the scene are not. You can see the refractive sphere in the scene, and the caustic underneath it... that's what I'm after. |
![]() |
Mar 12, 2001 Yaay, the teapot, it is finally mine, all mine! :) You can see a few imperfections due to 'T' vertices (missing pixels), but overall, it looks pretty nice. The other thing is that the reflections in the teapot don't look quite perfect, but that's because I'm appoximating flat patches with polygons, who don't interpolate normals. This will be fixed in the future. |
![]() |
Mar 12, 2001 (click for larger
image) This shows me (trying to) use bezier patches to do something interesting... in this case, I'm replacing the height field with a bezier height field. This isn't the final form of the height field that I have, but shows that even at this point, it was getting close. |
![]() |
Mar 1, 2001 (click for larger
image) 4012s on a K6-II 400 This shows the final version of the scene, where I chose to change the table top surface. This one took a lot longer to render than the previous pictures because it is antialiased and has soft shadows. You get what you pay for. I think it turned out okay... |
![]() |
Feb 28, 2001 (click for larger
image) 421s on a K6-II 400 Once I got the objects in the scene looking nice, I had to get rid of the whole infinite plane thing. I put the museum scene on a cylindrical surface and added a 'sky' sphere with textured clouds. Of course the clouds are procedurally generated. :) |
![]() |
Feb 27, 2001 (click for larger
image) 282s on a K6-II 400 This image shows much nicer marble. :) |
![]() |
Feb 27, 2001 (click for larger
image) 255s on a K6-II 400 This image shows me trying (and failing) to create a nice marble texture for the scene... I turned off the height field in this picture to speed up rendering... |
![]() |
Feb 27, 2001 (click for larger
image) 243s on a K6-II 400 This image shows the scene from the normal perspective. Now the height field edge polygons have been fixed, and it has been placed on top of a wood block to make it taller. Note how the textures between the two match up perfectly. |
![]() |
Feb 27, 2001 (click for larger
image) 236s on a K6-II 400 This image shows a close up of the new fifth object, a height field. You can see in the image that the 'edge' polygons don't really match up correctly yet... but it looks decent (procedural wood texture map)! |
![]() |
Feb 27, 2001 (click for larger
image) 296s on a K6-II 400 This shows off the basic layout of the scene. The lighting has been preliminarily set up, and 4 of the 5 pillars have been populated. Also, the pillars have been defined as two 'block' objects, with a bunch of cylinders. The four objects are: two fog volumes (spherical and cubical), an earth globe, and an iso-surface ball. |
![]() |
Mar 3, 2001 (click for larger
image) 595s on a PIII-933 This scene is very similar to the previous one, except now the fog in the sphere is red and much more translucent. Also, more of the sphere itself is transparent... |
![]() |
Mar 3, 2001 (click for larger
image) 782s on a PIII-933 This scene highlights a specular sphere that bounds a fog volume... and has holes in it. Through the holes in the sphere, you can see the grey fog inside of it... through the sphere you can see the green fog volume behind it. In the solid portions of the sphere, you can see the reflections of the rest of the world in the sphere... Rendered with 3x3 adaptive supersampling. |
![]() |
Feb 26, 2001 (click for larger
image) 604s on a PIII-933 This scene shows three objects with procedural aspects to them... the floor has a procedural bump map applied to it, the block of wood obviously has a procedural texture map on it, and the spherical object (from before) has opacity maps on it. |
![]() |
Feb 26, 2001 (click for larger
image) This scene shows a spherical object (which is really several nested spheres) that has opacity maps on it (specifically "threshold .6 noise3 scale 10 10 10" with varying thresholds for different sphere radii). It's kinda a cool effect, especially until I implement proper isosurfaces. |
![]() |
Feb 25, 2001 (click for larger
image) This image is an experiment that I did. Basically the texture map on this looks like: "texture map image.png map image.png". It is effectively taking the color that would normal be used as a texture map (which is what "map image.png" returns) and using the first two color values as indices into the texture again... causing this interesting effect. |
![]() |
Feb 25, 2001 This image illustrates an interesting bug I had to kill... this is what happened which I simply casted a double to integer, instead of using the floor function in the appropriate place. Graphics bugs are cool... |
![]() |
Feb 19, 2001 (click for larger
image) This is the final version of the image with depth of field turned on, and with a bump map applied to the table surface to make it non-perfect. I really don't like the depth of field effect, but it would have helped if I turned jittering on. :) |
![]() |
Feb 14, 2001 This version of the image shows the scene from close to the final perspective. In this version you can see the soft (non jittered) light sources casting their multilayered shadows around. This scene was engineered so that the whole table was illuminated by "soft" light, not direct light... which accounts from the major banding effects... |
![]() |
Feb 12, 2001 In this version of the scene, I just added temporal antialiasing (aka motion blur) to the cue ball... it looks like it just got hit huh? Also, again, notice the nice soft shadows on the other balls in the scene. |
![]() |
Feb 11, 2001 Here you can see the previous picture with soft shadows turned on...
|
![]() |
Feb 11, 2001 This is the start of my pool scene... here you an see my cue that I constructed out of really long cones, and my table surface... the borders of the table are just brown boxes right now... but they will look nicer later.
|
Feb 14, 2001 (click for larger image)
![]() |
Feb 12, 2001 This shows the depth of focus implementation running on a bump mapped scene... |
![]() |
Feb 11, 2001 This shows a more agressive swirly bump map on the floor. This image rendered in 31 seconds on my lowly K6-2 400. |
![]() |
Feb 11, 2001 Woo hoo, bumpmapping works! This scene has a bump mapped plane surface, a bump mapped sphere, and a "crystal ball" that is magnifying the floor... It's kinda cool how the bump map affects the reflection in the floor. |
![]() |
Feb 11, 2001 This image shows me working on bumpmapping... and it not working. You can see that the 'grooves' in the sphere don't look right. Oh well, maybe next time. :) |
![]() |
Feb 10, 2001 This is a kinda cool image that shows when I had depth of field halfway implemented... the base of the ray was being offset, but the direction wasn't being corrected. Kinda cool that you can see all the individual samples (or not? :) |
![]() |
Feb 5, 2001 (click for larger image) This is the final version of the image... I decided to change the color of the "wine" to be red instead of yellow. This makes it clear that I know you don't drink tequilla from a wine glass. :) Also, this image is antialiased, which makes it look much nicer than the previous one... This scene took about 65 minutes to render at full quality on a PIII-933. |
![]() |
Feb 5, 2001 This is a closeup of the stopper in the final version of the scene... |
![]() |
Feb 4, 2001 (click for larger image) This is almost the final version of the image... here I decided to texture the stopper and the camera position is back to normal... |
![]() |
Feb 4, 2001 Here I added some nice touches to finish up the bottle... I added a stopper to the bottle and a nice looking lip. CSG is very cool. |
![]() |
Feb 4, 2001 Hrm... I want the wine glass a little higher up in the scene. I added a nice little marble block to boost it up a little bit. It's just the intersection of 6 planes... (that little square wierd thing by the neck of the bottle wasn't raytraced, it just got screen captured somehow :( |
![]() |
Feb 4, 2001 The scene is really starting to shape up with the texture maps applied! This also shows the opacity mapping that makes the square label be transparent on the non-opaque portions... |
![]() |
Feb 4, 2001 This capture shows me working on applying the small label to the neck of the bottle... notice that opacity mapping is not implemented yet... so there is a black border around the label. |
![]() |
Feb 4, 2001 The label doesn't look half bad! Nice! |
![]() |
Feb 4, 2001 In this capture, I'm trying to apply a texture map to the bottle. I scanned and touched up the texture from a real bottle... but I only wanted it to wrap halfway around a cylinder, and then trim the cylinder with a plane... obviously getting the orientation right was annoying also. :) [btw, the background is different because a diffuse surface renders faster... it just made development of the scene go faster...] |
![]() |
Feb 4, 2001 (click for larger image) This image shows my first incarnation of the bottle, with little refinement. It was created with extensive usage of CSG operations... so it really is hollow and really is shaped pretty close to how I wanted it to. |
![]() |
Feb 4, 2001 This shows the glass after I tweaked the material properties to look more like glass... it made a BIG difference huh? |
![]() |
Feb 3, 2001 Here's my first try at getting the geometry of the glass right. It's a pretty simple object with only a few objects in it... but it looks nice! |
![]() |
Feb 1, 2001 This shows a simple CSG object... a sphere with a few smaller sphere's cut out of it. Nice huh? :) |
![]() |
Feb 1, 2001 This shows a big cubic surface (that is slicing through the smaller spheres). Sorry for the crappy resolution, it was pretty slow to raytrace (30 seconds or so) and I didn't feel like waiting 9x that long to get the full size (320x240) version... |
![]() |
Dec 5, 2000 (click for larger image) This image shows what happens when your numerical rootfinder does not converge... in this case, I was using simple newton interation to try to converge on a large cubic... but it decided not to converge at all for part of it. I'm using sturm sequences now, which are a nice way to bound the roots and guarantee convergence. Cool bug though, huh? |
![]() |
Dec 5, 2000 (click for larger image) This image shows texture mapping with bilinear interpolation, refraction, and antialiasing. More interestingly, it shows the interaction between the three... This scene was rendered with adaptive antialiasing, see the next image for more info... |
![]() |
Dec 5, 2000 (click for larger image) This image shows the debugging output that I have in my raytracer for use with adaptive supersampling. Basically, every black square is sampled a single time, every green square is sampled 9 times, and the red and blue squares are sampled 3 times each. If you look at the difference between this picture and the previous one, you notice that it's doing the right thing... |
![]() |
Dec 5, 2000 (click for larger image) This images shows texture mapping with bilinear interpolation, refraction, and antialiasing. More interestingly, it shows the interaction between the three... |
![]() |
Nov 29, 2000 (click for larger image) This scene shows my refraction working, with the simple "pencil on a glass of water" test. Here you can also see the "modulated shadow" algorithm that I implemented: Basically if a shadow ray hits a translucent object, the light source contribution is reduced, but not completely blocked. Thus, the shadows are not completely black... |
The triangle strip intersection test was adapted from an algorithm described in this paper.
![]() |
Nov 27, 2000 This scene was originally part of my "realtime" component of my OpenGL program, but now I tried raytracing it... At this point, I had enough primitives to do a decent job rendering my little tree object, and it turned out pretty good. The shadows look correct and the nice grid object actually works! |
![]() |
Nov 27, 2000 This scene illustrates a "mirror" with a sphere and a ground plane. This sphere is casting a shadow in the "mirror" and the ground plane and mirror have transformations applied to them (rotations). |
![]() |
Nov 27, 2000 This scene shows a simple example of recursive interreflections between perfectly specular objects... you can see the triangle strip reflected in other objects... |
![]() |
Nov 27, 2000 Another similar shot... |
![]() |
Nov 26, 2000 Yes! It finally works!! This was one of the first scenes I had that actually worked! This scene is based off input from the SPD database... |
![]() |
Nov 26, 2000 These pictures show an interesting bug I had during the first stages of my raytracer, trying to get reflections to work properly... Kinda neeto huh? |
![]() |
Nov 26, 2000 Zoomed in to see some details... notice how this shader is a nice viewer dependent shader... (it changes based on where you view it from) |
![]() |
Nov 26, 2000 Zoomed in even more... |