Graphics research framework

This is pretty much just a laundry-list of features with some pretty pictures.

Useful stuff

  • Flexible scene-graph with multiple render targets
  • Virtual File System for seamless loading from regular directories, Quake PAK archives, or ZIP files.
  • Limited GUI support (transparent text windows which can be dragged around or typed into, great for debugging)

Level formats supported

  • Quake level loading (.BSP, version 0x1D)
  • Quake II level loading (.BSP, version 0x26)
  • Quake III level loading (.BSP, version 0x2E)

Model formats supported

  • Quake II model loading (.MD2)
  • Quake III model loading (.MD3)
  • Molecule loader (.M3D)
  • 3DS loading (.3DS, incomplete)

Textures/materials supported

  • JPG
  • PNG
  • TGA
  • PCX
  • BMP
  • Q2 .WAL
  • Q3 .shader

Demo effects:

  • Tunnel
  • Infinite 3D grid
  • Tie-dye (composite effect)
  • Sinus Scanlines
  • Copperbars
  • Iterated function systems with multiple morph modes and pre-defined matricies for the morphers: Binary, Coral, Crystal, Dragon, Fern, Floor, Spiral, Swirl, Tree, Triangle, and Zig-zag
  • Particle systems: Snow, rain, grid-bugs, explosion debris

Full-screen processing:

  • Radial blur
  • Roto blur
  • Motion blur
  • Glow blur

Procedural surfaces:

  • Sphere
  • Ellipsoid
  • Cylinder
  • Rectangular prism
  • Torus
  • Superellipsoid
  • Supertoroid
  • Elliptic Torus
  • PQ torus knots
  • Springs
  • Bezier curves
  • Supershapes
  • Spherical harmonics

Misc. features:

  • Texture-mapped fonts
  • For a neat effect, text strings can be bound to any of the path objects, such as the PQ torus knot.
  • Skydome (including real sun position and CIE clear/cloudy sky luminace)
  • FBm generated heightmaps
  • Heightmap from image
  • Skybox

Generated surfaces (no parameters):

  • Pisot Triaxial
  • Triaxial Tritorus
  • Pillow Shape
  • Whitney Umbrella

These are all generated using a general purpose parameterized-surface generator with different parameter matricies.

Real-time ray tracer

Here are a few images from my real-time raytracer (taken on a 900 MHz Athlon):

It supports temporal supersampling, where only a fraction of the pixels are rendered in any given frame, so the image is rendered at interactive rates with degraded quality when being moved, but it converges to an optimal solution if the camera is left alone for a second or so (not enabled on these pictures).

I intend to add adaptive sub-sampling to increase speed without much loss in quality, and as an extension, the level of subdivision can be increased when the camera is still. This should give the speed advantages of sub-sampling without the problems in static images (missing small objects), although it will still have aliasing in animation if an object projects to something smaller than the initial grid resolution and falls fully inside of a grid cell.

It currently only supports spheres and planes, another area for expansion.

Note: The scene files are from an computer graphics course I saw online a long time ago, but I don’t remember exactly where they came from. If anyone has contact information, please let me know and I’ll add it here.