[Haskell-cafe] announce: Glome.hs-0.3 (Haskell raytracer)

Andrew Coppin andrewcoppin at btinternet.com
Thu Apr 24 15:29:50 EDT 2008

Jim Snow wrote: 
> Those are good links.  It's good to see that the groups of people who 
> know about Haskell and people who know about ray tracing do, in fact, 
> overlap.
> Background information for everyone else:  Wald's work is related to 
> OpenRT, which is an OpenGL-like api for interactive ray tracing  
> (despite the name, it is not, in fact, open source).  OpenRT makes for 
> stiff competition.  Arauna (http://igad.nhtv.nl/~bikker/) is very 
> impressive, as well.  On the other end of the spectrum, there's 
> POV-Ray, which isn't known for its speed, but it is very flexible in 
> the kinds of things it can render and can generate some fairly 
> realistic images.  Unlike most real-time ray tracers, which only 
> render triangles, POV-Ray can render native representations of 
> spheres, cones, toruses, heightfields, julia fractals, and a few dozen 
> other kinds of primitives.  Pbrt (http://www.pbrt.org/) is another 
> renderer, more modern than POV-Ray, that focuses more on output 
> quality than speed.

Wow. The POV-Ray guys are talking about Haskell [or rather, my personal 
addiction to it] and the Haskell guys are talking about POV-Ray... on 
the same day... How unlikely is that? ;-)

I've been using POV-Ray for a long time. I like it for several reasons:

1. It's the only program I've ever seen [on a PC] that does ray tracing. 
[I'm sure there must be others...]
2. It's the only program I've seen that can render *real* curves, not 
fake trickery with triangle meshes.
3. It can render *arbitrary* mathematical surfaces. Want to render a 3D 
slice of the 4D cubic Mandelbrot set? No problem!
4. It has a novel "scene description language", which does far more than 
describe scenes. It's Turing-complete, and you can build physics engines 
with it. [It's painfully slow though!]

Basically, as a maths addict, POV-Ray appeals to me. However, there are 
problems... The scene description language is basically a macro 
expansion language, and is chronically poor in data types and control 
structures. (The worst thing about Haskell is that IT MAKES YOU HATE 
NORMAL LANGUAGES!) Preserving complex scene state from frame to frame in 
an animation is notoriously tedious to code. Certain features are 
accessed in unintuitive ways to avoid breaking backwards compatibility. 
Overall, you tend to spend a lot of time saying which effects to 
simulate. [Not all of them matter for a given scene, so some can be left 
out - thus saving on speed!] I dislike such "clutter". For no objective 

The POV-Ray team is currently working on the first multi-threaded 
version. [After years of saying it would never happen.] It's taking a 
while. (That's partly because the developers take product quality very 
seriously.) It should be interesting when it's done, but it's still 
taking a while.

Personally, I'd quite like to write my own ray tracer to address some of 
these limitations. But every time I try, I end up hitting design issues 
[Haskell works very differently to Java] or performance issues [which I 
don't even know how to begin debugging]. Not to mention that POV-Ray 
uses sophisticated techniques like volume bounding that I know nothing 
about. (There's nothing like using an inherantly superior algorithm to 
make your code orders of magnitude faster...)

> Simon Marlow wrote:
>> There's definitely a bug here, regardless of whether this example 
>> demonstrates it.  Use of par shouldn't introduce a space leak, and 
>> currently it can.
>> (fortunately I'm fixing it as we speak...)
>> Cheers,
>>     Simon 
> Oh, good.

Indeed - yay for Simon!

More information about the Haskell-Cafe mailing list