TITLE: Lost at Sea NAME: Philip Chan COUNTRY: Canada EMAIL: p_chan@shaw.ca WEBPAGE: http://www.ucalgary.ca/~phichan/index.html TOPIC: Loneliness COPYRIGHT: I SUBMIT TO THE STANDARD RAYTRACING COMPETITION COPYRIGHT. JPGFILE: pc_lost.jpg ZIPFILE: pc_lost.zip RENDERER USED: POV-Ray 3.5 TOOLS USED: Adobe Photoshop 5.0LE (conversion to JPEG) RENDER TIME: 55m 28s HARDWARE USED: Athlon 1700+ XP, 256Mb DDR RAM IMAGE DESCRIPTION: Lost at sea with only the fish for company. The image is intended to create a sense of loneliness through the emptiness and desolation ( if such a term can be applied to the sea ) of the surroundings in which a solitary human being has been placed. DESCRIPTION OF HOW THIS IMAGE WAS CREATED: The image was created entirely inside POV's built in text editor. The sea is an isosurface (near the camera) merged with a plane. The sky is a skysphere, while the clouds are emitting media. The rowboat and the person on the rowboat are CSG objects. The sun, like the clouds, is also emitting media. The fish and the splash of water are blob objects. A more detailed and technical description of individual objects follows: Sea: Since this image began with me playing around with an isosurface to create ripples, that's where I'll begin. The ripples in the foreground are created using equations of the form, F(d) = sin( w*d + p ) / ( a*d + b ) where d represents the distance from the centre of the ripples. Since this formula tends to give a fairly steep gradient near the centre, Boolean expressions are used so that the isosurface is flat from d=0 to some arbitrary constant, say d = t. Essentially the equation is as follows: F(d) = sin( w*t + p ) / ( a*t + b ) for 0 <= d <= t F(d) = sin( w*d + p ) / ( a*d + b ) for d > t The equations for the two sets of ripples (fish leaving and entering the water) are simply added together, as they would be for interference of waves. This sphere contained isosurface is then merged with a plane to speed up render time (as opposed to a massive isosurface going off into the distance). The plane is at a height slightly greater than the lowest point of the ripples (equal to created some artifacts), and the isosurface is of sufficient size that artifacts occurring at the (discontinuous) transition between the plane and isosurface cannot be seen. The CSG is the given a waves normal, and a reflective and slightly transmitting texture making use of conserve_energy. Variable reflection is used, as are the fresnel and exponent keywords. Setting the exponent allowed for a better reflection of the sun. The metallic keyword was also used, but the reason for this is best explained when describing the sun. Sun: The sun is a thin cylinder placed in the distance, with cones placed in several while loops for the rays. It was somewhat difficult to get the colour I wanted for the emitting media since the appearance of the media depended largely on the background. Negative blue colour values were used to counteract the "blueness" of the sky in the background. This in turn messes up the colour of the reflection in the water, which is somewhat counteracted by the usage of the metallic keyword (to add some "blueness" to the reflection, since the water is somewhat blue). At first, I played with the idea of more prominent lens flare by adding some glare on the lens (small thin transparent/filtering colour cylinders), but in the end I decided that they detracted from the emptiness and thus the loneliness of the scene. Sky and Clouds: The sky is a simple skysphere with a gradient so the sky look brighter at the horizon (as it does in real life). The clouds are emitting media contained by three 1000 unit thick sections of planes. The sections were used since the angle of viewing caused the media to "clump" too much as you look further away from the camera leading to excessively bright spots. The sections uses the same pattern with reduced colour values. Rowboat, Rower, and Oars: Simple CSG. The rowboat is symmetrical with each half being a sphere and a cylinder cut off a little distance from the centre to give the prow some pointiness (which can't really be seen at this distance). I also added some brackets for the oars on the boat which can't be seen ... well maybe it's that grayish pixel if you zoom in a lot ... The texture is just a wood texture taken from "woods.inc," ... not that you can see it anyways. The rower is made of a box (body), 3 cylinders (arms and neck) and a sphere (head). The are no facial features since you wouldn't be able to see them, and there are also no legs. Textures are solid colours with a gradient for the neck (flesh to hair) and for the arms (shirt to flesh). The shirt uses a wrinkles pattern so as to not to look completely smooth. The oars are created by computing the unit vector from the tip of each arm (I'd say hand, but there are no hands) to the corresponding bracket, and then placing a cylinder using this vector. The flat part at the end of the oar isn't mounted properly, but you can only see a pixel of it above the surface of the water so it doesn't matter. Fish: The fish is a blob object. I created some raised bones on the tail with small cylindrical components placed in a while loop, but they can't be seen given the size of the fish in the final image. The texture is slightly reflective and has some phong highlight. Some iridescence was also used, but I didn't really succeed in making it look wet. The fish, boat, rower and oars are part of a light group with global lights enabled. Since these objects are between the camera and the sun, the side facing the camera wasn't illuminated properly, so the light group provides a secondary source of light, placed below the objects so that the light would seem to come from the surface of the water. I tried using radiosity but couldn't get good results, so I resorted to the light group. Splash: The splash is a blob object consisting of 1000 randomly placed components. The idea on how to create the splash was taken from the text file accompanying "Compartmentalized Sea" by Ben Weston (July-August 2002), but the code is original (created without referring to Ben Weston's code). The blob components are basically shot up from the surface of the water, with each particle given a random "time stamp" to be used in determining the effect of gravity on that particle. In it's current for, the parameters for the macro doesn't really give a good control over the distribution of the particles. I hope to one day refine the macro so it's more useful. The texture is similar to the one used for the sea, but brighter more transparent, and somewhat ambient.