samedi 19 septembre 2009

PovRay experience

Well, before this gets lost, here are some thoughts about Povray and what I did with it.

A couple of years ago, I spend some time investigating on synthetic image rendering.
I considered several softwares, and quickly found out that they all needed a lot of learning time to really get into it.

I ended up selecting PovRay, and started learning its syntax. I must say it is very well documented, and the tutorial takes you step by step through the process, so that's not the hard part.

What can be frustrating is the rendering time: as soon as you get into something rather complex, it can become very very long, and may take up to several hours per image if you want full quality (anti-aliasing) and full size images. This is, of course, depending on the processing power of your computer. What you're supposed to do is to do pre-rendering with low-size and no AA, but often what causes the trouble is precisely all the high-level details you can only see with full-scale images...

As a example of what can be done with PovRay, you can find below an animated gif. As you can see, two light sources (two shadows), and a hole inside the blob that has a changing transmit value. This was done in 2007, I think, with PovRay 3.5. Of course, by now, I suppose this software has been updated, and that things can be made more easyly, but I have no more time to follow that. If you want to get going into this direction, make sure you check PovRay, although I know there are lots of others apps (Blender, for example).


Animating is done by generating several images with a automatically varying 'clock' variable, declared in PovRay. Then, the gif file has been produced with the smallest windows GUI program I know: Unfreez. Only 19.5 kbytes! Be sure to check this very simple but efficient tool.

Here is one of the frames with a higher resolution:

You can also notice that this image is far from perfect: although it was rendered with Anti-Aliasing on, you can see some aliasing at the border between the solid and the empty part. I didn't get to the "expert" level, so I wasn't able to handle this. But if you want to work on this, corresponding PovRay script is available here. Included files are standard libraries, so you should be able to make it run right away.

I did all this in a research context: I was working on embedded stereovision, and I had trouble getting a useful dataset. So the idea was to produce synthetic stereo pairs this way, that would simulate what could have been acquired by an on-board camera set. An example of my work can be found below (I used Oyonale's well-known Mini-cooper model). This image took several hours to render, and is still not perfect (see aliasing at the border between land and sky).

However, I found out that practical image processing did not produce the same results than a "real" image: for example, a corner detector will only detect garbage in such an image. This can probably be explained with some maths, but I did not want to lose more time on this approach, so I moved on. This is what research is all about...

Aucun commentaire:

Enregistrer un commentaire