Chronically Disemboweled by Bears

 

Progress

Page history last edited by Tim Lyakhovetskiy 3 yrs ago

Progress

 

Screenshots

2-23-06

Very very very incorrect global illumination test. Also quite slow. :(

 

Finally have importance sampling for area lights done fairly elegantly. Also did a quick and dirty implementation for MTL material files to be used with the OBJ loader. Irradiance mapping still a work in progress.

 

2-13-06

More irradiance mapping tests. As you can see, there is still a little bit of noise, especially around the shadow areas. The irradiance interpolation code also fails to take gradients into account so the shading bands a little awkwardly sometimes. Overall though, a much nicer image than generated with standard point lighting.

 

2-12-06

I've been working on a lot of cool lighting improvements and optimizations. Here's a test image of indirect lighting using an irradiance cache. Cooler images on the way once I get the bugs worked out...

 

2-08-06

I fixed up the lighting model a little bit and set this rendering over night. This image took 8 hours to render. The global illumination code is very very naive right now.

 

2-07-06

Showing off a very noisy image of monte-carlo traced skylight illumination. Optimizations on the way...

 

2-02-06

More soft shadow goodness.

 

Implemented a few optimizations - early shadow ray exiting, ray distance storage for faster intersection failure tests, and some other things. With the added speed, did a naive implementation of soft shadowing, followed by a smarter implementation with a shadow cache. This image contains approximately 6,000 primitives, with all the spheres and one of the planes being reflective, and two lights, one of which is an area light. Each intersection spawns 64 shadow rays, and this is antialiased with a 2x2 kernel. Ultimately, there are about (2 * 2) * (64 + 2) = 264 rays cast per pixel. the average number of primitives tested for intersection is about 20, so there are 5,280 intersection tests per pixel. This image took 47 minutes to render.

 

2-01-06

Fixed a few really bad bugs, preprocessing is now 200% faster, and rendering is 80% faster.

 

1-31-06

Finally fixed the last of the lighting bugs and pretty much finished off the octree implementation. This looks pretty and renders in a decent time frame considering EVERYTHING is reflective. Oh, and the space around the rim of the teapot is part of the model, it's not a rendering bug. Also, this is the tree for the above image:

 

1-30-06

A debug window showing the constructed octree. Try this for a closer look.

 

The octree implementation is starting to come together very nicely. This image contains 500 sphere primitives and about 530 triangle primitives. All are reflective and shaded by 3 light sources. This preview took just 7.4 seconds, as you can see. The naive implementation would take approximately 5 minutes. Still have to fix some lighting bugs and fine-tune the octree subdivision...

 

The tracer can now use an octree to speed up processing. The design is fairly elegant with almost no code duplication. For now, I've only written code to manage spheres with the octree - the triangle intersection code isn't quite ready. This screenshot demonstrates the massive speedup gained through good spatial subdivision. This image contains 1000 reflective spheres organized in kind of a wavy cylinder shape. The preview (320x200, one sample per pixel, maximum two reflection rays) took 13 seconds to render, while this high quality image (640x410, sixteen samples per pixel, maximum five reflection rays) took about 10 minutes. The five reflection rays are the worst in terms of eating performance. The naive implementation would probably take around 4 hours to render this same picture.

 

1-27-06

I implemented an "Alias|Wavefront OBJ" object loader for the triangle mesh class and fixed some bugs. There's still lighting issues I have to fix, but it's getting there. Also, the time taken is not erroneous, this image did take 2 hours and 20 minutes to render. I still have to optimize the intersection code.

 

1-26-06

The tracer now supports triangle meshes. The implementation can be improved a little, but most of the functionality is there. As you can see, the rendering time has doubled since the last shot. If you're curious, this scene has 10 spheres, 2 planes, 12 triangles, and 3 lights. It's about 640 by 410 pixels big with an anti-aliasing kernel of 4x4, meaning that in reality the image generated is 2,560 by 1,640. My CPU is an Intel Pentium 4 clocked at 2.4 Ghz.

 

The particular new feature in this render is the new exponential exposure function, modelling camera lighting effects and raising the dynamic range of the renderer. Also, I cleaned up code, added a few optimizations, it now prints out time taken for last rendering, allows for previewing (multiple sets of "trace settings") and also uses a corrected viewport aspect ratio.

 

1-24-06

Some randomization and softer light choices, and voila.

 

Fixed some more camera distortion. Now the spheres are actually spherical.

 

OK, this one is just way way pretty. 4x4 anti-aliasing and each sphere is 70% reflective. Took about a minute and a half to render.

 

Fixed some shadow bugs, implemented planes, cleaned up code, implemented proper camera class, materials, specular lighting.

 

Basic reflections, fixed camera distortion, anti-aliasing. -Tim L.

 

Colored diffuse lighting, multiple objects, multiple lights, and shadowing. -Tim L.

 

W00t, here's the first one. It'll only get better from here, guys. -Tim L.

 

beautiful... we need subversion stat.

Comments (0)

You don't have permission to comment on this page.