Project Description

A Distributed Ray-Tracer

Ray tracers are programs that render 3d images or animations by simulating interactions between light rays. This method is the most physically correct and can simulate very complex things such as reflections, refractions, and shadows elegantly. This is different from the method games and other realtime applications use to render 3d graphics. They operate by transforming and projecting triangles, then using tricks such as texturing and shading to give the illusion of a physical world. This is done for speed, as raytracers are very slow for complex scenes.

For an example raytracer, see PovRay.

A simple tracer is easy to write. The biggest hurdle to any tracer is performance. It is not uncommon for a complex image to take an hour to trace. So, here's the project idea:

The idea is to utilize the networking capabilities and web-based nature of Java to create a distributed ray tracer, a tracer that uses many computers to speed up processing. We would make a ray "server" that users could set up with a scene to render, and then tracing "clients" could connect to the server and rendering individual chunks of a scene. The server would send scene data to each client, and the client would send back finished chunks of pixels. The server would then update all the connected clients with finished pieces of images so that each client would see the results of all the other clients as well.

The ultimate flashy demo would be using this distributed tracer for a realtime animation. Normally tracers are far too slow for animation, but if a distributed tracer had a lot of computers connected to it, for example, in one of the computer labs on campus, then we could approach realtime speeds. The server would then get the clients to render "future" frames in the animation and send back "current" images, in essence streaming the animation.

Collaborative Scene Definition

If we find that we move faster than expect, we can expand upon the idea further. Can we come up with a creative way to allow simultaneously logged on users to collaboratively define scene, either before or even during the rendering process? This could be an added capability, so we could have a "normal" mode where a scene is defined somehow and then distributively rendered, or the collaborative mode could be used.

Context-Free Scene Definition Grammar

This might be an area to research. Instead of being tied to modelled scenes, we could support procedurally rendered images, where the objects in the scene are defined by mathematical rules, and then the tracer works out how to render them. Think fractals.

To get an idea for what we were discussing, check out: http://www.ozonehouse.com/ContextFree/
Go here to see some pictures that people have made using this software: http://www.flickr.com/photos/tags/contextfree/

The interesting thing to do in the context of a raytracer would be to extend the same context-free approach to any scene definition language we would use. This would allow us to make similar images out of simple shapes repeated thousands or millions of times across all three dimensions.

Please Read About Raytracers!

Tim posted a bunch of links to sites containing information that we all need to know if we are going to attempt this project. Everyone should head over to the References page and read the material linked to there.

Stuff

Contact Information

PersonEmailAIMAIMPhone
ZacharyFrench ejackfrostz@yahoo.com lafwf 1.805.766.2373
CarlJantzencarl_jantzen@umail.ucsb.edudoopokkofrayedsynapse1.925.989.4796
TimLyakhovetskiy tim@insta-code.comTimCanSeeYou1.650.245.0029
TimPelayo crookedrain@gmail.comteh r0x0r1.310.754.9720


Page Information

  • 2 years ago [history]
  • View page source
  • You're not logged in
  • No tags yet learn more

Wiki Information

Recent PBwiki Blog Posts