This will be my last post on this topic, I’ve actually implemented this in my raytracer a long time ago (2009..), except for the last sampler. I don’t have time to make the raytracer behave better, especially the underlying kd-tree. I have other pet projects that are more interesting to me. But this could still be of interest to some people.

Oversampling in graphics are fundamentals. Without it, you get serious aliasing effects. These can be explained quite easily. In your eye, you don’t get just one ray hitting your retina on one “cell”, you get thousands on them, and then your brain only see the mean value. The issue with the raytracer is that it only uses one ray, instead of thousands of them, because it is quite costly! But even with a small amount of rays, you can enhance the results.

Read More

During SuperComputing 2011, I stumbled across a paper on parallel random number generation. And it brought back some memories of a blog post I wanted to do here on oversampling in my Interactive Raytracer.

Random numbers are important in a raytracer because one needs oversampling to have anti-aliasing, and to have a more realistic rendering, we need to add some jitter inside the oversampling. I won’t talk about this here, it is not my point (yet). So I’ve decided to resurrect IRT from the dead, at least long enough to test parallel random number generators. It is now on Github, and I’ve also changed the matrix library to Eigen. Some optimizations later, it is slightly faster than before, although it is still very far from Bikker’s work.

The Python wrappers are still working BTW.

Let’s hope I find some time to finish this before getting back at VSTs 🙂

Buy Me a Coffee!
Other Amount:
Your Email Address:

After my review of Intel Parallel Studio and then my post of Advisor Lite, I had the opportunity of doing the beta of Intel Advisor and then the final version of Parallel Studio.

The review will not be as thorough as the one on Advisor Lite, because Advisor is an update of Advisor Lite. It has some additional features, and that’s what I’d like to focus on.

I won’t dwell into the details of Intel’s new offer, suffice to say that Intel took the opportunity of changing some offers name and of incorporating some parts of Parallel Studio in its other products, and of course on Linux (which was left alone until then).

Read More

Now, I will show the implementation of reflection (from the Whitted approach). It is basically using the reflection law and recurse the ray cast.

Reflection rays

Each object can reflect a ray more or less from a different object. A mirror would reflect the light totally, and a matte object would reflect nothing. Each new reflection is a new ray tracing call, so it can be costly. The number of recursion levels will be fixed, even if an object reflects nothing: this will be implemented through shaders in the future.

Read More

Adding the lights is the first step toward a Whitted raytracer. For each ray that hits an object, several rays can be cast, reflection, refraction and shadow. The last one is the one created with lights.

Lights and shadow rays

Without light, objects are bland, seem to have no depth, … Light on a scene can be cast by several light sources. When a ray of the camera hits an object, the intersection point can be illuminated by one or several of those sources. Each of them contributes to the color of the object. If the light source direction is parallel with the normal of the object at the intersection point, the contribution will be maximum. If it is orthogonal, the contribution will be zero. The scalar product is the tool used to compute this quantity.

Read More

At last, I’m starting with my first post on my attempt on Interactive RayTracing. This first one will only be on the generic global implementation.

A matrix library must be used, the same basis class will be used for each element, point or color, but with a different size (if needed). I will use a typedef for defining each of them. This will help explaining what is going on. I will not explain the code of the library, althoug the optimization of the raytracer will surely have to be done in this part of the code as well.

So a vector will be named (for the moment) Vector3df, a point Point3df, a normal Normal3df and a color Color. All elements will live in the IRT namespace.

Read More