graphics
arise
Arise, or Advanced Realistic Image Synthesis Engine is a recursive ray-tracer
with basic primitive and shading support. The main objective for Arise was to
create a highly optimised RIS engine. Written in C++, it uses only the standard
C++ library, and is therefore largely platform independent (currently, runs as
Windows console and Linux applications).
The object intersection routines are reasonably optimal without resorting to
assembly language (in order to maintain platform independence), and a spacial
subdivision acceleration is provided using octrees. Surface texture support
includes solid noise-based and other procedural textures, as well as image
mapping. Surfaces may be instanced, to allow many objects to share the same
material properties while avoiding duplication of the material in memory.
The polygon intersection routines use Pluecker coordinates - these are fairly
quick, although speed-up involving common edges within mesh objects still needs
implementation.
Arise also supports Constructive Solid Geometry (CSG)
object types that allow boolean operations on all objects. The object-oriented
design means that all objects, including CSG and Octree objects can be textured
individually, and participate in CSG operations.
In its present form, Arise was originally developed in 1995-1996 although it
began life as a Pascal program in 1993. The bulk of the original C++ code was
written as a final year project during my BSc. in Computer Science course at the
University of Technology, Sydney.
Since then, it's been substantially re-written, additional primitive types have
been added, as well texturing support, more output file formats, supersampling
and many performance optimisations. For testing purposes, Eric Haines'
SPD software has been adapted to produce scene files for
Arise. More recently, I made an animation
with it for use as a flash preloader.
Future plans include replacement of the proprietary SDL with XML (hopefully,
with ECMA-scripting), adaptive anti-aliasing, basic animation support and more
primitives such as swept surfaces (e.g. surfaces of revolution), other
quartics, b-splines and NURBS, as well as additional solid textures. On the
performance side, the shading and surface handling could be further inproved,
including a 'quick-win' with shadow object caching and / or light buffers, and
the octree subdivision criteria could be improved based on the SPD test results.