At long last, for the PC!

Still in production, but this version is looking promising.  It uses a BSP-based scene graph, and supports a wide variety of surface types.  In its present implementation, it uses general quadrics.  It also has full CSG capabilities, using the volumes defined by its surfaces as primitives.

Below is a view of the scene that comes with the latest project.

Some notes about the image above:

1) The image is 640 by 480 pixels.  The scene above renders at about 20 to 30 FPS on a ~1.5 to 2GHz PC.
2) The smoky-clear ball in the foregound is casting a colored shadow.  The ball also has a wedge-shaped portion of its surface which is opaque.  That part of the surface is underneath the ball, and casts a full shadow.
3) The ring-shaped object is a reflective sphere with a hyperboloid cut out of its middle.
4) Visual glitches are visible in this image.  These are due to the present lack of upcoming features.

Download the QuickRay project for the PC!

qr.zip (814 kBytes) -- contains an MSDev 6.0 workspace with all source code for the application that produced the above images, except for core rendering code (for this, a compiled library is included).  Also includes a compiled executable.

Features of QuickRay:

        Current implementation renders general quadric surfaces.
        Supports completely general constructive solid geometry.
        Refraction, reflection, and shadows.
        Depth attenuation of light in translucent objects.
        Cylindrical texture mapping.
        24 bit color.

Features not yet implemented:

        Branching rays.
        Surface waves.
        GUI based editing of the scene graph.

Also upcoming:


QuickRay's Ancestor - CONVEX

    Convex is a "real time" ray-tracing renderer.  (The "real" depends on the speed of your machine.)Here are two screen shots, one above water, one below... I nabbed some of the textures in these scenes from Meara's World (which no longer has an active link).

    These scenes show off some of the features of Convex:

        Quadric surfaces -- the cylindrical tube in the scenes shown is one surface.
        Limited Constructive Solid Geometry.
        Refraction, reflection, and shadows.
        Depth attenuation of light in translucent objects.
        Surface waves on translucent and reflective surfaces.
        Cylindrical texture mapping.
        Real time manipulation of objects, holes and lights (including keyboard and mouse control).
        Collision detection and simple physics for the viewer's motion.
        24 bit color.

    On a Power Mac G3/300, these 320x192 images are generated at about 15 frames per second.  I expect to increase the frame rate by a factor of two after fully optimizing (e.g., the inner loops are still in C, and many culling opportunities have yet to be implemented).

Download the Demo!

    You can download the Convex Demo!  It runs on a Power Macintosh only.  A PC port will come soon.  Memory requirements are minimal (about 2 MBytes), but you need a monitor that supports at least 16 bit color (24 bit color is recommended).

    convexdemo.sit (553 kBytes) -- includes the demo, sample worlds and instructions.

    screen shots -- a page of pictures taken from the demo worlds.  Warning!  This page is graphics-intensive.

Convex's Ancestor - The Original QUICKRAY

    The first ray-tracer I wrote was called "QuickRay."  Although its graphic quality is far below that of Convex, it's still a nifty little application and in some ways a more developed one than Convex.  It has a built in scene editor, simple dynamics and collision detection, and eleven pages of illustrated help accessible under the apple menu.  I had a lot more free time in those days!

    You can download QuickRay as well.  Again, it requires a Power Macintosh.  It actually requires more memory than Convex, about 4 MBytes (still quite minimal by today's standards).  QuickRay will run in 8 bit color as well as 16 or 24, but again 24 bit color is recommended.

    quickraydemo.sit (250 kBytes) -- includes the demo, sample worlds and instructions.

Back to Bryan's Page