Home | What is Raytracing? | Raytracing Algorithm | Raytracing Reference | How to write a Raytracer | Links | Humour | About Me
Raytracing is, in many ways, a standardized technique. Almost all raytracing programs (known as "raytracers") use the same basic algorithm in one way or the other. This algorithm is presented below.
This section is executed before the actual rendering of the scene takes place. It is the most implementation and programmer dependent of all the sections of the algorithm. Its structure and content relies entirely on how the programmer has chosen to describe and store his scene and what variables need to be initialized for the program to run properly. Some parts that are usually present in some form or the other include generation of efficiency structures, initialization of the output device, setting up various global variables etc. No standard algorithm exists for this section.
This section actually produces the picture of the 3-D scene. The algorithm for this section is given below. Note that the procedure RayTrace is recursive, that is, it calls itself.
Procedure RenderPicture() For each pixel on the screen, Generate a ray R from the viewing position through the point on the view plane corresponding to this pixel. Call the procedure RayTrace() with the arguments R and 0 Plot the pixel in the colour value returned by RayTrace() Next pixel End Procedure
Procedure RayTrace(ray R, integer Depth) returns colour Set the numerical variable Dis to a maximum value Set the object pointer Obj to null For each object in the scene Calculate the distance (from the starting point of R) of the nearest intersection of R with the object in the forward direction If this distance is less than Dis Update Dis to this distance Set Obj to point to this object End if Next object If Obj is not null Set the position variable Pt to the nearest intersection point of R and Obj Set the total colour C to black For each light source in the scene For each object in the scene If this object blocks the light coming from the light source to Pt Attenuate the intensity of the received light by the transmittivity of the object End if Next object Calculate the perceived colour of Obj at Pt due to this light source using the value of the attenuated light intensity Add this colour value to C Next light source If Depth is less than a maximum value Generate two rays Refl and Refr in the reflected and refracted directions, starting from Pt Call RayTrace with arguments Refl and Depth + 1 Add (the return value * reflectivity of Obj) to C Call RayTrace with arguments Refr and Depth + 1 Add (the return value * transmittivity of Obj) to C End if Else Set the total colour C to the background colour End if Return C End Procedure
This section is also more or less programmer dependent, but the functions performed usually fall into one or more of the following groups
Memory cleanup: The space taken up for the scene and rendering data is released.
Applying post-process filters: Special effects such as blur, edge highlighting, suppression of colour channels, gamma correction etc may be added to the picture after the actual rendering has taken place. Antialiasing, motion blur etc are usually a part of the main rendering section.
Freeing output devices: If the output device is a file, it is closed. If it is a hardware device, then any link established with it may be suspended.
Displaying statistics and other user data: This is, of course, entirely up to the programmer. But it is useful to know the details of the rendering process.