POV-Ray : Newsgroups : povray.text.scene-files : Dr. Manhattan's Ship : Dr. Manhattan's Ship Server Time
29 Jul 2024 00:25:57 EDT (-0400)
  Dr. Manhattan's Ship  
From: Ruy Flávio de Oliveira
Date: 14 Dec 1998 12:31:22
Message: <36755A0E.F44D5789@hipernet.com.br>
Greetings,

As promised, here are the 729 lines of Dr. Manhattan's Ship. If
you're gonna use my glass texture (or any other glass texture,
for that matter), be ready to wauit. A lot.

And if you use it on your scene, please, mail me a sample of the
result.

Thanks,

Ruy

______________________________________________

/*********************************************************/
/*                                                       */
/* Dr. Manhattan's Martian Ship                          */
/* ============================                          */
/*                                                       */
/* As seen on Watchmen (DC Comics, 1986) by Allan Moore  */
/* and David Gibbons. All rights reserved. This picture  */
/* was modelled for non-commercial purposes only.        */
/*                                                       */
/* Author: Ruy Flavio de Oliveira <ruy### [at] hipernetcombr>  */
/*                                                       */
/*********************************************************/


global_settings
{
        assumed_gamma 1.0
        max_trace_level 20
        radiosity
        {
                brightness 0.1
                count 120
                distance_maximum 5
                error_bound 0.35
        }
}

#declare Pink_Glass =
texture {
    pigment { color rgbf<1.0, 0.9, 0.9, 0.7> }
    finish
    {
          specular 1
          roughness 0.001
          ambient 0
          diffuse 0
          reflection 0.1
          refraction 1
          ior 1.5
    }
}




/*********************************************************/
/*                                                       */
/* Cunhas - (don't know how to say taht properly in      */
/*          English). Union of "fat" and "thin" ones,    */
/*          to be taken                                  */
/*          from a cylinder making a Wheel.              */
/*                                                       */
/* Ring   - Inner ring of the Wheel.                     */
/*                                                       */
/* Spikes - Twelve Spikes on each "hour" of the Wheel.   */
/*                                                       */
/* Teeth  - 144 teeth on the Cog.                        */
/*                                                       */
/*********************************************************/
#declare Cunhinha = difference
{
    difference
    {
        cylinder { <0, -0.026, 0>, <0, 0.026, 0>, 1.5 }
        plane { z, 0 inverse rotate y*77 translate z*-0.1 }
    }
    plane {z, 0 inverse rotate y*-77 translate z*-0.1 }
    rotate y*15
}

#declare Cunhinhas = union
{
    #declare Juca = 0;
    #while (Juca < 4)
        object { Cunhinha rotate y*30 rotate y*Juca*90 }
        #declare Juca = Juca + 1;
    #end
}

#declare Cunhona = difference
{
    difference
    {
        cylinder { <0, -0.026, 0>, <0, 0.026, 0>, 1.5 }
        plane { z, 0 inverse rotate y*63 translate z*-0.1 }
    }
    plane {z, 0 inverse rotate y*-63 translate z*-0.1 }
    rotate y*15
}

#declare Cunhonas = union
{
    #declare Juca = 0;
    #while (Juca < 4)
        object { Cunhona rotate y*-15 rotate y*Juca*90 }
        #declare Juca = Juca + 1;
    #end
}

#declare Cunhas = union
{
    object { Cunhinhas }
    object { Cunhonas }

    bounded_by { cylinder { <0, -0.0261, 0> <0, 0.0261, 0> 1.501
} }
}

#declare Ring = difference
{
    cylinder { <0, -0.025, 0> <0, 0.025, 0> 0.9 }
    cylinder { <0, -0.026, 0> <0, 0.026, 0> 0.7 }
}

#declare Wheel = object
{
    difference
    {
        cylinder { <0, -0.025, 0>, <0, 0.025, 0>, 1.92 }
        object { Cunhas }
    }

    bounded_by { cylinder { <0, -0.055, 0> <0, 0.055, 0> 2.01 } }

}

#declare Spike = difference
{
    difference
    {
        cylinder { <0, -0.025, 0>, <0, 0.025, 0>, .8 }
        plane { z, 0 rotate y*83 }
    }
    plane {z, 0 rotate y*-83 }
}

#declare Spikes1 = union
{
    #declare Juca = 0;
    #while (Juca < 4 )
        object { Spike translate z*-2.5 rotate y*30 rotate
y*Juca*90 }
        #declare Juca = Juca + 1;
    #end
}

#declare Spikes2 = union
{
    #declare Juca = 0;
    #while (Juca < 4 )
        object { Spike translate z*-2.5 rotate y*60 rotate
y*Juca*90 }
        #declare Juca = Juca + 1;
    #end
}
#declare Tooth = difference
{
    difference
    {
        cylinder { <0, -0.026, 0>, <0, 0.026, 0>, 0.2 }
        plane { z, 0 inverse rotate y*68 }
    }
    plane {z, 0 inverse rotate y*-68 }
}

#declare Bounding_Ring = difference
{
    cylinder { <0, -0.031, 0> <0, 0.031> 1.92 }
    cylinder { <0, -0.032, 0> <0, 0.032> 1.78 }
}

#declare Teeth = merge
{
    #declare Juca = 0;
    #while (Juca < 144 )
        object { Tooth
                 translate z*-1.8
                 rotate y*-30
                 rotate y*Juca*2.5 }
        #declare Juca = Juca + 1;
    #end
    bounded_by { Bounding_Ring }
}

#declare Little_Teeth1 = merge
{
    #declare Juca = 0;
    #while (Juca < 30 )
        object { Tooth
                 translate z*-0.15
                 rotate y*-30
                 rotate y*Juca*12 }
        #declare Juca = Juca + 1;
    #end
//    bounded_by { Bounding_Ring }
}

#declare Little_Teeth2 = merge
{
    #declare Juca = 0;
    #while (Juca < 20 )
        object { Tooth
                 translate z*-0.10
                 rotate y*-30
                 rotate y*Juca*18 }
        #declare Juca = Juca + 1;
    #end
}

#declare Little_Cog1 = difference
{
    difference
    {
        cylinder { <0, -0.025, 0> <0, 0.025, 0> 0.2 }
        object { Little_Teeth1 }
    }
    cylinder { <0, -0.026, 0> <0, 0.026, 0> 0.08 }
    bounded_by { cylinder { <0, -0.026, 0> <0, 0.026, 0> 0.2 } }
}

#declare Little_Cog2 = difference
{
    difference
    {
        cylinder { <0, -0.025, 0> <0, 0.025, 0> 0.18 }
        object { Little_Teeth2 }
    }
    cylinder { <0, -0.026, 0> <0, 0.026, 0> 0.08 }
    bounded_by { cylinder { <0, -0.026, 0> <0, 0.026, 0> 0.18 } }

}

#declare Little_Cogs = merge
{
    object { Little_Cog1 translate y* 1.1 }
    object { Little_Cog2 translate y* 1.0 }
    object { Little_Cog2 translate y*-1.0 }
    object { Little_Cog1 translate y*-1.1 }
}

#declare Cog = merge
{
    difference
    {
        object { Wheel }
        object { Teeth }
    }
    object { Spikes1 }
    object { Spikes2 }
    object { Ring }

    bounded_by { cylinder { <0, -.03, 0> <0, .03, 0> 2.5 } }
}

/*********************************************************/
/*  Little watch hands.                                  */
/*  12 of them pointing out of the Ship                  */
/*********************************************************/
#declare Hand = union
{
    prism
    {
        linear_sweep
        linear_spline
        -0.025, 0.025, 8,
        <-0.03, 0.00>, <-0.03, 0.40>, <-0.06, 0.37>,
        < 0.00, 0.55>, < 0.06, 0.37>, < 0.03, 0.40>,
        < 0.03, 0.00>, <-0.03, 0.00>
    }
    cylinder { <0, 0,  0.00> <0, 0, -0.06> 0.06 }
    cylinder { <0, 0, -0.06> <0, 0, -0.12> 0.08 }
    cylinder { <0, 0, -0.12> <0, 0, -0.18> 0.10 }

    translate z*0.18
}

/*********************************************************/
/*  Spears. Lots of them                                 */
/*                                                       */
/*  Twelve_Spears                                        */
/*  There is 12 double spears (formed by object Spear)   */
/*  on the rim of the Ship, where theHands come out.     */
/*                                                       */
/*  Six_Spears                                           */
/*  There are 6 double spears (formed by object Spear)   */
/*  going through the horizontal hour glasses.           */
/*                                                       */
/*  Six_Single_Spears                                    */
/*  There are 2 groups of 6 single pears, (object        */
/*  Single_Spear) keeping the highest (and it's double,  */
/*  the lowest) balcony.                                 */
/*                                                       */
/*  Big_Spear                                            */
/*  The large Spear-like column that goes through the    */
/*  center of the Ship.                                  */
/*                                                       */
/*********************************************************/
#declare Tip = merge
{
    cone { y*1.7, 0.07, y*2.3, 0 }
    difference
    {
        cone { y*0.05, 0.07, 0, 0.05 }
        torus { 0.096, 0.056 }
        translate y*-0.05
        scale <1, 2, 1>
        translate y*1.7
    }
}

#declare Spear = merge
{
    object { Tip }
    cylinder { <0, -1.7, 0> <0, 1.7, 0> 0.04 }
    object { Tip rotate x*180 }

    bounded_by { cylinder { <0, -2.31, 0> <0, 2.31, 0>, 0.071 } }

}

#declare Single_Spear = merge
{
    object { Tip translate y*-0.4 }
    cylinder { <0, -1.3, 0> <0, 1.3, 0> 0.03 }

    bounded_by { cylinder { <0, -2.31, 0> <0, 2.31, 0>, 0.071 } }

}

#declare Twelve_Spears = merge
{
    #declare Juca = 0;
    #while (Juca < 12)
        object { Spear translate z*3.03 rotate y*Juca*30 }
        object { Hand  translate z*3.00 rotate y*Juca*30 }
        #declare Juca = Juca + 1;
    #end
}

#declare Six_Spears = merge
{
    #declare Juca = 0;
    #while (Juca < 6)
        object
        {
            Spear
            scale 0.8
            translate z*1.93
            rotate y*30
            rotate y*Juca*60
        }
        #declare Juca = Juca + 1;
    #end
}

#declare Six_Single_Spears = merge
{
    #declare Juca = 0;
    #while (Juca < 6)
        object
        {
            Single_Spear
            scale 0.8
            translate <0, 2.75, 0.48>
            rotate y*Juca*60
        }
        #declare Juca = Juca + 1;
    #end
}

#declare Big_Tip = merge
{
    cone { y*3.9, 0.15, y*4.5, 0 }
    difference
    {
        cone { 0, 0.15, -0.07*y, 0.13 }
        torus { 0.15, 0.07 translate -0.07*y }
        scale <1, 3, 1>
        translate y*3.901
    }
}

#declare Big_Spear = merge
{
    object { Big_Tip }
    cylinder { <0, -3.7, 0> <0, 3.7, 0> 0.08 }
    object { Big_Tip rotate x*180 }

    bounded_by { cylinder { <0, -4.51, 0> <0, 4.51, 0>, 0.151 } }

}

#declare Little_Ring1 = difference
{
    cylinder { <0, -0.025, 0> <0, 0.025, 0> 0.15 }
    cylinder { <0, -0.026, 0> <0, 0.025, 0> 0.08 }
}

#declare Little_Ring2 = difference
{
    cylinder { <0, -0.025, 0> <0, 0.025, 0> 0.12 }
    cylinder { <0, -0.026, 0> <0, 0.025, 0> 0.08 }
}

#declare Little_Rings = merge
{
    object { Little_Ring1 translate -3.65*y }
    object { Little_Ring2 translate -3.58*y }
    object { Little_Ring2 translate  3.58*y }
    object { Little_Ring1 translate  3.65*y }
}

/*********************************************************/
/* The six Hour Horizontal Hour Glasses. Deatails too    */
/* boring to be discussed here. All CSG.                 */
/*********************************************************/
#declare Hemisphere = merge
{
    difference
    {
        difference
        {
            sphere { 0, 0.50 }
            sphere { 0, 0.49 }
        }
        plane { z, 0 }
    }
    cylinder { <0, 0, -0.01> <0, 0, 0> 0.5 }
}

#declare Differential_Hemisphere = merge
{
    difference
    {
        sphere { 0, 0.50 }
        plane { z, 0 }
    }
    cylinder { <0, 0, -0.01> <0, 0, 0> 0.5 }
}

#declare Hour_Glass = merge
{
    object { Hemisphere translate z*-0.56 }
    cylinder { <0, 0, -0.09> <0, 0, -0.03> 0.13 }
    cylinder { <0, 0, -0.03> <0, 0,  0.03> 0.20 }
    cylinder { <0, 0,  0.03> <0, 0,  0.09> 0.13 }
    object { Hemisphere translate z*-0.56 rotate y*180 }
}

#declare Differential_Hour_Glass = merge
{
    object { Differential_Hemisphere translate z*-0.56 }
    cylinder { <0, 0, -0.09> <0, 0, -0.03> 0.13 }
    cylinder { <0, 0, -0.03> <0, 0,  0.03> 0.20 }
    cylinder { <0, 0,  0.03> <0, 0,  0.09> 0.13 }
    object { Differential_Hemisphere translate z*-0.56 rotate
y*180 }

    bounded_by { cylinder { <0, 0, -0.7> <0, 0, 0.7> 0.51 } }
}

#declare Six_Hour_Glasses = merge
{
    #declare Juca = 0;
    #while ( Juca < 6 )
        object
        {
            Hour_Glass
            scale 0.7
            translate z*1.93
            rotate y*30
            rotate y*Juca*60
        }
        #declare Juca = Juca + 1;
    #end
}

#declare Six_Differential_Hour_Glasses = merge
{
    #declare Juca = 0;
    #while ( Juca < 6 )
        object
        {
            Differential_Hour_Glass
            scale 0.7
            translate z*1.93
            rotate y*30
            rotate y*Juca*60
        }
        #declare Juca = Juca + 1;
    #end
}

/*********************************************************/
/* 2 pairs of domes (one of them is actually a balcony), */
/* at the top and at the bottom of the Ship.             */
/*********************************************************/
#declare Lower_Dome = object
{
    Hemisphere
    scale 1.2
    rotate x*-90
    translate y*1.5
}

#declare Lower_Hemisphere = object
{
    difference
    {
        sphere { 0, 0.50 }
        plane { z, 0 }
    }
    scale 1.2
    rotate x*-90
    translate y*1.5
}

#declare Upper_Dome = object
{
    merge
    {
        object { Hemisphere }
        difference
        {
            cylinder { <0, 0, -0.01> <0, 0, -0.06> 0.50 }
            cylinder { <0, 0,  0.00> <0, 0, -0.07> 0.49 }
        }
    }
    scale 1.2
    rotate x*90
    translate y*3.0
}

#declare Upper_Hemisphere = object
{
    difference
    {
        sphere { 0, 0.50 }
        plane { z, 0 }
    }
    scale 1.2
    rotate x*90
    translate y*3.0
}

#declare Domes = merge
{
    object { Upper_Dome }
    object { Lower_Dome }
}

#declare Hemispheres = merge
{
    object { Upper_Hemisphere }
    object { Lower_Hemisphere }
}

/*********************************************************/
/* Entrance.                                             */
/* Actually, a hole at the central Hall (a hollow sphere)*/
/*********************************************************/
#declare Entrance = difference
{
    difference
    {
        sphere { 0, 0.30 }
        sphere { 0, 0.29 }
    }
    sphere { <0, 0, -0.3>, 0.20 }
}

/*********************************************************/
/* 2 horizontal rings binding the Cogs together.         */
/* Some ornaments to the Central Tower.                  */
/*********************************************************/
#declare Horizontal_Ring = difference
{
    cylinder { <0, -0.025, 0> <0, 0.025, 0> 1.5 }
    cylinder { <0, -0.026, 0> <0, 0.026, 0> 1.3 }
}

#declare Horizontal_Rings = merge
{
    object { Horizontal_Ring translate  0.75*y }
    object { Horizontal_Ring translate -0.75*y }
}

#declare Central_Spear = merge
{
    difference
    {
        object { Big_Spear }
        object { Big_Spear scale <.78, .995 , .78> }
    }
    object { Little_Rings }
    object { Little_Cogs }

    object { Entrance }

    difference
    {
        merge
        {
            object { Domes }
            object { Domes rotate x*180 }
        }
        cylinder { <0, -3.5, 0> <0, 3.5, 0> 0.08 }
    }
}

/*********************************************************/
/* Blend it all together. Render on a medium-high oven   */
/* for about forty hours. Serve cold.                    */
/*********************************************************/
#declare Ship = merge
{
    difference
    {
        merge
        {
            object { /*Wheel*/ Cog rotate x*90 }
            object { /*Wheel*/ Cog rotate x*90 rotate y*60 }
            object { /*Wheel*/ Cog rotate x*90 rotate y*120 }
        }
        object
        {
            merge
            {
                object
                {
                    merge
                    {
                        object { Big_Spear }
                        object { Hemispheres }
                        object { Hemispheres rotate x*180 }
                    }
                    scale 1.15
                }
                sphere { 0, 0.30 }
                object { Six_Differential_Hour_Glasses }
            }
        }
    }

    cylinder { <0, -0.025, 0> <0, 0.025, 0> 3 }

    object { Six_Hour_Glasses }

    object { Six_Spears }

    object { Six_Single_Spears }

    object {Six_Single_Spears rotate x*180 }

    object { Horizontal_Rings }

    object { Twelve_Spears }

    object { Central_Spear scale 1.15 }
}

/*********************************************************/
/* Main.                                                 */
/* 2 lights, one camera, one ship and a sky sphere.      */
/*                                                       */
/*********************************************************/

light_source
{
    <50, 200, -50> color rgb <1, 1, 1>
}


light_source
{
    <-80, 140, -14> color rgb <1, 1, 1>
}


camera
{
    direction <0, 0, 1.5>
    location <0, 10, -11>
    look_at  <0, 4, 5>
}

object
{
    object { Ship }
    texture { Pink_Glass }
    rotate y*15
    translate <0, 4, 5>
}


sky_sphere
{
        pigment
        {
                gradient y
                color_map
                {
                        [ 0.5  color red 0.258824 green 0.258824
blue 0.435294 ]
                        [ 1.0  color red 0.184314 green 0.184314
blue 0.309804 ]
                }
                scale 2
                translate -1
        }
        pigment
        {
                bozo
                turbulence 0.65
                octaves 6
                omega 0.7
                lambda 2
                color_map
                {
                        [0.0 0.1 color rgb <0.85, 0.85, 0.85>
                                 color rgb <0.75, 0.75, 0.75>]
                        [0.1 0.5 color rgb <0.75, 0.75, 0.75>
                                 color rgbt <1, 1, 1, 1>]
                        [0.5 1.0 color rgbt <1, 1, 1, 1>
                                 color rgbt <1, 1, 1, 1>]
                }
                scale <0.1, 0.07, 0.1>
        }
        rotate -135*x
}


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.