The other way is to emulate a height field with a little program that turns an image into a PatchMesh or into PointsPolygons. I found out that the most efficient version is a bilinear patch mesh with explicitly defined normals. It still uses more memory than POV and is considerably slower (even if rendered without shadows), but the result is better. Here are three pictures that use the same 128x128 image created by gforge as a height field. The first is a POV-height_field and uses the "smooth" option, the second is a bilinear patch mesh with explicitly set normal vectors at each vertex and the third image uses a displacement shader and a bilinear patch. The last two images have been rendered with BMRT.
Some numbers for my configuration (Linux 2.0.27, P90, 16MB RAM, POVRay 3.0, BMRT 2.3.5):
Image | Time | VSZ | RSS |
---|---|---|---|
POVRay +a | 29s | 2.2MB | 1MB |
PatchMesh | 145s | 27MB | 8MB |
Displacement | 350s | 17MB | 8MB |
The original pgm-file has 88KB. The RIB-file with PointsPolygons generated from this had more than 14MB. The bilinear version has a 900KB RIB file. As a bicubic patch mesh the RIB-file is considerably smaller, but my virtual memory was exhausted before the image was done.