// Simple Noah's Ark - revised for clearer silhouette and full framing #version 3.7; global_settings { assumed_gamma 1.0 } background { color rgb <0.90, 0.95, 1.00> } // ------------------------------------------------- // Camera (3/4 view so shape reads like reference) // ------------------------------------------------- camera { location <22, 9.5, -22> look_at <1.5, 3.0, 0> angle 32 } // ------------------------------------------------- // Warm soft lights // ------------------------------------------------- light_source { <-25, 28, -30> color rgb <1.00, 0.90, 0.75> area_light <10,0,0>, <0,0,10>, 5, 5 adaptive 1 jitter } light_source { <30, 22, -10> color rgb <1.00, 0.92, 0.80> area_light <8,0,0>, <0,0,8>, 4, 4 adaptive 1 jitter } light_source { <0, 60, 0> color rgb <0.35, 0.33, 0.32> } // ------------------------------------------------- // Simple sky + water // ------------------------------------------------- sphere { <0,0,0>, 500 hollow pigment { gradient y color_map { [0.00 color rgb <0.92,0.96,1.00>] [0.60 color rgb <0.78,0.88,1.00>] [1.00 color rgb <0.62,0.78,0.98>] } } finish { ambient 1 diffuse 0 } no_shadow } plane { y, 0 pigment { color rgb <0.55, 0.70, 0.82> } finish { diffuse 0.75 ambient 0.10 specular 0.08 roughness 0.08 } } // ------------------------------------------------- // Colors / finishes (simple shading) // ------------------------------------------------- #declare WoodCol = color rgb <0.76, 0.58, 0.36>; #declare TrimCol = color rgb <0.18, 0.12, 0.09>; #declare CabinCol = color rgb <0.86, 0.70, 0.48>; #declare RoofCol = color rgb <0.40, 0.26, 0.18>; #declare GlassCol = color rgb <0.70, 0.85, 0.95>; #declare MatteFinish = finish { diffuse 0.88 ambient 0.10 specular 0.10 roughness 0.06 } #declare GlassFinish = finish { diffuse 0.25 ambient 0.10 specular 0.25 roughness 0.03 } // ------------------------------------------------- // Ark dimensions // ------------------------------------------------- #declare L = 18.0; // hull length (X) #declare Rx = L/2; #declare Rz = 3.2; // half width (Z) #declare BaseY = 2.0; // hull center height #declare DeckY = 4.2; // deck cut height // ------------------------------------------------- // Hull: capsule + bow/stern lift, then deck cut // ------------------------------------------------- #declare HullShape = difference { union { // Main rounded hull cylinder { <-Rx, BaseY, 0>, , Rz } sphere { <-Rx, BaseY, 0>, Rz } sphere { < Rx, BaseY, 0>, Rz } // Slight deeper belly (gives nicer curve in profile) cylinder { <-Rx+0.6, BaseY-0.65, 0>, , Rz*0.92 } sphere { <-Rx+0.6, BaseY-0.65, 0>, Rz*0.92 } sphere { < Rx-0.6, BaseY-0.65, 0>, Rz*0.92 } // Raised bow and stern (like the drawing) // Use scaled spheres to "pull up" ends. sphere { < Rx-0.8, BaseY+1.10, 0>, 2.4 scale <0.75, 1.25, 0.85> } sphere { <-Rx+0.8, BaseY+0.70, 0>, 2.0 scale <0.75, 1.10, 0.85> } // Gentle overall vertical squash so it doesn't look like a tube scale <1, 0.95, 1> } // Flat deck cut box { <-Rx-3, DeckY, -10>, } // Tiny flattening at very bottom to sit on water nicely box { <-Rx-3, -10, -10>, } }; // Deck rim/rail: a thin band near the deck line #declare DeckRim = difference { // Outer band (slice) intersection { object { HullShape } box { <-Rx-3, DeckY-0.18, -10>, } } // Inner carve to make it thinner intersection { difference { union { cylinder { <-Rx, BaseY, 0>, , Rz*0.86 } sphere { <-Rx, BaseY, 0>, Rz*0.86 } sphere { < Rx, BaseY, 0>, Rz*0.86 } scale <1, 0.95, 1> } box { <-Rx-3, DeckY, -10>, } box { <-Rx-3, -10, -10>, } } box { <-Rx-3, DeckY-0.25, -10>, } } }; // Bold bow band accent (front vertical stripe) #declare BowBand = intersection { difference { cylinder { , , Rz*1.08 } cylinder { , , Rz*0.93 } } box { , } }; // ------------------------------------------------- // Cabin + roof (simple, like reference) // ------------------------------------------------- #declare CabinMin = <-2.7, DeckY, -1.55>; #declare CabinMax = < 3.4, DeckY+1.85, 1.55>; // longer cabin, shifted toward bow #declare CabinBody = difference { box { CabinMin, CabinMax } // Two side windows on near side (Z negative) box { <-1.9, DeckY+0.75, -1.551>, <-0.3, DeckY+1.35, -1.20> } box { < 0.4, DeckY+0.75, -1.551>, < 2.0, DeckY+1.35, -1.20> } }; #declare Window1 = box { <-1.88, DeckY+0.77, -1.215>, <-0.32, DeckY+1.33, -1.205> }; #declare Window2 = box { < 0.42, DeckY+0.77, -1.215>, < 1.98, DeckY+1.33, -1.205> }; // Pitched roof prism extruded along X, centered over cabin #declare RoofLen = (CabinMax.x - CabinMin.x) + 0.6; #declare RoofCenterX = (CabinMax.x + CabinMin.x)/2; #declare CabinRoof = prism { linear_sweep linear_spline -RoofLen/2, RoofLen/2, 6, <-1.85, 0.00>, <-1.35, -1.05>, < 1.35, -1.05>, < 1.85, 0.00>, < 0.00, 1.05>, <-1.85, 0.00> rotate <0,90,0> translate }; // Small roof overhang lip (thin) #declare RoofLip = box { , }; // ------------------------------------------------- // Assemble // ------------------------------------------------- union { object { HullShape texture { pigment { WoodCol } finish { MatteFinish } } } object { DeckRim texture { pigment { TrimCol } finish { MatteFinish } } } object { BowBand texture { pigment { TrimCol } finish { MatteFinish } } } object { CabinBody texture { pigment { CabinCol } finish { MatteFinish } } } object { CabinRoof texture { pigment { RoofCol } finish { MatteFinish } } } object { RoofLip texture { pigment { RoofCol } finish { MatteFinish } } } object { Window1 texture { pigment { GlassCol } finish { GlassFinish } } } object { Window2 texture { pigment { GlassCol } finish { GlassFinish } } } // Put ark slightly into water for a natural sit translate <0, 0.12, 0> }