TITLE: The Fall of a Dynasty
NAME: Daniel Dresser (and Fraser Kuyvenhoven)
COUNTRY: Canada
EMAIL: dsdresse@uwaterloo.ca
WEBPAGE: Hopefully I'll make one sometime
TOPIC: Mythology
COPYRIGHT: I SUBMIT TO THE STANDARD RAYTRACING COMPETITION COPYRIGHT.
JPGFILE: dkgdome.jpg
ZIPFILE: dkgdome.zip
RENDERER USED: 
    Povray 3.5

TOOLS USED: 

        Python
        Numarray
        Blender

RENDER TIME: 
    about 1.5 hours to render, 5 minutes to parse, 15 seconds to
generate using Numarray

HARDWARE USED: 
    Athlon 2500+, 1 G Ram

IMAGE DESCRIPTION: 


        The topic was quite vague about what exactly constituted a myth, so I
have chosen a myth from a fictitious culture I've been playing with for a
while.  I'm hoping to flesh it out sometime into a novel, graphic novel, movie,
computer game, or whatever else might come to me at some point. For now, here
is the story of Haiduran.  This world draws its style primarily from modern
fantasy, but the story of Haiduran occurs in the long dead past.  Its theme is
one predominant in many mythologies, as well as the book of Genesis, which I
believe is true, but is categorized with mythology (different discussion). 
Anyway, a favorite theme in mythology has always been Eve's apple, Pandora's
box, a source of power too extreme to be controlled by any mortal.  These
talismans can destroy any who are so full of the desire for personal gain that
they are driven to the hope of harnessing the great power.
        
        However, when Haiduran travelled through the caves of the Dekhage, to
the Great Dome, and sought the Book of Bright Shadows, he did not think to
increase his power.  He came with the hope that he might somehow destroy the
Book, and end the evil it had been used for.  His resolution came from the
knowledge that his comrades had died that he might succeed.
        
        Haiduran tried to face the Book and resist its temptation, in the hopes
that he could secret it away, but no man possessed such strength.  In
desperation he tried to destroy the Book with the magic he had learned from his
forebearers, but he knew this was futile.  At this dark moment, he dared to try
the unthinkable.  He tried to strike out one last time, and with all that
remained of his will, strike out not at the immutable book, but simply at
everything that surrounded him.  He threw his hands towards the ceiling of the
Great Dome, and then planted his hand on the Book, knowing it would consume
him.  The soul of Haiduran was lost, but the Book fueled the hurricane of
energy he created.  The Great Dome did not still until the work of ages had
fractured.  All that it contained was buried under miles of rock.  No one has
since beheld the Book of Bright Shadows ...


DESCRIPTION OF HOW THIS IMAGE WAS CREATED: 


        This was a real interesting project for a great number of reasons.  I
came up with the idea for this story quite a while ago as a daydream, thinking
of it as an animation that was totally impractical to produce, but fun to think
up.  It was Fraser who started persuading me that we should try and make a
movie of it, and that I should get a still ready for this competition.  I
eventually gave in, with the condition that Fraser learn Povray and help out. 
Fraser's first project was the lamp posts around the edge,  which don't
actually show much in terms of detail in the final render.  They are made up of
dozens of nice randomly curvy sphere sweeps topped with a diamond that was
written parametrically using a bunch of trig.  Fraser doesn't seem to really
get the concept of a beginners project.

Some of the other factors that made this an interesting project:
        * It's my first big project in Linux
        * Fraser is a Mac guy, so even with OS X, his box isn't quite as Linux
as it could (should) be
        * With a combination of Python, Povray, and Blender, we ran into pretty
well every error conceivable

I started off with the idea making a big autogenerated city, with massive arches
and doorways, and write macros to handle multiple styles, and all sorts of
crazy stuff.  It was originally going to be entirely circular with all walls
either perpendicular or parrallel to a line tangent to the center.  Then I
thought about actually trying to model it, and decided that going hexagonal
would be the next best thing.  I've often commented that a 60 degree based
coordinate system ought to be about as good as a 90 degree, so this was my
chance to put my money where my mouth is.  It was, umm interesting.  Having a
grid where the centers of three consecutive elements don't lie on a straight
line makes life interesting.  There certainly are some advantages to it though.
 I think it's a more flexible way of looking at things, once you get past all
your 90 degree bias.

Anyway, I set out to try and write this as a Povray macro.  Then I realized that
creating 100 000 element arrays in Povray was not an option.  I started looking
around for a good scripting language that would be quick to write in, and have
enough power.  I'd heard good things about Python, so I tried it.  After
playing around a bit, I found Numarray.  Numarray is a seriously rocking piece
of software.  After playing with it for a while, my code got progressively
sloppier as I realized that even if I did allocate a 100 000 element array that
I didn't really need, it would still run quickly.  I think that Python script
was taking about 30 seconds even for cities that were significantly larger than
I was eventually able to run through Povray.

So I ended up playing around with autogenerated cities, and soon discovered
that, as I had expected, it would take me a lot longer than 2 months to
accomplish everything I would like to.  I ended up spending too much time
playing with my Python script, and not enough modelling city parts.  With a
couple of days left, I went into panic mode, and started actually making all
the cool stuff that would actually be the focal point of the render.  I pulled
out the fireballs from another render (took a while to remember enough of what
I was doing to actually modify my old code.  I really need to comment better). 
With two days left, I decided to try actually making a person in Blender.  I'd
played around with Blender before, but never really made anything that looked
good.  I'd heard that the new Blender was big on subdivision surfaces, and it
sounded like a good way of doing things, so I gave it a try.  The only problem
I found is that I may in serious danger of becoming hooked on a GUI and
abandoning my Povray roots (although I'd like to see Blender wrap it's head
around this city once I finish it).  I really liked some of the earliest
renders I did with the the figure from an artistic point of view, before I got
the fireballs in too.  Nice contrast between a massive city and one lone
organic figure.  Hoorah for using mixed tools.

I should mention that I had an absolutely terrible headache getting the figure
from Blender to Povray.  I looked around for a script to do it, and found one
(povexport.py), and then it didn't work!  I'm not sure if I was using it wrong,
or if it had been broken by a recent release of Blender.  Anyway, after tearing
my hair out for a while, I took a look at what the export script was trying to
do, and then hacked up my own.  Pretty ugly.  And then Povray started giving me
segfaults when I tried to load the file.  I'm not sure if it was just too big,
or if it was because of syntax errors, but it seems to work now.

With a day left, I then started frantically tweaking things to try and make an
actual good render.  Parts of the city generation script that didn't quite work
before, now work in these specific circumstances but are probably more broken
then they were to start with.  In the final composition, the city doesn't
really show up well at all, which might be just as well, because there isn't
much to it yet.  I hand tweaked some buildings for the foreground, and they
look pretty nifty, but all the work I put into the placement macros isn't
really visible.  You'll hopefully be seeing another IRTC entry from me once I
get that script actually working, assuming I can find an appropriate topic.

Anyway, the final result is that it is now 12:54 at night in my time zone, and I
need to have this in by 3:00. Both me and Fraser's computers are running
renders.  One is looking good, the other is running on a minimally booted Linux
box so I can't see how it's doing, but hopefully it's looking even better, and
will finish in time.

I'll throw in my source.  There should be enough there to theoretically
reconstruct the render, although some of it might be a bit out of date,
depending on which computer I grab it off of.  I wouldn't recommend trying to
use or understand any of it, at this point I can't understand some of the stuff
I'm writing, and it is very finicky to run (I have to run Python, reboot, then
run Povray to get decent render times (RAM is a huge issue, and something is
leaking).  

On second thought, one thing that might be usefull to other people is the
diamond macro Fraser wrote.  He even writes intelligible code most of the time.
 If you need to make any diamonds, that could be handy, so feel free to use it
and credit him.

I realize that this is an awfully long winded description, but I get verbose
late at night.  Hopefully I was slightly comprehensible.

If you have any questions, or would be interested in seeing the source after I
rewrite it to be understandable, then feel free to email me.

